(57)【要約】【課題】ＤＭＡコントローラを利用したデータ転送を効率よく制御できるようにし、また、データ転送全体を制御するＣＰＵの制御プログラムを簡潔に記述できるようにする。【解決手段】ＤＭＡコントローラ(DMAC)２００は、データ転送の転送設定値（デスクリプタ）を順次レジスタ(REG)２０１に読み込み、読み込んだ転送設定値に基づきＤＭＡ転送処理を行なう。DMAC２００は、転送設定値として、ＤＭＡ転送を行なわないことを指定するＮＯＰ指定を受け付けるよう構成する。REG２０１に読み込んだ転送設定値でＮＯＰ指定が行なわれている場合、ＮＯＰ割り込み信号を発生して当該のＤＭＡ転送を行なわずに転送処理を終了する。ＣＰＵ側では、転送長が短かすぎるなど、あらかじめ判明している転送個所に対してＮＯＰ指定を含む転送設定値を用意することができ、ＮＯＰ割り込みに応じＣＰＵ側の転送処理を実行できる。【選択図】図２
2008146186.tif 000002
【特許請求の範囲】
【請求項１】
メモリに格納した１つ以上のデータ転送の転送設定値を順次レジスタに読み込み、読み込んだ転送設定値に基づきＤＭＡ転送処理を行なうＤＭＡ転送装置であって、
前記転送設定値として、ＤＭＡ転送を行なわないことを指定するＮＯＰ指定を受け付ける手段を有し、
レジスタに読み込んだ前記転送設定値で前記ＮＯＰ指定が行なわれている場合、ＮＯＰ割り込み信号を発生して当該のＤＭＡ転送を行なわずに転送処理を終了することを特徴とするＤＭＡ転送装置。
【請求項２】
請求項１に記載のＤＭＡ転送装置において、ＤＭＡ転送に際して、符号化圧縮データを復号化して転送先に転送するデコード機能を有することを特徴とするＤＭＡ転送装置。
【請求項３】
請求項１または請求項２に記載のＤＭＡ転送装置を用いてＣＰＵがデータ転送を行なわせるデータ転送制御方法であって、
前記ＤＭＡ転送装置の転送機能と同等の転送をＣＰＵ処理で実行するＣＰＵデータ転送過程と、
前記ＮＯＰ割り込み信号を検出する割り込み検出過程を含み、
前記割り込み検出過程がＮＯＰ割り込み信号を検出した場合、前記ＤＭＡ転送装置のレジスタ値にしたがって前記ＣＰＵデータ転送過程によりデータ転送を行ない、その後、再び前記ＤＭＡ転送装置にＤＭＡ転送の開始を指示することを特徴とするデータ転送制御方法。
【請求項４】
請求項３に記載のデータ転送制御方法において、実行すべきデータ転送の転送長が閾値よりも短い場合に前記転送設定値で前記ＮＯＰ指定を行ない、長い場合に前記ＮＯＰ指定を行なわないことを特徴とするデータ転送制御方法。
【請求項５】
請求項３または請求項４に記載のデータ転送制御方法を実施するＣＰＵのデータ転送制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリに格納した１つ以上のデータ転送の転送設定値を順次レジスタに読み込み、読み込んだ転送設定値に基づきＤＭＡ転送処理を行なうＤＭＡ転送装置、該ＤＭＡ転送装置を利用するデータ転送制御方法、および該ＤＭＡ転送装置を利用するデータ転送制御プログラムに関するものである。
【背景技術】
【０００２】
従来より、特定のデータ形式で記述された入力データを他のデータ形式に変換する過程で、ＤＭＡコントローラのようなデータ転送ハードウェアを用いる技術が知られている。
【０００３】
たとえば、符号化（あるいは暗号化）されたデータを受信し、復号化したデータを用いて特定の処理、たとえば印刷出力処理や表示出力処理に用いる過程において、上記のようなデータ転送ハードウェアが用いられている。
【０００４】
特に、印刷装置では、符号圧縮された画像データを受信し、復号した画像データを印刷出力する。線順次ラスタデータで構成された印刷データを処理するインクジェットプリンタ(以下、プリンタと略記する)の場合、ホストコンピュータはライン毎に符号圧縮したデータを順次送信する。
【０００５】
図５(a)は、このようなプリンタ内部のソフトウェアの一般的な構成を簡素化して示している。復号処理５００は、受信バッファ５０２に格納した符号圧縮データを順に復号して数ラインを単位（バンドという）として内部バッファ５０３に配置する。
【０００６】
画像処理５０１は内部バッファ５０３に格納されたデータに対し適当な画像処理を行ない、出力バッファ５０４にデータを格納する。出力バッファ５０４のデータを不図示の記録ヘッドの駆動信号に変換し、記録ヘッドに転送することにより画像が印刷される。
【０００７】
図５(b)は、受信バッファ５０２内の符号圧縮データの例である。データは印刷制御コマンドにより符号圧縮データの種類が示され、R（Red）の１ライン目、G（Green）の１ライン目というように線順次にデータが並んでいる。符号圧縮データの種類としては、たとえばパックビッツ（PackBits）符号、シードロー（Seed Row）符号などがある。図５(c)は内部バッファ５０３内の復号データの例である。色毎にバンド単位でデータが格納されている。
【０００８】
従来のデータ転送ハードウェア、特にＤＭＡ転送ハードウェアには、メモリ上に適宜配置した複数回分の転送設定値（以下、デスクリプタ）をレジスタに順次ロードし、データ転送を行なうものがある（たとえば、下記の特許文献１）。このようなＤＭＡ転送モードは、アレイチェーン転送モードおよびリンクアレイチェーン転送モードなどと呼ばれる。
【０００９】
復号処理５００での符号圧縮データの復号化は、ＣＰＵで行なうと負荷が大きいため、従来より、上記のようなＤＭＡコントローラにデコード機能を付加したハードウェア（以下、デコーダ）により復号化を行なう構成が知られている。このような構成で効率よく符号圧縮データの復号化を行なうためにはバンド単位で一度に処理を行なうことが望ましい。
【００１０】
上記のようなＤＭＡコントローラ構成のデコーダを使用する際には、ＣＰＵは符号の種類や、転送先のバッファ長（復号データバッファ長）をデスクリプタで指定する。
【００１１】
ＣＰＵは印刷データの印刷制御コマンドを解釈しながら、ライン・色毎に受信バッファ５０２の転送元アドレス、内部バッファ５０３の転送先アドレス、転送バイト長を設定した１バンド分のデスクリプタを作成し、デコーダのレジスタに設定する。そして、１バンド分の設定が完了したら、アレイチェーン転送モードでデコーダが一度に復号化／転送処理を実行する。
【００１２】
ところで、ホストコンピュータが送信する印刷データは復号後のデータの長さがライン毎に異なることが多々ある。しかも、パックビッツ符号、シードロー符号のようなランレングス圧縮方式では、復号してみなければ復号後のデータの長さを知ることはできない。
【００１３】
一方、プリンタ内部での画像処理を考慮すると、内部バッファ５０３に復号データを並べる際にバンド内のラインの長さ、あるいは少なくともライン内の各色の長さを揃える必要がある。
【００１４】
前述のデスクリプタに設定する復号データバッファ長は、データの長さを揃えるために設定する値で、デコーダは、復号した結果復号データの長さが指定された復号データバッファ長に満たない場合には、透明を意味する値で残りの部分のデータ長を保障するよう動作する。
【００１５】
ラインの長さを揃えるために一番単純な処理は、復号データバッファ長として用紙の幅分の長さを設定することである。しかし、画像データがない部分は画像処理でメモリアクセスをしないように構成する方が望ましく、復号データバッファ長として用紙の幅分の長さを固定的に設定するのはメモリアクセスが多くなり、処理効率の観点から望ましくない。
【００１６】
そこで、最低限必要な復号データバッファ長を予測して１バンドに対してデスクリプタを設定し、復号する構成が考えられている。予測が違う場合、特に復号データが復号データバッファ長よりも長い場合には、復号データが復号データバッファ長で切られてしまうが、この場合にはCPUが復号データバッファ長を大きくしてデスクリプタを作成し直し、デコーダで再処理する。
【００１７】
なお、送信異常のような障害が発生している場合には、送信部がアボート通知信号をＤＭＡコントローラに通知して、通知を受けたＤＭＡコントローラがデータ転送を自動的に再実行するように構成されたものがある（たとえば、下記の特許文献２）。
【特許文献１】特開平７−２１１１７号公報
【特許文献２】特開平６−１０３１８１号公報
【発明の開示】
【発明が解決しようとする課題】
【００１８】
ところで、電子回路のゲート数やコストを抑えるために、ＤＭＡコントローラやデコーダにはいくつかの制約が存在し、その１つとしてたとえば転送バイト長として設定可能な最小値が制約されている点があげられる。
【００１９】
もし、この最小値以下の小さなデータを処理する必要が生じた場合はCPUで同等の処理を行なうことになる。たとえば、シードロー符号化されたNライン目のデータをCPUで復号しなければならない場合、Nライン目はN-1ライン目の復号処理が終了しなければ復号できない。
【００２０】
この場合は、N-1ライン目までの復号処理を設定したデスクリプタを一度実行し、さらにNライン目をCPUで復号し、N+1ライン目以降を新たなデスクリプタに設定していくことになる。
【００２１】
しかしながら、上記のような再処理を行なう場合ハードウェアに行った設定はデスクリプタとしてメモリ上に残していたとしても、ＣＰＵで処理すべき部分の設定は別に作成し、メモリ上で管理しておかなければならない。すなわち、ＤＭＡコントローラ／デコーダで実行すべき復号化処理とＣＰＵで実行すべき復号化処理に関して、別々に設定データを作成、管理しなければならない。
【００２２】
また、ＣＰＵで処理した部分を再処理でハードウェア処理可能になった場合には、デスクリプタを始めから作成し直さなければならない。このように、従来では、ＤＭＡコントローラ／デコーダに転送バイト長として設定可能な最小値の制約によりＣＰＵの処理が複雑になる、という問題があった。
【００２３】
本発明の課題は、上記のような問題を解決し、ＤＭＡ転送装置（ＤＭＡコントローラ）によりＤＭＡ転送できない場合も含め、前もって一度にデスクリプタ（転送設定値）を設定できるようにし、制御プログラムを簡潔にすることにある。また、メモリ上に記憶したデータ転送の設定値、すなわちデスクリプタをソフトウェア処理（ＣＰＵによるデータ転送）とハードウェア処理（ＤＭＡ転送）で共有して使用することにより、再処理の設定にかかる負荷を軽減することにある。また、ＤＭＡ転送装置で復号化を行なう場合、ＤＭＡ転送装置とＣＰＵの復号化処理を、前もって作成したデスクリプタを用い、簡潔な制御プログラムによって効率よく連携させることができるようにすることにある。
【課題を解決するための手段】
【００２４】
上記課題を解決するため、本発明においては、メモリに格納した１つ以上のデータ転送の転送設定値を順次レジスタに読み込み、読み込んだ転送設定値に基づきＤＭＡ転送処理を行なうＤＭＡ転送装置において、前記転送設定値として、ＤＭＡ転送を行なわないことを指定するＮＯＰ指定を受け付ける手段を有し、レジスタに読み込んだ前記転送設定値で前記ＮＯＰ指定が行なわれている場合、ＮＯＰ割り込み信号を発生して当該のＤＭＡ転送を行なわずに転送処理を終了する構成を採用した。
【００２５】
あるいはさらに、前記ＤＭＡ転送装置において、ＤＭＡ転送に際して、符号化圧縮データを復号化して転送先に転送するデコード機能を有する構成を採用した。
【００２６】
あるいは、前記ＤＭＡ転送装置を用いてＣＰＵがデータ転送を行なわせるデータ転送制御方法、またはデータ転送制御プログラムにおいて、前記ＤＭＡ転送装置の転送機能と同等の転送をＣＰＵ処理で実行するＣＰＵデータ転送過程と、前記ＮＯＰ割り込み信号を検出する割り込み検出過程を含み、前記割り込み検出過程がＮＯＰ割り込み信号を検出した場合、前記ＤＭＡ転送装置のレジスタ値にしたがって前記ＣＰＵデータ転送過程によりデータ転送を行ない、その後、再び前記ＤＭＡ転送装置にＤＭＡ転送の開始を指示する構成を採用した。
【００２７】
あるいはさらに、前記データ転送制御方法、またはデータ転送制御プログラムにおいて、実行すべきデータ転送の転送長が閾値よりも短い場合に前記転送設定値で前記ＮＯＰ指定を行ない、長い場合に前記ＮＯＰ指定を行なわない構成を採用した。
【発明の効果】
【００２８】
上記のＤＭＡ転送装置では、ＤＭＡ転送を行なわないことを指定するＮＯＰ指定を含む転送設定値を受けつけ、ＮＯＰ指定が行なわれている場合、ＮＯＰ割り込み信号を発生して当該のＤＭＡ転送を行なわずに転送処理を終了することができる。これにより、たとえば、ＤＭＡ転送長の最小値の制約を満足できないような転送量が判明している場合などにおいて、あらかじめＮＯＰ指定を含む転送設定値を指定でき、ＮＯＰ割り込み信号に応じてＣＰＵ側の転送処理を実行することができる。
【００２９】
また、ＤＭＡ転送装置において、ＤＭＡ転送に際して、符号化圧縮データを復号化して転送先に転送するデコード機能を設けることができ、たとえば画像データの復号化をともなうＤＭＡ転送において、ＤＭＡ転送長の最小値の制約を満足できず上記デコード機能を利用できない場合に上記のＮＯＰ指定を利用できる。
【００３０】
また、前記ＤＭＡ転送装置を用いてＣＰＵがデータ転送を行なわせるデータ転送制御方法、またはデータ転送制御プログラムにおいて、たとえば、ＤＭＡ転送長の最小値の制約を満足できないような転送量が判明している場合などにおいて、上記のＮＯＰ指定を利用し、ＤＭＡ転送装置のレジスタ値を用いてＣＰＵ側で同等のデータ転送を実行することができ、状況に応じてＤＭＡ転送装置およびＣＰＵによるデータ転送を効率よく、スムーズに連携させることができる。
【００３１】
すなわち、本発明によれば、ＤＭＡ転送装置に対して転送設定値（デスクリプタ）によるＮＯＰ指定が可能であるため、ＤＭＡ転送装置によりＤＭＡ転送できない場合も含め、前もって一度に転送設定値を用意することができ、データ転送全体を制御するＣＰＵの制御プログラムを簡潔に記述することができる。また、メモリ上に記憶したデータ転送の転送設定値デスクリプタをソフトウェア処理（ＣＰＵによるデータ転送）とハードウェア処理（ＤＭＡ転送）で共有して使用することにより、再処理の設定にかかる負荷を軽減することができる。また、ＤＭＡ転送装置で復号化を行なう場合、ＤＭＡ転送装置とＣＰＵの復号化処理を、前もって作成したデスクリプタを用い、簡潔な制御プログラムによって効率よく連携させることができる、などの優れた効果がある。
【発明を実施するための最良の形態】
【００３２】
以下、発明を実施するための最良の形態の一例として、インクジェットプリンタに関する実施例を示す。以下の実施例におけるインクジェットプリンタは、図５(a)〜(c)に示したものと同等のソフトウェア構成を有し、符号化圧縮された画像データをＤＭＡ転送する過程で復号化処理を行なう機能を有する。
【実施例１】
【００３３】
図１に本発明を採用したインクジェットプリンタ（以下、プリンタ）のハードウェア構成を示す。
【００３４】
図１において符号１００はCPU（Central Processing Unit）で、マイクロプロセッサ素子から構成される。
【００３５】
ROM（Read Only Memory）１０２はCPU１００が実行する制御プログラムを格納した不揮発メモリ、RAM（Random Access Memory）１０１は揮発メモリである。プリンタ起動時にはROM１０２上の制御プログラムがRAM１０１にロードされ、CPU１００は制御プログラムにしたがってプリンタを制御する。また、USB I/F１０５はUSBケーブルで接続された図示しないホストコンピュータとのI/Fである。
【００３６】
Decoder１０４は符号圧縮データを復号してＤＭＡ転送する機能を持つ復号回路である。
【００３７】
上記のCPU１００、RAM１０１、ROM１０２、Decoder１０４、USB I/F１０５はシステムバス１０３により接続されている。
【００３８】
Decoder１０４は図２のような機能ブロックで構成される。
【００３９】
ＤＭＡＣ２００はＤＭＡコントローラで、このＤＭＡＣ２００は、単転送モードとリンクアレイチェーン転送モードでＤＭＡ転送することができる。
【００４０】
REG２０１はDecoder１０４の動作設定を行なうレジスタブロックである。
【００４１】
DEC２０４はパックビッツ符号圧縮データやシードロー符号圧縮データを復号する復号処理ブロックである。復号処理はREG２０１の設定内容にしたがって実行される。
【００４２】
BUFI２０３は受信バッファ、また、BUFO２０２は送信バッファである。
【００４３】
ＤＭＡＣ２００はREG２０１の設定にしたがってシステムバス１０３を介してRAM１０１上のデータをBUFI２０３に転送する。DEC２０４は復号したデータをBUFO２０２に格納し、ＤＭＡＣ２００はBUFO２０２のデータをREG２０１の設定にしたがってシステムバス１０３を介してRAM１０１上に転送する。
【００４４】
REG２０１は図３に示すレジスタを備える。各レジスタは32bitで構成される。Start Reg.３００はCPU１００が値を書き込むことでＤＭＡ転送を開始するレジスタ（図中ではレジスタをReg.と略記する）で、書き込む値によりＤＭＡ転送モードとして単転送モードとリンクアレイチェーン転送モードを選択できる。
【００４５】
Interrupt Status Reg.３０１はＤＭＡＣ２００の発行した割り込みを示すレジスタで、CPU１００はこのレジスタの値を読み込むことでDecoder１００の割り込み状態を認識することができ、また、書き込むことで割り込みをクリアすることができる。本実施例では、特にbit31-29を使用し、このうちbit31はＤＭＡ転送終了割り込み、bit30はNOP終了割り込み、bit29は復号データバッファ長オーバー割り込みに割り当てられている。
【００４６】
ここでＤＭＡ転送終了割り込みには、単転送モードでのＤＭＡ転送終了、リンクアレイチェーン転送モードでの全チェーンに対するＤＭＡ転送終了の割り込みがある。さらに、NOP終了割り込みは、Descriptor Control Reg.３１２で指定されたNOP指定のＤＭＡ転送開始前に発行する割り込みである。また、符号データバッファ長オーバー割り込みは復号データが復号データバッファ長を超える場合に発行する割り込みである。
【００４７】
Interrupt Mask Reg.３０２はInterrupt Status Reg.３０１と対を成すものであり、CPU１００は上記の各割り込みを個別にマスクできる。
【００４８】
Max Decode Length Reg.３０３はDEC２０４で復号したデータの長さの中で一番大きい値を保持するレジスタである。CPU１００がStart Reg.３００に値を書き込んでＤＭＡ転送が開始すると値はクリアされる。
【００４９】
Next Descriptor Address Reg.３０４はリンクアレイチェーン転送モード時に次に読み込むデスクリプタの先頭アドレスを設定するレジスタである。リンクアレイチェーン転送では、デスクリプタがその記述内容でリンクされた状態でメモリ上分散配置され、ＤＭＡ転送が終了するごとにこのレジスタ内容でポイントされる次のデスクリプタが読み込まれる。Next Descriptor Address Reg.３０４に対してリンクアレイチェーン転送開始前にCPU１００が値を書き込み、リンクアレイチェーン転送中はＤＭＡＣ２００が読み込んだデスクリプタ中の値を書き込む。
【００５０】
Source Address 0 Reg.３０５は、転送元のアドレス（符号圧縮データの先頭アドレス）を設定するレジスタである。Source Address 1 Reg.３０６は、転送元のアドレス（シードロー復号時のシードローの先頭アドレス、パックビッツ復号時は未使用）を設定するレジスタである。
【００５１】
Destination Address Reg.３０７は転送先のアドレスを設定するレジスタである。これらレジスタ３０５、３０６、３０７によりＤＭＡ転送範囲、および転送先が指定される。
【００５２】
Length 0 Reg.３０８は、復号する符号圧縮データの長さを設定するレジスタである。設定可能な値はパックビッツ復号時には4[Byte]以上、シードロー復号時には0[Byte]または4[Byte]以上である。Length 1 Reg.３０９には、シードロー復号時、シードローの長さを指定する。
【００５３】
Length 2 Reg.３１０は復号データバッファ長を指定するレジスタである。復号処理の結果、復号データがLength 2 Reg.３１０の設定値を超えるようであれば、復号処理を停止してInterrupt Status Reg.３０１のbit29を'1'にする。また、Interrupt Mask Reg.３０２により割り込みをマスクされていなければ復号データバッファ長オーバー割り込みを発行してＤＭＡ転送を終了する。マスクされていた場合はリンクアレイチェーン転送中であれば次のチェーンに対する処理を続ける。また、復号した結果、データの長さがLength 2 Reg.３１０の設定値に満たない場合には満たない部分をクリアする。
【００５４】
Operation Reg.３１１は復号方法を指定するレジスタである。CPU１００はこのレジスタに書き込む値によってパックビッツ復号またはシードロー復号の復号化方式を指定できる。
【００５５】
Descriptor Control Reg.３１２はデスクリプタの制御を指定するレジスタである。仕様上、CPU１００はDescriptor Control Reg.３１２に設定値を書き込むことはできないが、リンクアレイチェーン転送中に読み込まれたデスクリプタにより内容が設定される。bit31が'1'であると現在の転送が最後の転送であることを示し、ＤＭＡＣ２００は読み込んだデスクリプタの設定にしたがいＤＭＡ転送した後にリンクアレイチェーン転送を終了する。
【００５６】
そして、Interrupt Status Reg.３０１のbit31を'1'に変更され、ここでInterrupt Mask Reg.３０２により割り込みをマスクされていなければＤＭＡ転送終了割り込みが発生される。
【００５７】
また、Interrupt Status Reg.３０１のbit30が'1'であると現在の転送がNOP指定であることを示し、ＤＭＡＣ２００は読み込んだデスクリプタの設定に従ったＤＭＡ転送は行わずにリンクアレイチェーン転送を終了する。その後、Interrupt Status Reg.３０１のbit30を'1'にされ、Interrupt Mask Reg.３０２により割り込みをマスクされていなければNOP終了割り込みを発行する。
【００５８】
図４はリンクアレイチェーン転送時に使用するデスクリプタの構成である。Next Descriptor Address４００はNext Descriptor Reg.３０４に相当する設定値である。Source Address 0４０１はSource Address0 Reg.３０５に相当する設定値である。Source Address 1４０２はSource Address 1 Reg.３０６に相当する設定値である。Destination Address４０３はDestination Address Reg.３０７に相当する設定値である。Length0４０４はLength 0 Reg.３０８に相当する設定値である。Length 1４０５はLength1 Reg.３０９に相当する設定値である。Length 2４０６はLength2 Reg.３１０に相当する設定値である。Operation４０７はOperation Reg.３１１に相当する設定値である。Descriptor Control４０８はDescriptor Control Reg.３１２に相当する設定値である。
【００５９】
CPU１００がStart Reg.３００によりリンクアレイチェーン転送を指示すると、ＤＭＡＣ２００はNext Descriptor Reg.３０４の指すアドレスからデスクリプタを読み込み、対応するレジスタに値を書き込む。その後、設定されたレジスタ値にしたがってＤＭＡ転送が行なわれる。
【００６０】
ここで、Descriptor Control４０８のbit30は本発明のNOP指定手段を実現するものである。また、CPUデータ転送手段は制御プログラムとしてRAM上に存在し、CPU１００は該プログラムを読み込み実行することが可能である。割り込み検出手段はCPU１００に割り込みベクタを設定することで実現する。
【００６１】
図５(a)〜(c)は背景技術の欄で説明したものと同じで、この部分については本実施例でも同等であるが、ここで再度説明する。
【００６２】
図５(a)は、プリンタ内部のソフトウェア構成を簡素化して示している。復号処理５００は、受信バッファ５０２に格納した符号圧縮データを順に復号して数ラインを単位（バンドという）として内部バッファ５０３に並べる。画像処理５０１は内部バッファ５０３に格納されたデータに対し適切な画像処理を行い出力バッファ５０４にデータを格納する。出力バッファ５０４のデータは記録ヘッドの駆動信号に変換され画像が印刷される。
【００６３】
図５の(b)は受信バッファ５０２内の符号圧縮データの例である。データは印刷制御コマンドにより符号圧縮データの種類が示され、R（Red）の１ライン目、G（Green）の１ライン目というように線順次にデータが並んでいる。符号圧縮データの種類としては、上記のパックビッツ符号、シードロー符号などがある。図５の(c)は内部バッファ５０３内に復号されたデータの例で、図示のように色毎にバンド単位でデータが格納されている。
【００６４】
次に上記構成における動作につき説明する。
【００６５】
[ＤＭＡ転送処理]
ＤＭＡＣ２００を含むDecoder１０４によるリンクアレイチェーン転送動作を図６に示す。リンクアレイチェーン転送動作の全体の構成は従来と同様であるが、本実施例においては、前もってデスクリプタによりNOP動作を指定し、NOP終了割り込みを発生させ、これに応じてCPUのデコード処理を起動できるようにした点に特徴がある。
【００６６】
ステップＳ６００において、CPU１００はStart Reg.３００によりリンクアレイチェーン転送の開始を指示する。
【００６７】
続いてステップＳ６０１において、ＤＭＡＣ２００はNext Descriptor Address Reg.３０４の示すRAM１０１のアドレスからデスクリプタを１つ読み込み、REG２０１に渡す。REG２０１はこのデスクリプタの設定値を、それぞれ対応する図３のレジスタに書き込む。
【００６８】
ステップＳ６０２において、ＤＭＡＣ２００はDescriptor Control Reg.３１２の値を読み込む。ここで、Descriptor Control Reg.３１２のbit30が'1'の場合にはNOP指定と判定し、ステップＳ６０７でリンクアレイチェーン転送を終了し、Interrupt Status Reg.３０１のbit30に'1'(NOP終了割り込み)を書き込む。Interrupt Mask Reg.３０２のbit30が'0'であれば、CPU１００へ割り込み信号を発行し、ステップＳ６１１で処理を終了する。
【００６９】
一方、ステップＳ６０２において、Descriptor Control Reg.３１２のbit30が'0'の場合には、ステップＳ６０３においてＤＭＡＣ２００はDEC２０４、BUFI２０３、BUFO２０２と協働してデータ転送を行なう。この時、内部で復号したデータの長さをカウントしておき、Length 2 Reg.３１０と同じ長さになった場合には、途中であってもデータ転送を停止してステップＳ６０４を行なう。
【００７０】
ステップＳ６０４では、ステップＳ６０３でカウントした復号したデータの長さと、Max Decode Length Reg.３０３の値を比較する。ここで復号データの長さがMax Decode Length Reg.３０３よりも大きい場合には、ステップＳ６０８において、Max Decode Length Reg.３０３に復号データの長さを書き込む。また、復号データの長さがMax Decode Length Reg.３０３と等しいか、それより小さい場合にはステップＳ６０５に移行する。
【００７１】
ステップＳ６０５では、ステップＳ６０３でカウントした復号したデータの長さと、Length 2 Reg.３０３の値を比較する。
【００７２】
復号データの長さとLength 2 Reg.３０３の値が等しい場合には、復号データバッファ長オーバーと判定し、ステップＳ６０９でリンクアレイチェーン転送を終了して、Interrupt Status Reg.３０１のbit29に'1'（復号データバッファ長オーバー割り込み）を書き込む。ここでInterrupt Mask Reg.３０２のbit29が'0'であればCPU１００へ割り込み信号を発行し、ステップＳ６１１で処理を終了する。
【００７３】
ステップＳ６０６において、ステップＳ６０２で読み込んだDescriptor Control Reg.３１２のbit31が'1'の場合にはリンクアレイチェーン転送完了と判定し、ステップＳ６１０でリンクアレイチェーン転送を終了してInterrupt Status Reg.３０１のbit31に'1'(ＤＭＡ転送終了割り込み)を書き込む。ここでInterrupt Mask Reg.３０２のbit31が'0'であればCPU１００へ割り込み信号を発行し、ステップＳ６１１で処理を終了する。
【００７４】
また、ステップＳ６０６において、Descriptor Control Reg.３１２のbit31が'0'の場合には、ステップＳ６０１に戻り、処理を続ける。
【００７５】
[バンド単位のデータ復号処理（再処理なし）]
次に、図５の受信バッファ５０２のデータを復号して、内部バッファ５０３に格納する処理におけるデータ転送制御方法について説明する。CPU１００は復号処理５００を、６４ラインを１つの区切り（以下、バンド）として行なう。
【００７６】
図７に示す制御手順により、CPU１００は、ＤＭＡＣ２００を含むDecoder１０４を制御して受信バッファ５０２から内部バッファ５０３へ画像データを復号し転送させる。
【００７７】
ここで、デスクリプタは１バンド分を設定できる数だけメモリ空間上の適当な位置に用意するものとする。また、先頭から参照可能なようにあらかじめ各デスクリプタのNext Descriptor Address４００に値を設定し、あるデスクリプタを読めば次に読み出すべきデスクリプタアドレスが判るようにする。
【００７８】
また、印刷に必要な復号データの長さは最大で印刷する幅分なので、各デスクリプタのLength 2 ４０６には復号データバッファ長として最大印刷幅（用紙幅）分のバイト数を設定する。Decoder１０４は、復号処理の結果、復号データがLength 2 ４０６の設定値以上になるようであれば、復号データバッファ長オーバーを発行するが、Length 2  ４０６の設定値を変更して再処理する必要はない。そのため、Interrupt Mask Reg.３０２でＤＭＡ転送終了割り込み、およびNOP終了割り込みをマスクせず、復号データバッファ長オーバー割り込みのみをマスクする。
【００７９】
ステップＳ７００において、CPU１００は一バンドに対する処理を開始する。
【００８０】
ステップＳ７０１において、CPU１００は先頭のデスクリプタのアドレスを書き込みデスクリプタアドレスおよび実行デスクリプタアドレスとして記憶する。
【００８１】
ステップＳ７０２において、CPU１００は一ラインに対する処理を開始する。印刷制御コマンドを解釈して該ラインのデータの長さおよび復号方法を認識する。内部バッファ５０３に復号データを転送するための設定を書き込みデスクリプタアドレスにあるデスクリプタに設定する。
【００８２】
ステップＳ７０３において、ＤＭＡ転送が可能か否かを判定する。ここでは、パックビッツ符号の場合にはデータの長さが４Byte以下の場合、シードロー符号の場合にはデータの長さが２、３、４Byteの場合にはＤＭＡ転送不可能と判定する。ただし、これらの値は、ＤＭＡＣ２００／Decoder１０４の転送バイト長として設定可能な最小値の仕様によって変わり得る（後述の実施例でも同様）。
【００８３】
ステップＳ７０３でＤＭＡ転送不可能と判定した場合には、ステップＳ７０５においてDescriptor Control４０８のbit30に'1'を設定してNOP動作を指定する。また、ＤＭＡ転送可能と判定した場合には'0'を設定してNOPを指定しない。
【００８４】
ステップＳ７０４において、処理中のラインがバンドの最後であるかを判定する。ここで処理中のラインが最後のラインであればステップＳ７０７において、Descriptor Control４０８のbit31に'1'を設定してリンクアレイチェーン転送終了を指定する。
【００８５】
また、ステップＳ７０４で処理中のラインがバンドの最後のラインでなければ、ステップＳ７０６において、書き込みデスクリプタアドレスにNext Descriptor Address４００の値を記憶し、Descriptor Control４０８のbit31に'0'を設定し、ステップＳ７０２に戻る。
【００８６】
ステップＳ７０８では、CPU１００はNext Descriptor Address Reg.３０４に実行デスクリプタアドレスを書き込み、ステップＳ７０９では、CPU１００はStart Reg.３００によりリンクアレイチェーン転送開始を指示する。
【００８７】
そして、ステップＳ７１０において、Decoder１０４の割り込みが発生するまで待つ。もちろん、この間、CPU１００は他の必要な処理を（他のプロセス／スレッドで）並行的に実行できる。
【００８８】
Decoder１０４の割り込みが発生すると、ステップＳ７１１において、CPU１００はInterrupt Status Reg.３０１の値を読み込み、割り込み要因を判定する。割り込み要因がＤＭＡ転送終了割り込みである場合には、Interrupt Status Reg.３０１の値をクリアし、ステップＳ７１３でデータ復号処理を終了する。
【００８９】
割り込み要因がNOP終了割り込みの場合には、ステップＳ７１２において、CPU１００はREG２０１の各レジスタの値を読み込み、設定にしたがって、CPU１００の処理によりデータを復号して内部バッファ５０３に格納する（CPUデータ転送手段）。そして、Interrupt Status Reg.３０１の値をクリアし、ステップＳ７０９に戻る。
【００９０】
REG２０１には、NOP終了割り込みが発生した時の値が入っているので、ＤＭＡＣ２００はNext Descriptor Address Reg.３０４の示すアドレスからデスクリプタを読み込むことで、次のラインからＤＭＡ転送を再開することになる。
【００９１】
なお、図５（ｂ），（ｃ）のようにR,G,Bの３色からなるデータの場合にはステップＳ７０２からステップＳ７０４のステップをR：１ライン目、G：１ライン目、B：１ライン目、R：２ライン目、G：２ライン目というように、（ライン数×３色）回繰り返すことになる。
【００９２】
上記のような、ハードウェア構成および制御方法により、バンド単位のデータ転送を行なうことで一バンドに対して途中でデスクリプタを分断することがなく、制御プログラムを簡潔に作成することができる。すなわち、ＤＭＡコントローラ／デコーダで実行すべき復号化処理とＣＰＵで実行すべき復号化処理に関して、別々に設定データを作成、管理する必要がなく、NOP割り込みを介してスムーズにＤＭＡコントローラ／デコーダで実行すべき復号化処理とＣＰＵで実行すべき復号化処理を連携させることができる。
【実施例２】
【００９３】
以下に、図１に示したハードウェア構成のプリンタにおけるＤＭＡ転送制御の異なる実施例を示す。
【００９４】
上記の図７では、再処理が必要ないように各ラインについてLength 2 ４０６に最大印刷幅（用紙幅）分のバイト数を設定した。しかし、用紙の一部にしか画像がないような元画像の場合には、符号圧縮データも該当部分にしか存在しない。このため、Length 2 ４０６（復号データバッファ長）に最大印刷幅分のバイト数を指定しても、実際の復号データの長さは小さく、Decoder１０４はLength 2４０６の長さまでクリアするために余分にRAM１０１にアクセスしなければならなくなる可能性がある。本実施例ではこの問題に対処する。
【００９５】
[バンド単位のデータ復号処理（再処理あり）]
本実施例では、図８(a)〜(c)に示すシーケンスにより受信バッファ５０２から内部バッファ５０３へのデータ転送を行なう。図８(a)〜(c)の各フローチャートは同一アルファベットを付した位置でそれぞれ連続しているものとする。
【００９６】
なお、デスクリプタは前述同様に１バンド分を設定できる数だけ用意されている。また、先頭から参照可能なようにあらかじめそれぞれのデスクリプタのNext Descriptor Addressに値を設定してある。Interrupt Mask Reg.３０２では、ＤＭＡ転送終了割り込み、NOP終了割り込み、復号データバッファ長オーバー割り込みをマスクしない。
【００９７】
図８(a)のステップＳ８００において、CPU１００は一バンドに対する処理を開始する。
【００９８】
ステップＳ８０１において、一ライン目がＤＭＡ転送可能かを判定する。このとき、印刷制御コマンドを解釈して該ラインのデータの長さおよび復号方法を認識する。パックビッツ符号の場合にはデータの長さが４Byte以下の場合、シードロー符号の場合にはデータの長さが２、３、４Byteの場合にはＤＭＡ転送不可能と判定する。
【００９９】
ＤＭＡ転送可能と判定した場合には、ステップＳ８０２において、CPU１００はREG２０１に一ライン目を展開するために必要な設定を行ない、Decoder１０４によるＤＭＡ転送を単転送モードで実行する。この際、Length 2 Reg. ３０１には最大印刷幅（用紙幅）分のバイト数を設定する。
【０１００】
ステップＳ８０３では、CPU１００はＤＭＡ転送終了割り込みが発生するのを待つ。ＤＭＡ転送終了割り込みを検出した場合には、ステップＳ８０４においてCPU１００はMax Decode Length Reg.３０３の値を読み込み、復号バッファ設定長として記憶する。
【０１０１】
また、ステップＳ８０１で、ＤＭＡ転送不可能と判定した場合には、ステップＳ８０５においてCPU１００はデータを復号して復号データの長さをカウントする。
【０１０２】
ステップＳ８０６では、CPU１００はカウントした復号データの長さを復号バッファ設定長として記憶する。
【０１０３】
図８(b)のステップＳ８０７では、CPU１００は先頭のデスクリプタのアドレスを書き込み、デスクリプタアドレスおよび実行デスクリプタアドレスとして記憶する。
【０１０４】
ステップＳ８０８において、CPU１００は一ライン目から一ラインに対する処理を開始する。印刷制御コマンドを解釈して該ラインのデータの長さおよび復号方法を認識する。内部バッファ５０３に復号データを転送するための設定を書き込み、デスクリプタアドレスにあるデスクリプタに設定する。
【０１０５】
ステップＳ８０９において、ＤＭＡ転送が可能かを判定する。ここでは、パックビッツ符号の場合にはデータの長さが４Byte以下の場合、シードロー符号の場合にはデータの長さが２、３、４Byteの場合にはＤＭＡ転送不可能と判定する。
【０１０６】
ステップＳ８０９でＤＭＡ転送不可能と判定した場合には、ステップＳ８１１において、Descriptor Control４０８のbit30に'1'を設定してNOPを指定する。また、ＤＭＡ転送可能と判定した場合には、'0'を設定してNOPを指定しない。
【０１０７】
ステップＳ８１０において、処理中のラインがバンドの最後であるかを判定する。最後のラインであればステップＳ８１３において、Descriptor Control４０８のbit31に'1'を設定してリンクアレイチェーン転送終了を指定する。
【０１０８】
処理中のラインがバンドの最後のラインでなければ、ステップＳ８１２において、書き込みデスクリプタアドレスにNext Descriptor Address４００の値を記憶する。そして、Descriptor Control４０８のbit31に'0'を設定し、ステップＳ８０８に戻る。
【０１０９】
ステップＳ８１４では、CPU１００はNext Descriptor Address Reg.３０４に実行デスクリプタアドレスを書き込む。
【０１１０】
ステップＳ８１５では、CPU１００はStart Reg.３００によりリンクアレイチェーン転送開始を指示する。
【０１１１】
ステップＳ８１６では、Decoder１０４の割り込みが発生するまで待ち、Decoder１０４の割り込みが発生すると、ステップＳ８１７においてCPU１００はInterrupt Status Reg.３０１の値を読み込み、割り込み要因を判定する。
【０１１２】
割り込み要因がNOP終了割り込みの場合には、ステップＳ８１８において、CPU１００はREG２０１の各レジスタの値を読み込み、設定にしたがってデータを復号して内部バッファ５０３に格納する（CPUデータ転送手段）。そして、Interrupt Status Reg.３０１の値をクリアし、ステップＳ８１５に戻る。
【０１１３】
レジスタにはNOP終了割り込みが発生した時の値が入っているので、ＤＭＡＣ２００はNext Descriptor Address Reg.３０４の示すアドレスからデスクリプタを読み込むことで、次のラインからＤＭＡ転送を再開することができる。
【０１１４】
また、ステップＳ８１７において、割り込み要因がNOP終了割り込みではない場合には、ステップＳ８１９において復号データバッファ長オーバー割り込みかＤＭＡ転送終了割り込みのどちらかを判定する。ここでＤＭＡ転送終了割り込みの場合には、Interrupt Status Reg.３０１の値をクリアし、ステップＳ８２０において処理を終了する。
【０１１５】
また、ステップＳ８１９において、割り込み要因が復号データバッファ長オーバー割り込みの場合には、Interrupt Status Reg.３０１の値をクリアして図８(c)のステップＳ８２１に移行する。
【０１１６】
図８(c)のステップＳ８２１では、CPU１００は書き込みデスクリプタアドレスに実効デスクリプタアドレスを設定する。
【０１１７】
ステップＳ８２２において、書き込みデスクリプタアドレスのデスクリプタのLength 2 ４０６に最大印刷幅（用紙幅）分のバイト数を設定する。
【０１１８】
ステップＳ８２３では、CPU１００は該デスクリプタのDescriptor Control４０８を読み込み、リンクアレイチェーン転送終了指定がされているかを判定する。リンクアレイチェーン転送終了指定がされている場合には、ステップＳ８１４に戻る。リンクアレイチェーン転送終了指定がされていない場合には、ステップＳ８２４において書き込みデスクリプタアドレスとしてNext Descriptor Address４０３の値を記憶して、ステップＳ８２２に戻る。
【０１１９】
上記のシーケンスによれば、最低限必要な復号データバッファ長を設定して１バンドに対してデスクリプタを作成し、復号／転送処理を行なわせる。ここで、最低限必要な復号データバッファ長は一ライン目を一度展開することで予測することができる（ステップＳ８０２、Ｓ８０３）。また、一ライン目を復号した結果、復号データバッファ長を超えて復号可能な符号圧縮データがあった場合には、復号データバッファ長を最大印刷幅（用紙幅）分のバイト数に変更して再処理する（ステップＳ８０５、Ｓ８０６）。
【０１２０】
本実施例では、上記の処理により、バンド内でライン毎の元データの長さが一致していれば、RAM１０１へのアクセスを減らし、プリンタの処理効率を向上させることができる。特に本実施例は大きなサイズまで印刷可能な大判プリンタで効果が期待できる。また、再処理が必要な場合には、CPU処理したものも含めてデスクリプタとして転送設定値を管理しているので、再処理設定を効率よく実行することができる。
【産業上の利用可能性】
【０１２１】
本発明は、印刷装置における符号化圧縮された画像データの復号化をともなうＤＭＡ転送のみならず、電子計算機、スキャナ、通信機器、デジタルテレビなどのデータ転送処理が必要な種々のデータ処理装置において実施することができる。また、本発明の処理対象のデータは画像データに限定されることなく、デコーダ（図２の２０４）の処理内容を変更すればたとえば特定の目的で暗号化されたデータの復号化処理などにも利用することができる。本発明を実施するＣＰＵの制御プログラムはあらかじめＲＯＭ（図１の１０２）に格納しておく他、他の記憶媒体（ＭＯ、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭや各種メモリカードなど）からロードでき、またネットワーク経由でターゲットのシステムにインストールし、またアップデートすることができる。
【図面の簡単な説明】
【０１２２】
【図１】本発明の実施例としてプリンタのハードウェア構成を示したブロック図である。
【図２】図１のDecoder１０４の内部構成を示したブロック図である。
【図３】図２のREG２０１の内部レジスタの構成を示した説明図である。
【図４】図１のDecoder１０４が読み込むデスクリプタの構成を示した説明図である。
【図５（ａ）】プリンタにおける一般的なソフトウェア構成を示した説明図である。
【図５（ｂ）】プリンタにおいて処理される符号化データの構成を示した説明図である。
【図５（ｃ）】プリンタにおいて復号化されたデータの構成を示した説明図である。
【図６】リンクアレイチェーン転送時の処理シーケンスを示したフローチャート図である。
【図７】一バンド分のデータ転送処理（再処理なし）を示したフローチャート図である。
【図８（ａ）】一バンド分のデータ転送処理（再処理なし）を示したフローチャート図である。
【図８（ｂ）】一バンド分のデータ転送処理（再処理なし）を示したフローチャート図である（続き）。
【図８（ｃ）】一バンド分のデータ転送処理（再処理なし）を示したフローチャート図である（続き）。
【符号の説明】
【０１２３】
１００  CPU
１０１  RAM
１０２  ROM
１０３  システムバス
１０４  Decoder
１０５  USB I/F
【図１】
2008146186.tif 000003
【図２】
2008146186.tif 000004
【図３】
2008146186.tif 000005
【図４】
2008146186.tif 000006
【図５（ａ）】
2008146186.tif 000007
【図５（ｂ）】
2008146186.tif 000008
【図５（ｃ）】
2008146186.tif 000009
【図６】
2008146186.tif 000010
【図７】
2008146186.tif 000011
【図８（ａ）】
2008146186.tif 000012
【図８（ｂ）】
2008146186.tif 000013
【図８（ｃ）】
2008146186.tif 000014