(57)【要約】【課題】  通信プロトコル異常によって引き起こされる印刷障害はもちろん、印刷データ区切りを受信できなかった場合にも高速で正しい印刷データの転送が行えるＵＳＢデバイスコントローラおよびプリンタを提供する。【解決手段】  ＵＳＢインターフェイスで、バルクアウト転送によりホストＰＣからプリンタに転送された印刷データを格納する受信バッファとプリンタメモリ間のデータ転送にＤＭＡ転送インターフェイスを使用する際、前記ＤＭＡ転送をＵＳＢ仕様で定義されたパケット境界で一時的に停止状態にして、直前にＤＭＡ転送されたパケットデータがショートパケット或いはＮｕｌｌパケットでないときには、ホストＰＣからデータ長ゼロのパケット(Ｎｕｌｌパケット)を受信した場合と同じシーケンスを前記ＤＭＡ転送インターフェイスに擬似的に与えてから該ＤＭＡ転送を再開するようにした。【選択図】  図３
2005100314.tif 000002
【特許請求の範囲】
【請求項１】
ＵＳＢインターフェイスで、バルクアウト転送によりホストＰＣからプリンタに転送された印刷データを格納する受信バッファとプリンタメモリ間のデータ転送にＤＭＡ転送インターフェイスとを使用する際、前記ＤＭＡ転送をＵＳＢ仕様で定義されたパケット境界で一時的に停止状態にする一時停止手段と、前記ＤＭＡ転送を再開するＤＭＡ再開手段とを備えることを特徴とするＵＳＢデバイスコントローラ。
【請求項２】
請求項１に記載のＵＳＢデバイスコントローラにおいて、前記ＤＭＡ転送がＵＳＢ仕様で定義されたパケット境界で一時的に停止状態にしたときに、割り込みを発生させる割り込み発生手段を備えることを特徴とするＵＳＢデバイスコントローラ。
【請求項３】
請求項１に記載のＵＳＢデバイスコントローラにおいて、前記ＤＭＡ転送がパケット境界で一時的に停止状態にある場合、ホストＰＣからデータ長ゼロのパケット(Ｎｕｌｌパケット)を受信した場合と同じシーケンスを前記ＤＭＡ転送インターフェイスに擬似的に与える擬似シーケンス手段を備えることを特徴とするＵＳＢデバイスコントローラ。
【請求項４】
請求項３に記載のＵＳＢデバイスコントローラにおいて、前記擬似Ｎｕｌｌパケットを与える場合、該擬似パケットを与えてもよいか否かを判別する判別手段を備えることを特徴とするＵＳＢデバイスコントローラ。
【請求項５】
請求項４に記載のＵＳＢデバイスコントローラにおいて、前記ＤＭＡ転送がＵＳＢで定義されたパケットデータ境界で停止した場合、直前にＤＭＡ転送されたパケットデータがショートパケット或いはＮｕｌｌパケットであるときには、前記判別手段で擬似Ｎｕｌｌパケットを与えないように判別することを特徴とするＵＳＢデバイスコントローラ。
【請求項６】
請求項１に記載のＵＳＢデバイスコントローラにおいて、前記ＤＭＡ転送によって前記受信バッファから前記プリンタメモリに転送されたデータ数をカウントするカウント手段と、該データカウント数が所定の一定値に達した場合に前記ＤＭＡ転送を一時的に停止状態にする一時停止手段を備えることを特徴とするＵＳＢデバイスコントローラ。
【請求項７】
請求項１に記載のＵＳＢデバイスコントローラにおいて、時間をカウントする時間カウント手段と、該時間カウント数が所定の一定値に達した場合に前記ＤＭＡ転送を一時的に停止状態にする一時停止手段を備えることを特徴とするＵＳＢデバイスコントローラ。
【請求項８】
請求項６に記載の前記プリンタメインメモリに転送されたデータ数をカウントするデータ数カウント手段と、請求項７に記載の前記時間をカウントする時間カウント手段を備え、一方のカウンタアップが完了した場合に他方のカウンタをクリアすることを特徴とするＵＳＢデバイスコントローラ。
【請求項９】
請求項１乃至８のいずれかに記載のＵＳＢデバイスコントローラにおいて、ＵＳＢ仕様で定義されたショートパケット或いはＮｕｌｌパケットに相当するデータのＤＭＡ転送が完了したときに割り込みを発生させる割り込み発生手段を備えることを特徴とするＵＳＢデバイスコントローラ。
【請求項１０】
請求項１乃至９のいずれかに記載のＵＳＢデバイスコントローラを搭載したプリンタ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＵＳＢ周辺機器に使用されるＵＳＢデバイスコントローラおよびそのＵＳＢデバイスコントローラを搭載したプリンタに関する。
【背景技術】
【０００２】
Universal Serial Bus（ＵＳＢ）は、パーソナルコンピュータ（ＰＣ）と複数のＰＣ周辺機器を接続し、データ通信を行うために策定されたシリアルバスインターフェイス規格であり、従来のインターフェイス規格にはない簡便な接続性や拡張性を特長としており、マウスやキーボード、プリンタ、スキャナ、モデム等ＰＣ周辺機器の多くがＵＳＢインターフェイスを備えている。
ＵＳＢ規格では、アプリケーション毎に共通のドライバを使うことを目的として、ＰＣ周辺機器（ＵＳＢデバイス）の種類に応じてＵＳＢデバイスクラス仕様が定められている。プリンタクラス仕様においても、必要な転送モードと送受信バッファであるエンドポイントの数が定められており、この仕様に準拠することによりマイクロソフト社が提供するＵＳＢプリンタクラスドライバを使用することができる。
図４に示す様なプリンタシステムの場合、ホストＰＣからの印刷データはバルクアウト転送によりプリンタに送信され、プリンタ内のＵＳＢデバイスコントローラ内部の受信バッファ（バルクアウト用エンドポイント：ＥＰ１）に格納される。受信バッファに格納されたデータは、プリンタ側メモリに高速で転送する必要があり、一般的に転送性能の高いＤＭＡ転送（Direct Memory Access転送）が使用される。
ＵＳＢホストからの印刷データをプリンタメモリに格納するために使用できる領域には制限があり、例えば、ディスクリプタ方式のように同一領域を繰り返し使用する必要がある。
このディスクリプタ方式は、プリンタメモリ内にデータ格納領域と、データ格納領域の情報を示すディスクリプタ領域を同数個割り当て、ＤＭＡ転送をおこなうＤＭＡＣ（Direct Memory Access Controller）がディスクリプタ領域の情報を参照し、データ格納領域への印刷データ書き込みを実施する手法である。通常、個々のディスクリプタ領域は、数バイト、データ格納領域は数キロバイトに設定される。
【０００３】
図５は、４個のデータ格納領域（ＤＳ１／ＤＳ２／ＤＳ３／ＤＳ４）と４個のディスクリプタ領域（ＤＣ１／ＤＣ２／ＤＣ３／ＤＣ４）を設けた例である。
ＤＭＡＣは、ＤＭＡ転送開始前にＤＣ１の情報を取得しており、ＥＰ１に格納された印刷データをプリンタメモリのＤＳ１にＤＭＡ転送して、ＤＳ１が満杯になった時点でＤＭＡ転送は一時中断される。
図６のＤＣ１のように、バッファアドレスとして、データ格納領域ＤＳ１のアドレス、データ長が格納され、ＤＳ１にＤＭＡ転送されたデータが格納される。
転送中断後、ＤＭＡＣはＤＣ２の情報を取得して、ＤＣ１の次のディスクリプタポインタへＤＣ２がセットされ、データの転送をＤＣ２を用いて実行する。この動作をディスクリプタ更新と呼ぶことにする。ディスクリプタ更新後、ＤＳ２への印刷データ転送が再開される。同様にＤＳ３／ＤＳ４への印刷データ転送を行うが、ＤＳ４が満杯になった場合は、ＤＳ１に重ね書きする設定をすることにより、比較的容量の小さいデータ格納領域を利用して大容量の印刷データを格納することが可能となる。
プリンタのＣＰＵは、プリンタメモリ内に印刷データが格納されたことを認識し、ある一定データが揃った時点で印刷データの使用許可を上層アプリケーションに与えることにより印刷処理が開始される。
ディスクリプタ方式では、ＣＰＵが定期的にプリンタメモリ内の印刷データをポーリングし、有効なデータが存在する場合に印刷データの使用許可を発行する方式を採用している。この有効なデータとは、個々のデータ格納領域（ＤＳ）が満杯であることを示す情報ビットか、印刷ファイルの区切りを検知したことを示す情報ビット（図６のEOP Flag）がセットされているものを言う。
印刷ファイルの区切りを検知したことを示す情報ビット（EOP Flag）は、データ長がＵＳＢ規格で定義された最大ペイロード未満のパケット（ショートパケット）のＤＭＡ転送完了時にセットされる。両ビットは個々のディスクリプタ情報の一部として格納されている。尚、先に述べたディスクリプタ更新はショートパケットおよびＮｕｌｌパケットに相当するデータのＤＭＡ転送完了時にも実行される。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上述のようなディスクリプタ方式では、ホストＰＣからプリンタに転送される印刷ファイル等の大容量データは、最大ペイロードのパケット（マックスパケット）に分割して送受信され、ショートパケット或いはＮｕｌｌパケットによりファイルの区切りが示される。
印刷ファイルが最大ペイロードの整数倍である場合には、ペイロードを持たないパケット（Ｎｕｌｌパケット）を送信することが仕様に定められている。
しかし、マイクロソフト社の提供するプリンタクラスドライバは、上記したＮｕｌｌパケットを発行しない場合があり、これによりプリンタ側で印刷ファイルの区切りが認識できずに印刷ファイルが誤って結合され、印刷データ化けにより異常印刷となる恐れがある。
このような場合、印刷データの転送は正常に終わっているのであり、次に印刷指令で送られてくる印刷データも正常のはずである。しかし、これらの印刷データが一緒になって印刷され異常印刷が起こってから対処するのでは遅いので、印刷データのファイル区切りを何らかの方法で知ることによって正常に印刷を完了させることが望ましい。
本発明は、上述のような実情を考慮してなされたものであって、通信プロトコル異常によって引き起こされる印刷障害はもちろん、印刷データ区切りを受信できなかった場合にも高速で正しい印刷データの転送が行えるＵＳＢデバイスコントローラおよびプリンタを提供することを目的とする。
【課題を解決するための手段】
【０００５】
上記の課題を解決するために、本発明の請求項１は、ＵＳＢインターフェイスで、バルクアウト転送によりホストＰＣからプリンタに転送された印刷データを格納する受信バッファとプリンタメモリ間のデータ転送にＤＭＡ転送インターフェイスを使用する際、前記ＤＭＡ転送をＵＳＢ仕様で定義されたパケット境界で一時的に停止状態にする手段と、該ＤＭＡ転送を再開する手段を備えることを特徴とする。
また、本発明の請求項２は、請求項１に記載のＵＳＢデバイスコントローラにおいて、前記ＤＭＡ転送がＵＳＢ仕様で定義されたパケット境界で一時的に停止状態にしたときに、割り込みを発生させる手段を備えることを特徴とする。
また、本発明の請求項３は、請求項１に記載のＵＳＢデバイスコントローラにおいて、前記ＤＭＡ転送がパケット境界で一時的に停止状態にある場合、ホストＰＣからデータ長ゼロのパケット（Ｎｕｌｌパケット）を受信した場合と同じシーケンスを前記ＤＭＡ転送インターフェイスに擬似的に与える手段を備えることを特徴とする。
また、本発明の請求項４は、請求項３に記載のＵＳＢデバイスコントローラにおいて、前記擬似Ｎｕｌｌパケットを与える場合、該擬似パケットを与えてもよいか否かを判別する手段を備えることを特徴とする。
また、本発明の請求項５は、請求項４に記載のＵＳＢデバイスコントローラにおいて、前記ＤＭＡ転送がＵＳＢで定義されたパケットデータ境界で停止した場合、直前にＤＭＡ転送されたパケットデータがショートパケット或いはＮｕｌｌパケットであるときには、前記判別手段で擬似Ｎｕｌｌパケットを与えないように判別することを特徴とする。
【０００６】
また、本発明の請求項６は、請求項１に記載のＵＳＢデバイスコントローラにおいて、前記ＤＭＡ転送によって前記受信バッファから前記プリンタメモリに転送されたデータ数をカウントする手段と、該データカウント数が一定値に達した場合に前記ＤＭＡ転送を一時的に停止状態にする手段を備えることを特徴とする。
また、本発明の請求項７は、請求項１に記載のＵＳＢデバイスコントローラにおいて、時間をカウントする手段と、該時間カウント数が一定値に達した場合に前記ＤＭＡ転送を一時的に停止状態にする手段を備えることを特徴とする。
また、本発明の請求項８は、請求項６に記載の前記プリンタメモリに転送されたデータ数をカウントする手段と、請求項７に記載の前記時間をカウントする手段を備え、一方のカウンタアップが完了した場合に他方のカウンタをクリアすることを特徴とする。
また、本発明の請求項９は、請求項１乃至８のいずれかに記載のＵＳＢデバイスコントローラにおいて、ＵＳＢ仕様で定義されたショートパケット或いはＮｕｌｌパケットに相当するデータのＤＭＡ転送が完了したときに割り込みを発生させる手段を備えることを特徴とする。
また、本発明の請求項１０は、請求項１乃至９のいずれかに記載のＵＳＢデバイスコントローラを搭載したプリンタである。
【発明の効果】
【０００７】
本発明によれば、ＵＳＢデバイスコントローラ内の印刷データ用受信バッファとプリンタメモリ間のデータ転送にＤＭＡ転送を使用するときに、印刷データのパケット間の任意の位置に印刷データに影響しない擬似的なＮｕｌｌパケットを挿入することができるので、通信プロトコル異常によって引き起こされる印刷障害はもちろん、印刷データ区切りを受信できなかった場合にも高速で正しい印刷データの転送が行えるＵＳＢデバイスコントローラおよびプリンタ装置を提供することができる。
また、擬似的なＮｕｌｌパケットを挿入して発生させた割り込みを、プリンタメモリデータの使用許可シーケンス開始に利用することにより、ＣＰＵのポーリングが不要となるためＣＰＵ負荷を減らしたプリンタが実現できる。
【発明を実施するための最良の形態】
【０００８】
以下、図面を参照して本発明の好適な実施形態を説明する。
本発明のＵＳＢデバイスコントローラの特徴は、ショートパケットがホストＰＣから発行されない場合であっても、ホストＰＣからデータ長ゼロのパケット（Ｎｕｌｌパケット）を受信した場合と同じシーケンスをＤＭＡ転送インターフェイスに擬似的に出現させる処理（擬似Ｎｕｌｌパケット挿入処理）をＵＳＢデバイスコントローラ内部で任意のタイミングで実行させることを可能としたことにある。
このＮｕｌｌパケットは、実データを持たないパケットであるから、実データがプリンタメモリに格納されることなしにディスクリプタ更新のみ実行されることになる。従って、擬似Ｎｕｌｌパケット挿入処理を任意のタイミングで挿入しても印刷データに余分なデータが付加されることがないため、印刷データの連続性は保たれることになる。
【０００９】
＜実施形態１＞
図１は、本発明のＵＳＢデバイスコントローラの主要部の構成を示すブロック図であり、ＵＳＢデバイスコントローラの動作を説明するのに必要な構成のみを示している。同図において、１は内部レジスタ（ＲＥ−Ａ，ＲＥ−Ｄ，ＲＥ−Ｂ，ＲＥ−Ｅ，ＲＥ−Ｃ，ＲＥ−Ｊ）、２は受信ＤＭＡ転送制御用ステートマシン、３は受信バッファ（バルクアウト用エンドポイント：ＥＰ１）、４は時間をカウントするカウンタＦ、５はＤＭＡＣ、６はプリンタメモリ（ディスクリプタ方式によるディスクリプタ領域とデータ格納領域からなる）、７はプリンタの制御プログラムを実行するためのＣＰＵ（中央演算装置）、８はドライバソフトが受信バッファ３からプリンタメモリ６へ転送したデータ数を示すカウンタＨである。
内部レジスタ１には、以下のレジスタが実装される。
・制御レジスタＲＥ−Ａは、ＤＭＡ転送の一時停止要求を設定する制御レジスタである。
・制御レジスタＲＥ−Ｄは、ホストＰＣからデータ長ゼロのパケット（Ｎｕｌｌパケット）を受信した場合と同じシーケンス処理要求を設定する制御レジスタである。
・制御レジスタＲＥ−Ｂは、ＤＭＡ転送再開要求を設定する制御レジスタである。
・レジスタＲＥ−Ｅは、ホストＰＣからデータ長ゼロのパケット（Ｎｕｌｌパケット）を受信した場合と同じシーケンスの実行可否状態を示すレジスタである。
・割り込みレジスタＲＥ−Ｃは、ＤＭＡ転送が一時停止したときに設定される割り込みフラグを格納するレジスタである。
・割り込みレジスタＲＥ−Ｊは、ホストＰＣからデータ長ゼロのパケット（Ｎｕｌｌパケット）を受信した場合と同じシーケンスの実行が完了となったときに設定される割り込みフラグを格納するレジスタである。
【００１０】
受信ＤＭＡ転送制御用ステートマシン２は、次に示すような機能をハード実装するステートマシンである。
（１）ＣＰＵが制御レジスタに値を設定すると、ステートマシン２はＵＳＢ仕様で定義されたパケット境界を検出した時点でＤＭＡ転送を一時的に停止状態にする。
（２）ＣＰＵが制御レジスタＲＥ−Ｂに値が設定されたことを認識すると、ＵＳＢ仕様で定義されたパケット境界で一時的に停止状態となっているＤＭＡ転送を再開させる。
（３）ＣＰＵが制御レジスタＲＥ−Ｄに値が設定されたことを認識すると、ホストＰＣからデータ長ゼロのパケット（Ｎｕｌｌパケット）を受信した場合と同じシーケンスをＤＭＡ転送インターフェイスに擬似的に出現させる。このシーケンスを擬似Ｎｕｌｌパケット挿入処理と呼ぶ。
（４）擬似Ｎｕｌｌパケット挿入処理が完了したときに、割り込みレジスタＲＥ−Ｊが設定され、ＣＰＵに対して擬似Ｎｕｌｌパケット挿入処理が完了した割り込みを発生させる。
（５）ＤＭＡ転送がＵＳＢ仕様で定義されたパケット境界が検出され、一時的に停止状態になると、割り込みレジスタＲＥ−Ｃが設定され、ＣＰＵに対して割り込みを発生させる。
（６）一時停止前に行われたＤＭＡ転送に対応するパケットがマックスパケットの場合は許可、ショートパケット或いはＮｕｌｌパケットの場合は不許可と判断して、擬似Ｎｕｌｌパケット挿入処理の許可／不許可をレジスタＲＥ−Ｅへ設定する。
（７）ＤＭＡ転送によって受信バッファ３からプリンタメモリ６に転送されたデータ数をカウンタＦ４でカウントし、カウンタＦ４の値が所定の一定値に達した場合に、制御レジスタＲＥ−Ａに設定してＤＭＡ転送を一時的に停止状態にする。
（８）時間をカウンタＨ８でカウントし、時間カウント数が所定の一定値に達した場合に、制御レジスタＲＥ−Ａに設定してＤＭＡ転送を一時的に停止状態にする。
【００１１】
次に、このように構成されたＵＳＢデバイスコントローラの制御手順について説明する。
ドライバソフトでカウントしている時間のカウンタＨ８の値が所定の値になった時点で、ＣＰＵ７が内部レジスタに実装されたＤＭＡ転送の一時停止要求をおこなう制御レジスタＲＥ−Ａに値を設定すると、ステートマシン２はＵＳＢ仕様で定義されたパケット境界を検出した時点でＤＭＡ転送を一時的に停止状態にする。またはカウンタＦ４の値が所定の値になった時点でＣＰＵ７が内部レジスタに実装されたＤＭＡ転送の一時停止要求をおこなう制御レジスタＲＥ−Ａに値を設定すると、ステートマシン２はＵＳＢ仕様で定義されたパケット境界を検出した時点でＤＭＡ転送を一時的に停止状態にする。
次に、ＤＭＡ転送がパケット境界で一時停止した時点で、割り込みレジスタＲＥ−Ｃが設定され、ＣＰＵ７に対して割り込みが発生する。
ＣＰＵ７は、割り込み要因を確認後、擬似Ｎｕｌｌ挿入許可レジスタＲＥ−Ｅを確認する。レジスタＲＥ−Ｅが１の場合は、擬似Ｎｕｌｌパケット挿入制御レジスタＲＥ−Ｄをセットすると、擬似Ｎｕｌｌパケット挿入処理を実行し、プリンタメモリ６側ではディスクリプタの更新が行われる。
この後、ＣＰＵ７がＤＭＡ転送再開制御レジスタＲＥ−Ｂに１を書き込むことにより、ＤＭＡ転送が再開される。
また、擬似Ｎｕｌｌパケット挿入が完了すると割り込みレジスタＲＥ−Ｊが設定されるので、ＣＰＵ７に対して割り込みが発生する。この割り込みが発生した場合、プリンタメモリ６には必ず有効なデータが存在することになる。この割り込みを使用することによりＣＰＵ７はプリンタメモリ６のデータを定期的にポーリングする必要が無くなるため、ＣＰＵ負荷を減らすことができる。
尚、擬似Ｎｕｌｌ挿入許可レジスタＲＥ−Ｅは、直前のＤＭＡ転送データがショートパケット或いはＮｕｌｌパケットであった場合には、不許可を示すようにしたので、不要な割り込み発生を防止する効果があり、ＣＰＵ負荷低減に貢献する。
一方、レジスタＲＥ−Ｅが０の場合、ＣＰＵ７はＤＭＡ転送再開制御レジスタＲＥ−Ｂに１を書き込む動作のみ実行して、ＤＭＡ転送が再開される。
【００１２】
上記のような制御手順により、擬似Ｎｕｌｌ挿入許可レジスタＲＥ−Ｅが許可状態である限り、任意のタイミングで擬似Ｎｕｌｌパケットを挿入することが可能となるため、本来Ｎｕｌｌパケットが挿入されるべき場所に擬似Ｎｕｌｌパケットが挿入されることになる。したがって、プリンタクラスドライバでファイルの区切りを送信しないという問題にも同時に対応できることになる。
また、印刷データ転送が完了した場合、次の印刷データ転送が開始されるまでに比較的長いアイドル状態（ＵＳＢトラフィックがない状態）が存在するが、印刷データの最後にはショートパケット或いはＮｕｌｌパケットのＤＭＡ転送が実行されることから、擬似Ｎｕｌｌ挿入許可レジスタＲＥ−Ｅは不許可状態となるので、アイドル状態において、不要な擬似Ｎｕｌｌパケット挿入が実行されることは起こり得ないことになる。
尚、２種類のカウンタ（カウンタＦ／カウンタＨ）を使用した理由は、以下の通りである。
（１）一定データ数のＤＭＡ転送完了時にＣＰＵに対して割り込みを起こさせるカウンタＦのみを使用した場合、カウント値に満たない状態で印刷ファイル転送が終わるときに、ＣＰＵに対する割り込みを発生させることができなくなる。これを回避するためには、最終データに使用許可を与えるために、ＣＰＵがプリンタメモリを定期的にポーリングする必要が生じてしまう。
（２）一方、カウンタＨのみ使用した場合、プリンタメモリ領域を使い切った時点でＤＭＡ転送が中断され、カウンタＨのカウントアップが完了する迄の時間が無駄になってしまい、無駄な時間分だけ印刷パフォーマンスに影響してしまう。
したがって、これらの問題を解消する目的で２種類のカウンタを併用することとした。
【００１３】
＜実施形態２＞
実施形態１では、時間のカウントを行うカウンタＨは、ドライバソフトが行うためＣＰＵを使用する。実施形態２では、このカウンタＨをＵＳＢデバイスコントローラ側にハード実装することにより、実施形態１よりさらにＣＰＵ負荷を減らすことが可能となる。
図２は、本発明のＵＳＢデバイスコントローラの主要部の他の構成を示すブロック図である。実施形態２のＵＳＢデバイスコントローラでは、カウンタＨ８がＵＳＢデバイスコントローラ側にハード実装された以外の構成は実施形態１と同じである。この場合の動作は以下のようになる。
カウンタＦ４の値が所定の値になった時点、或いはカウンタＨ８の値が所定の値になった時点で、ＣＰＵ７が内部レジスタに実装されたＤＭＡ転送の一時停止要求をおこなう制御レジスタＲＥ−Ａに値を設定すると、ステートマシン２はＵＳＢ仕様で定義されたパケット境界を検出した時点でＤＭＡ転送を一時的に停止状態にする。
ＤＭＡ転送がパケット境界で一時停止した時点で、割り込みレジスタＲＥ−Ｃへ割り込みが設定され、ＣＰＵ７に対して割り込みが発生する。
ＣＰＵ７は、割り込み要因を確認後、擬似Ｎｕｌｌ挿入許可レジスタＲＥ−Ｅを確認する。レジスタＲＥ−Ｅが１の場合は、擬似Ｎｕｌｌパケット挿入制御レジスタＲＥ−Ｄをセットすると、擬似Ｎｕｌｌパケット挿入処理を実行し、プリンタメモリ６側ではディスクリプタの更新が行われる。
この後、ＣＰＵ７がＤＭＡ転送再開制御レジスタＲＥ−Ｂに１を書き込むことにより、ＤＭＡ転送が再開される。
一方、レジスタＲＥ−Ｅが０の場合、ＣＰＵ７はＤＭＡ転送再開制御レジスタＲＥ−Ｂに１を書き込む動作のみ実行して、ＤＭＡ転送が再開される。
本実施形態２の場合、実施形態１で示したカウンタＨのカウントアップに伴って実行されるレジスタＲＥ−Ａへのセット処理が不要になる分、ＣＰＵ負荷を減らすことができる。尚、内部レジスタの変更に伴って、カウンタＨ／カウンタＦの値を変更可能な構成にしておくことが望ましい。
【００１４】
＜実施形態３＞
実施形態１および実施形態２においては、ＣＰＵが制御レジスタＲＥ−Ａ／ＲＥ−Ｂ／ＲＥ−Ｄにアクセスすることにより、ＤＭＡ転送の一時停止と再開、擬似Ｎｕｌｌパケット挿入を制御する構成であったが、ＣＰＵの制御なしに動作するような受信ＤＭＡ転送制御用ステートマシンを構成することも可能である（図３参照）。
この場合、ＤＭＡ転送を一時停止したときに発生させる割り込み、ＣＰＵ制御およびＣＰＵが参照していたレジスタＲＥ−Ａ／ＲＥ−Ｄ／ＲＥ−Ｂ／ＲＥ−Ｅ／ＲＥ−Ｃは不要になり、必要な内部レジスタは割り込みレジスタＲＥ−Ｊのみである。
本実施形態３の場合には、次のように実行される。
カウンタＦ４の値が所定の値になった時点、或いはカウンタＨ８の値が所定の値になった時点で、ＤＭＡ転送一時停止要求が有効となり、ＤＭＡ転送がパケット境界で一時停止した時点で、直前のＤＭＡ転送データがショートパケット／Ｎｕｌｌパケット／マックスパケットの何れであるかを判断する。
ショートパケット／Ｎｕｌｌパケットであった場合は、擬似Ｎｕｌｌパケット挿入を実行する。この場合プリンタメモリ側ではディスクリプタの更新が行われ、擬似Ｎｕｌｌパケット挿入処理が完了すると割り込みレジスタＲＥ−Ｊが設定され、ＣＰＵ７に対して割り込みが発生し、ＤＭＡ転送が再開される。
一方、マックスパケットであった場合は、擬似Ｎｕｌｌパケット挿入を行わず、ＤＭＡ転送の再開のみ実行する。
本実施形態３の場合、ＣＰＵでは印刷ファイル境界割り込みの確認とプリンタメモリの使用許可以外の処理が不要となるため、実施形態１および実施形態２の場合に増してＣＰＵ負荷を減らすことが可能となる。
【００１５】
＜実施形態４＞
上記の実施形態（実施形態１〜実施形態３）においては、２種類のカウンタ（カウンタＦ／カウンタＨ）を独立して並列使用する方法であり、両カウンタのカウント完了タイミングがほぼ同時になった場合、続けて擬似Ｎｕｌｌパケット挿入処理が実施されることになるので、必ずしも必要ない割り込み処理をＣＰＵが実行することになってしまう。
この問題を回避するために、本実施形態４では、一方のカウンタのカウントアップが完了した場合に他方のカウンタのカウントクリアを実施するようにした。それ以外の動作は、実施形態１〜実施形態３と同じであり、これによりそれぞれの場合に関して、不要な割り込み処理によるＣＰＵ負荷を減らすことが可能となる。
尚、本発明は上述した実施形態に限定されることなく、本発明の要旨を逸脱しない範囲内で各種の変形、修正が可能であるのは勿論である。
【図面の簡単な説明】
【００１６】
【図１】本発明のＵＳＢデバイスコントローラの主要部の構成（実施形態１）を示すブロック図である。
【図２】本発明のＵＳＢデバイスコントローラの主要部の他の構成（実施形態２）を示すブロック図である。
【図３】本発明のＵＳＢデバイスコントローラの主要部の他の構成（実施形態３）を示すブロック図である。
【図４】ＵＳＢインターフェイスによってホストＰＣと接続したプリンタの内部構成を示す図である。
【図５】４個のディスクリプタ領域とそれに対応するデータ格納領域からなるプリンタメモリの概念図である。
【図６】３つの受信パケットを格納したディスクリプタ領域とそれに対応するデータ格納領域の状態を示す図である。
【符号の説明】
【００１７】
１…内部レジスタ、２…受信ＤＭＡ転送制御用ステートマシン、３…受信バッファ（バルクアウト用エンドポイント）、４…カウンタＦ、５…ＤＭＡＣ、６…プリンタメモリ、７…ＣＰＵ、８…カウンタＨ。
【図１】
2005100314.tif 000003
【図２】
2005100314.tif 000004
【図３】
2005100314.tif 000005
【図４】
2005100314.tif 000006
【図５】
2005100314.tif 000007
【図６】
2005100314.tif 000008