(57)【要約】【課題】  転送元のデバイスのポート幅と転送先のデバイスのポート幅が異なる場合に、各デバイスに対して特別なハードウェアを設けることなく、両者の間におけるＤＭＡ転送を実現することを課題とする目的とする。【解決手段】  データ転送装置は、共有バスに接続された第１のデバイスと、前記共有バスに接続された第２のデバイスと、メモリと、ＤＭＡ転送を実行するＤＭＡコントローラと、前記第１のデバイスと前記第２のデバイス間のデータ転送を制御する制御手段と、を備え、前記制御手段は、前記第１のデバイスから前記第２のデバイスへのデータ転送要求を受け付けると、前記第１のデバイスから前記メモリへのＤＭＡ転送をＤＭＡコントローラへ指示し、前記ＤＭＡコントローラによるＤＭＡ転送が終了すると、前記メモリから第２のデバイスへのＤＭＡ転送を前記ＤＭＡコントローラへ指示する。【選択図】  図１
2005128753.tif 000002
【特許請求の範囲】
【請求項１】
共有バスに接続された第１のデバイスと、前記共有バスに接続された第２のデバイスと、メモリと、ＤＭＡ転送を実行するＤＭＡコントローラと、前記第１のデバイスと前記第２のデバイス間のデータ転送を制御する制御手段と、を備え、
前記制御手段は、前記第１のデバイスから前記第２のデバイスへのデータ転送要求を受け付けると、前記第１のデバイスから前記メモリへのＤＭＡ転送をＤＭＡコントローラへ指示し、前記ＤＭＡコントローラによるＤＭＡ転送が終了すると、前記メモリから第２のデバイスへのＤＭＡ転送を前記ＤＭＡコントローラへ指示することを特徴とするデータ転送装置。
【請求項２】
前記制御手段は、前記第１のデバイスから前記メモリへＤＭＡ転送を行う場合には、前記第１のデバイスのポート幅単位でＤＭＡ転送を行うように前記ＤＭＡコントローラへ指示し、前記第１のデバイスから前記メモリへＤＭＡ転送を行う場合には、前記第２デバイスのポート幅単位でＤＭＡ転送を行うように前記ＤＭＡコントローラへ指示することを特徴とする請求項１記載のデータ転送装置。
【請求項３】
前記制御手段は、前記第１のデバイスから前記第２のデバイスへのデータ転送要求を受け付けると、前記第１のデバイスのポート幅および前記第２のデバイスのポート幅のうちいずれか大きい方のポート幅以上の領域を転送用領域としてメモリ上に確保することを特徴とする請求項１または２記載のデータ転送装置。
【請求項４】
前記制御手段は、前記第１のデバイスから前記転送用領域へのＤＭＡ転送を第１のＤＭＡ転送として前記ＤＭＡコントローラへ指示し、前記転送用領域から前記第２のデバイスへのＤＭＡ転送を第２のＤＭＡ転送として前記ＤＭＡコントローラへ指示する場合に、前記転送用領域を第１の領域と第２の領域とに分けて前記メモリ上に確保し、この第１の領域と第２の領域とを切り替えながら前記第１のＤＭＡ転送および前記第２のＤＭＡ転送を行うように前記ＤＭＡコントローラへ指示することを特徴とする請求項１乃至３いずれか１項に記載のデータ転送装置。
【請求項５】
前記制御手段は、前記第１のデバイスのポート幅と前記第２のデバイスのポート幅とが一致するか否かを判断し、一致すると判断した場合には、前記第１のデバイスから前記第２のデバイスへのＤＭＡ転送を前記ＤＭＡコントローラへ指示し、一致しないと判断した場合には、前記第１のデバイスから前記メモリへのＤＭＡ転送を前記ＤＭＡコントローラへ指示し、前記ＤＭＡコントローラによるＤＭＡ転送が終了すると、前記メモリから第２のデバイスへのＤＭＡ転送を前記ＤＭＡコントローラへ指示することを特徴とする請求項１乃至４いずれか1項に記載のデータ転送装置。
【請求項６】
第１のデバイスと、第２のデバイスと、メモリと、ＤＭＡ転送を実行するＤＭＡコントローラとを備えるデータ転送装置に所定の機能を実現させるためのプログラムであって、
前記第１のデバイスから前記第２のデバイスへのデータ転送要求を受け付けると、前記第１のデバイスから前記第１のデバイスのポート幅単位で前記メモリへＤＭＡ転送を行うようにＤＭＡコントローラへ指示する機能と、
前記ＤＭＡコントローラによるＤＭＡ転送が終了すると、前記メモリから前記第２のデバイスのポート幅単位で前記第２のデバイスへのＤＭＡ転送を行うように前記ＤＭＡコントローラへ指示する機能と、
を前記データ転送装置に実現させるためのプログラム。
【請求項７】
共有バスに接続された第１のデバイスと第２のデバイス間におけるデータ転送を実行するデータ転送方法であって、
前記第１のデバイスから前記第２のデバイスへのデータ転送要求を受け付ける工程と、
前記第１のデバイスのポート幅単位で前記第１のデバイスからメモリへのＤＭＡ転送をＤＭＡコントローラへ指示する工程と、
前記ＤＭＡコントローラによるＤＭＡ転送が終了すると、前記第２のデバイスのポート幅単位で前記メモリから前記第２のデバイスへのＤＭＡ転送を前記ＤＭＡコントローラへ指示する工程と、
を実行することを特徴とするデータ転送方法。
【請求項８】
第１のデバイスの動作を制御するためのデバイスドライバであって、
前記第１のデバイスが、第２のデバイス、メモリ、ＣＰＵおよびＤＭＡ転送を実行するＤＭＡコントローラと共有バスを介して接続されている場合に、
前記第１のデバイスから前記第２のデバイスへのデータ転送要求を受け付ける機能と、
前記第１のデバイスのポート幅単位で前記第１のデバイスから前記メモリへのＤＭＡ転送を前記ＤＭＡコントローラへ指示する機能と、
前記ＤＭＡコントローラによるＤＭＡ転送が終了すると、前記第２のデバイスのポート幅単位で前記メモリから前記第２のデバイスへのＤＭＡ転送を前記ＤＭＡコントローラへ指示する機能と、
を前記ＣＰＵに実現させるためのデバイスドライバ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デバイス間でＤＭＡ転送を行うデータ転送方法の技術に関し、特に、ポート幅が異なるデバイス間でＤＭＡ転送を行うデータ転送方法の技術に関する。
【背景技術】
【０００２】
従来、共有バスを介してデバイス間でＤＭＡ転送を行う場合には、転送元のデバイスのポート幅と転送先のデバイスのポート幅とが等しいものであることが前提であったため、転送元のデバイスのポート幅と転送先のデバイスのポート幅とが異なる場合には、ＤＭＡ転送を行うことができないという問題があった。
【０００３】
そこで、転送元のデバイスのポート幅と転送先のデバイスのポート幅が異なる場合のデータ転送方法が提案されている。このようなデータ転送方法としては、例えば、特開平５−１８１７８５号公報に記載されたようなデータ転送方式がある（特許文献１）。
【０００４】
特開平５−１８１７８５号公報に記載されたデータ転送方式は、マスター装置とスレーブ装置のそれぞれに、行方向および列方向に自在にシフト可能な行列形式のレジスタセルを設け、共有バスとの間でデータの授受を行う場合には、列方向のシフトを行い、マスター装置やスレーブ装置との間でデータの授受を行う場合には、行方向のシフトを行うというものである。
【特許文献１】特開平５−１８１７８５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、上記特開平５−１８１７８５号公報に記載されたような従来のデータ転送方式では、マスター装置とスレーブ装置のそれぞれに、行方向および列方向に自在にシフト可能な行列形式のレジスタセルを設ける必要がある。
【０００６】
したがって、ハードウェアであるマスター装置とスレーブ装置を設計する段階で、それぞれの装置にレジスタセルを設けるという作業が必要になる。また、既存のマスター装置やスレーブ装置に対して上記データ転送方式を適用する場合には、それぞれの装置にレジスタセルを追加するというハードウェアの改造作業が必要となる。そのため、従来のようにレジスタセルを設ける方式では、ハードウェア設計時の作業や運用が面倒であり、コスト負担も大きいという問題があった。
【０００７】
そこで、本発明は、転送元のデバイスのポート幅と転送先のデバイスのポート幅が異なる場合に、各デバイスに対して特別なハードウェアを設けることなく、両者の間におけるＤＭＡ転送を実現することを課題とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明のデータ転送装置は、共有バスに接続された第１のデバイスと、前記共有バスに接続された第２のデバイスと、メモリと、ＤＭＡ転送を実行するＤＭＡコントローラと、前記第１のデバイスと前記第２のデバイス間のデータ転送を制御する制御手段と、を備え、前記制御手段は、前記第１のデバイスから前記第２のデバイスへのデータ転送要求を受け付けると、前記第１のデバイスから前記メモリへのＤＭＡ転送をＤＭＡコントローラへ指示し、前記ＤＭＡコントローラによるＤＭＡ転送が終了すると、前記メモリから第２のデバイスへのＤＭＡ転送を前記ＤＭＡコントローラへ指示する。
【０００９】
当該構成によれば、第１のデバイスと第２のデバイス間におけるＤＭＡ転送をメモリを用いて段階的に行うこととしたので、各デバイスに対して特別なハードウェアを設けることなくデバイス間のＤＭＡ転送を実現することが可能になる。
【００１０】
また、前記制御手段は、前記第１のデバイスから前記メモリへＤＭＡ転送を行う場合には、前記第１のデバイスのポート幅単位でＤＭＡ転送を行うように前記ＤＭＡコントローラへ指示し、前記第１のデバイスから前記メモリへＤＭＡ転送を行う場合には、前記第２デバイスのポート幅単位でＤＭＡ転送を行うように前記ＤＭＡコントローラへ指示することが望ましい。
【００１１】
当該構成によれば、第１のデバイスと第２のデバイスのポート幅がそれぞれ異なる場合であっても、両者の間にメモリを介在させることにより、第１のデバイスから第２のデバイスへのＤＭＡ転送を実現することができるようになる。
【００１２】
また、前記制御手段は、前記第１のデバイスから前記第２のデバイスへのデータ転送要求を受け付けると、前記第１のデバイスのポート幅および前記第２のデバイスのポート幅のうちいずれか大きい方のポート幅以上の領域を転送用領域としてメモリ上に確保することを特徴とする。
【００１３】
当該構成によれば、第１のデバイスと第２のデバイスのポート幅がそれぞれ異なる場合に、大きいほうのポート幅にあわせて転送用領域をメモリ上に確保しているので、両方のデバイスを対象にしてＤＭＡ転送を行うことができる。
【００１４】
また、前記制御手段は、前記第１のデバイスから前記転送用領域へのＤＭＡ転送を第１のＤＭＡ転送として前記ＤＭＡコントローラへ指示し、前記転送用領域から前記第２のデバイスへのＤＭＡ転送を第２のＤＭＡ転送として前記ＤＭＡコントローラへ指示する場合に、前記転送用領域を第１の領域と第２の領域とに分けて前記メモリ上に確保し、この第１の領域と第２の領域とを切り替えながら前記第１のＤＭＡ転送および前記第２のＤＭＡ転送を行うように前記ＤＭＡコントローラへ指示することを特徴とする。
【００１５】
当該構成によれば、第１の領域と第２の領域とを切り替えながら前記第１のＤＭＡ転送および前記第２のＤＭＡ転送を行うので、より効率的にデータ転送を行うことが可能になる。
【００１６】
また、前記制御手段は、前記第１のデバイスのポート幅と前記第２のデバイスのポート幅とが一致するか否かを判断し、一致すると判断した場合には、前記第１のデバイスから前記第２のデバイスへのＤＭＡ転送を前記ＤＭＡコントローラへ指示し、一致しないと判断した場合には、前記第１のデバイスから前記メモリへのＤＭＡ転送を前記ＤＭＡコントローラへ指示し、前記ＤＭＡコントローラによるＤＭＡ転送が終了すると、前記メモリから第２のデバイスへのＤＭＡ転送を前記ＤＭＡコントローラへ指示することを特徴とする。
【００１７】
当該構成によれば、デバイス間のポート幅の状況に応じたＤＭＡ転送を実行することが可能になる。
【００１８】
また、本発明は、第１のデバイスと、第２のデバイスと、メモリと、ＤＭＡ転送を実行するＤＭＡコントローラとを備えるデータ転送装置に所定の機能を実現させるためのプログラムであって、前記第１のデバイスから前記第２のデバイスへのデータ転送要求を受け付けると、前記第１のデバイスから前記第１のデバイスのポート幅単位で前記メモリへＤＭＡ転送を行うようにＤＭＡコントローラへ指示する機能と、前記ＤＭＡコントローラによるＤＭＡ転送が終了すると、前記メモリから前記第２のデバイスのポート幅単位で前記第２のデバイスへのＤＭＡ転送を行うように前記ＤＭＡコントローラへ指示する機能と、を前記データ転送装置に実現させるためのプログラムである。
【００１９】
当該構成によれば、ポート幅の異なるＤＭＡ転送をプログラムによって制御することができるので、各デバイスに対して特別なハードウェアを設けることなくデバイス間のＤＭＡ転送を実現することが可能になる。
【００２０】
また、本発明は、共有バスに接続された第１のデバイスと第２のデバイス間におけるデータ転送を実行するデータ転送方法であって、前記第１のデバイスから前記第２のデバイスへのデータ転送要求を受け付ける工程と、前記第１のデバイスのポート幅単位で前記第１のデバイスからメモリへのＤＭＡ転送をＤＭＡコントローラへ指示する工程と、前記ＤＭＡコントローラによるＤＭＡ転送が終了すると、前記第２のデバイスのポート幅単位で前記メモリから前記第２のデバイスへのＤＭＡ転送を前記ＤＭＡコントローラへ指示する工程と、を実行することを特徴とするデータ転送方法である。
【００２１】
また、本発明は、第１のデバイスの動作を制御するためのデバイスドライバであって、前記第１のデバイスが、第２のデバイス、メモリ、ＣＰＵおよびＤＭＡ転送を実行するＤＭＡコントローラと共有バスを介して接続されている場合に、前記第１のデバイスから前記第２のデバイスへのデータ転送要求を受け付ける機能と、前記第１のデバイスのポート幅単位で前記第１のデバイスから前記メモリへのＤＭＡ転送を前記ＤＭＡコントローラへ指示する機能と、前記ＤＭＡコントローラによるＤＭＡ転送が終了すると、前記第２のデバイスのポート幅単位で前記メモリから前記第２のデバイスへのＤＭＡ転送を前記ＤＭＡコントローラへ指示する機能と、を前記ＣＰＵに実現させるためのデバイスドライバである。
【００２２】
当該構成によれば、転送元と転送先の両方のデバイスに対して特別なハードウェアを設ける必要がないとともに、転送先のデバイスには影響を与えることなく、転送元となるデバイスのデバイスドライバのみによってデバイス間のＤＭＡ転送を行うことができるようになる。
【００２３】
なお、本発明のデータ転送方法は、コンピュータにより実施することができるが、そのためのコンピュータプログラムは、ＣＤ−ＲＯＭ、磁気ディスク、半導体メモリ及び通信ネットワークなどの各種の媒体を通じてコンピュータにインストールまたはロードすることができる。また、コンピュータプログラムが、プリンタ用カードやプリンタ用オプションボードに記録されて流通する場合も含む。
【発明の効果】
【００２４】
本発明によれば、転送元のデバイスのポート幅と転送先のデバイスのポート幅が異なる場合であっても、各デバイスに対して特別なハードウェアを設けることなく両者の間におけるＤＭＡ転送を実現することができるようになる。
【発明を実施するための最良の形態】
【００２５】
（第１の実施形態）
（プリンタシステムの構成）
まず、図１及び図２を用いて、本発明の実施形態のデータ転送装置の構成について説明する。図１は、本発明の実施形態のデータ転送装置のハードウェア構成を示すブロック図である。図２は、本発明の実施形態のデバイスドライバ手段の機能構成図を示すブロック図である。
【００２６】
図１に示すように、データ転送装置１００は、デバイスA（転送元デバイス）１と、デバイスＢ（転送先デバイス）２と、データ転送装置１００全体の動作を制御する制御手段としてのＣＰＵ３と、処理に必要な各種データを記憶する記憶手段としてのＲＡＭ（メモリ）４、ＣＰＵ３を介することなくデータ転送を行うＤＭＡ転送において通信の制御を行うＤＭＡコントローラ５と、制御プログラムなどを格納したＲＯＭ６とを備え、これらは共有バスを介して接続されている。なお、本実施形態では、デバイスＡ１を転送元デバイス、デバイスＢ２を転送先デバイスとして説明するが、デバイスＡ１を転送先デバイス、デバイスＢ２を転送元デバイスとした場合でも、同様に本実施形態のデータ転送方法を適用することができる。
【００２７】
デバイスＡ１とデバイスＢ２は、それぞれアクセスするためのポート幅が設定されている。本実施形態では、デバイスＡのポート幅とデバイスＢのポート幅は異なることを前提とする。本実施形態におけるデバイスＡ１は、たとえばＵＳＢインタフェースを備えるＰＣＩカードであり、ポート幅１１は１バイトに設定されている。また、本実施形態におけるデバイスＢ２は、たとえばデバイスＡ１から転送されるデータを格納するためのフレームメモリを備えるＰＣＩカードであり、ポート幅２１は４バイトに設定されている。なお、デバイスＡ１およびデバイスＢ２としては、これらに限られず、また、ポート幅はデバイスの種類に応じて設定されるものとする。
【００２８】
ＣＰＵ３は、デバイスＡ１の動作を制御するために必要な通常の制御機能として図２に示すデバイスドライバ手段３１を備えている。なお、ＣＰＵ３は、デバイスＢ２の動作を制御するためのデバイスドライバ手段も備えているが、ここでは、説明を省略する。
【００２９】
デバイスドライバ手段３１は、通常のデバイスドライバと同様の機能構成であり、データ転送要求を受け付ける転送要求受付手段３１１などを備える。ただし、本実施形態にかかるデバイスドライバ手段３１は、転送要求受付手段３１１が転送要求を受け付けると、転送元デバイスであるデバイスＡ１から転送先デバイスへのデータ転送をＲＡＭ４上に用意した転送用バッファ（転送用領域）を介して実行する転送制御手段３１２と、転送制御手段３１２による転送中のデータに対して所定の変換処理を実行するデータ変換手段３１３をさらに備える。
【００３０】
デバイスドライバ手段３１の主な機能について簡単に説明する。デバイスドライバ手段３１は、例えば上位アプリケーションから転送要求受付手段３１１を介してデータ転送要求を受け付けると、ＲＡＭ４上に、転送データを一時記憶するための転送用バッファを設定する。そして、転送制御手段３１２は、デバイスＡ１から転送用バッファへのＤＭＡ転送をＤＭＡコントローラ５に指示する。この際、転送制御手段３１２は、デバイスＡ１のポート幅単位でＤＭＡ転送を行うことを指示する。
【００３１】
ＤＭＡコントローラからDMA転送の終了割り込みがあると、次に、転送制御手段３１２は、転送用バッファからデバイスB２へのDMA転送をＤＭＡコントローラ５に指示する。この際、転送制御手段３１２は、デバイスB２のポート幅単位でＤＭＡ転送を行うことを指示する。このように、ポート幅が異なるためデバイスA１からデバイスB２へ直接DMA転送ができない場合であっても、本実施形態のデバイスドライバ手段３１によれば、転送用バッファを介在させることによって、デバイスA１からデバイスB２へDMA転送を利用したデータ転送が可能になる。
【００３２】
なお、これらの各手段は、データ転送装置１００内のＲＯＭやＲＡＭ、外部の記憶媒体等に格納されるプログラムをＣＰＵが実行することにより機能的に実現される。
【００３３】
（データ転送装置における処理）
以下、図３に示すフローチャートおよび図４に示す説明図を参照してデータ転送装置における処理について説明する。図３は、データ転送装置におけるデータ転送の処理を説明するフローチャートである。図４は、デバイスＡ１からデバイスＢ２へバッファを介してデータがＤＭＡ転送される様子を説明するための図である。なお、各工程（符号が付与されていない部分的な工程を含む）は処理内容に矛盾を生じない範囲で任意に順番を変更して又は並列に実行することができる。
【００３４】
転送要求受付手段３１１は、上位アプリケーションなどからデータ転送要求を受け付けると（ＳＴＥＰ３００のＹｅｓ）、転送制御手段３１２に対して処理の開始を指示する。また、転送要求受付手段３１１は、データ転送要求に含まれる転送先デバイス、転送すべきデータ量などの情報を、転送制御手段３１２に対して通知する。ここでは、転送先デバイスとしてデバイスＢ２が指定されているものとする。
【００３５】
転送制御手段３１２は、転送要求受付手段３１１より処理の開始が指示されると、デバイスＡ１のポート幅を転送元デバイスのポート幅Ｎに設定し、デバイスＢ２のポート幅を転送先デバイスのポート幅Ｍに設定する（ＳＴＥＰ３０１）。
【００３６】
次に、転送制御手段３１２は、転送用のバッファをＲＡＭ４に用意する（ＳＴＥＰ３０２）。ここで、転送用のバッファとしては、任意のサイズを設定することができるが、少なくとも転送元デバイスのポート幅Ｎバイトおよび転送先デバイスのポート幅Ｍバイトのうち、いずれか大きい方のバイト数を確保するようにそのサイズを設定する必要がある。
【００３７】
本実施形態では、転送元デバイスのポート幅Ｎには１バイトが、転送先デバイスのポート幅Ｍには４バイトがそれぞれ設定されているので、転送用バッファのサイズ（転送用領域）を４バイトに設定したものとする。
【００３８】
転送用のバッファを準備すると、転送制御手段３１２は、デバイスＡ１から転送用バッファへのＤＭＡ転送をＤＭＡコントローラ５に指示する（ＳＴＥＰ３０３）。ここで、転送制御手段３１２は、転送元デバイスのポート幅Ｎバイト単位でＤＭＡ転送を行うことを指定する必要がある。たとえば、転送用のバッファのサイズは４バイトに設定されているので、転送用制御手段３１２は、１バイト単位で４バイト分のデータをデバイスＡ１から転送用バッファへＤＭＡ転送するようＤＭＡコントローラ５に指示する。
【００３９】
ＤＭＡコントローラ５は、転送用制御手段３１２からの指示を受け付けると、１バイト単位で、デバイスＡ１から転送用バッファへのＤＭＡ転送を開始する（図４（１）−１参照）。そして、１バイト単位で４バイト分のデータをデバイスＡ１から転送用バッファへＤＭＡ転送し終えると、転送用制御手段３１２に対して、終了割り込みをかける。
【００４０】
転送用制御手段３１２は、ＤＭＡコントローラ５からのＤＭＡ終了割り込みが発生したと判断すると（ＳＴＥＰ３０４）、所定の条件に従って、転送用バッファに格納されたデータの並び替えが必要か否かを判断する（ＳＴＥＰ３０５）。例えば、デバイスＡ１上では「１，２，３，４・・・」という順に存在するデータについて、デバイスＢ２上では「・・・４，３，２，１」という順に格納したいような場合には、データ転送のタイミングでデータの並び替えを行うことが望ましい。
【００４１】
転送用制御手段３１２は、データ変換が必要であると判断した場合は（ＳＴＥＰ３０５のＹｅｓ）、データ変換手段３１３に対してデータ変換を指示する。データ変換手段３１３は、データ変換の指示を受けると、転送用バッファ内のデータに対してデータの並び替え行う（ＳＴＥＰ３０６）。データの変換としては、たとえばエンディアン変換が該当する。図４に示すように転送用バッファには「１，２，３，４」の順番でデータが格納されている場合に、エンディアン変換を行うと、データの並び順は、「４，３，２，１」となる。
【００４２】
次に、転送用制御手段３１２は、転送用バッファからデバイスＢ２へのＤＭＡ転送をＤＭＡコントローラ５へ指示する（ＳＴＥＰ３０７）。ここで、転送制御手段３１２は、転送先デバイスのポート幅Ｍバイト単位でＤＭＡ転送を行うことを指定する必要がある。具体的には、転送用制御手段３１２は、４バイト単位で４バイト分のデータを転送用バッファからデバイスＢ２へＤＭＡ転送するようにＤＭＡコントローラ５に指示する。
【００４３】
ＤＭＡコントローラ５は、転送用制御手段３１２からの指示を受け付けると、今度は、４バイト単位で、転送用バッファからデバイスＢ２へのＤＭＡ転送を開始する（図４（１）−２参照）。そして、４バイト単位で４バイト分のデータを転送用バッファからデバイスＢ２へＤＭＡ転送し終えると、転送用制御手段３１２に対して、終了割り込みをかける。
【００４４】
転送用制御手段３１２は、ＤＭＡコントローラ５からのＤＭＡ終了割り込みが発生したと判断すると（ＳＴＥＰ３０８のＹｅｓ）、全データの転送が終了したか否かを判断する（ＳＴＥＰ３０９）。全データの転送が終了したか否かの判断は、例えば、データ転送要求にて指定された転送すべきデータ量と、デバイスＡ１から転送用バッファへ転送したデータ量（つまり転送用バッファからデバイスＢ２へ転送したデータ量）とを比較することにより判断することができる。
【００４５】
デバイスＡ１から転送用バッファへ転送したデータ量が、転送すべきデータ量に満たない場合には、転送用制御手段３１２は、全データの転送が終了していないと判断し（ＳＴＥＰ３０９のＮＯ）、ＳＴＥＰ３０３〜ＳＴＥＰ３０８に示すデバイスＡ１から転送用バッファへのＤＭＡ転送および転送用バッファからデバイスＢ２へのＤＭＡ転送を繰り返す。
【００４６】
図４に示すように、２回目のＤＭＡ転送では、デバイスＡ１からデータ「５，６，７，８」が１バイト単位で転送用バッファへＤＭＡ転送され、その後、転送用バッファからデータが４バイト単位でデバイスＢ２へＤＭＡ転送されていることがわかる（図４（２）−１、（２）−２参照）。
【００４７】
一方、デバイスＡ１から転送用バッファへ転送したデータ量が、転送すべきデータ量と等しいか転送すべきデータ量よりも多い場合には、転送用制御手段３１２は、全データの転送が終了したと判断し（ＳＴＥＰ３０９のＹｅｓ）、データ転送を終了する。
【００４８】
なお、デバイスＡ１を転送先デバイス、デバイスＢ２を転送元デバイスとした場合には、転送元デバイスのポート幅Ｎに４バイトが設定され、転送先デバイスのポート幅Ｍに１バイトが設定されるが、処理の流れは同様である。
【００４９】
以上の構成によれば、転送元デバイスと転送先デバイスとのポート幅が異なる場合であっても、各デバイスに特定のハードウェアを追加等することなく、デバイス間のＤＭＡ転送を実行することができるようになる。
【００５０】
また、転送先のデバイスが変更した場合であっても、転送先デバイスのポート幅Ｍを変更するだけでよいので、１の転送元デバイスから複数の転送先デバイスへ任意にＤＭＡ転送を行うことができるようになる。
【００５１】
（第２の実施形態）
第２の実施形態は、上記第１の実施形態の応用であり、複数の転送用バッファを用意する構成を採用することを特徴とする。複数の転送用バッファを用意し、使用するバッファを切り替えながら複数のＤＭＡ転送を行うことでデバイス間のデータ転送をより効率的に行うことができるようになる。
【００５２】
具体的には、第２の実施形態では、複数の転送用バッファとして第１のバッファ、第２のバッファを設け、デバイスＡから第１のバッファまたは第２のバッファへは、第１のＤＭＡチャネルを利用するＤＭＡ転送（以下、「第１のＤＭＡ転送」という）を行い、第１のバッファまたは第２のバッファからデバイスＢ２へは、第２のＤＭＡチャネルを利用するＤＭＡ転送（以下、「第２のＤＭＡ転送」という）を行う構成とした。
【００５３】
以下、図５乃至図７に示すフローチャートを参照して第２の実施形態にかかるデータ転送装置における処理について説明する。なお、各工程（符号が付与されていない部分的な工程を含む）は処理内容に矛盾を生じない範囲で任意に順番を変更して又は並列に実行することができる。
【００５４】
転送要求受付手段３１１は、上位アプリケーションなどからデータ転送要求を受け付けると（ＳＴＥＰ５００のＹｅｓ）、転送制御手段３１２に対して処理の開始を指示する。転送制御手段３１２は、処理の開始が指示されると、各バッファフラグ（第１のバッファフラグ、第２のバッファフラグ）および各ＤＭＡ転送フラグ（第１のＤＭＡ転送フラグ、第２のＤＭＡ転送フラグ）を初期化する（ＳＴＥＰ５０１）。
【００５５】
第１のバッファフラグおよび第２のバッファフラグとは、第１のバッファおよび第２のバッファに対するデータの格納状態を識別するためのもので、各バッファにデータが有るか否か（バッファがＦＵＬＬの状態か、空の状態か）を示す情報が格納される。例えば、各バッファにデータが有る（バッファがＦＵＬＬ）場合には「１」、各バッファにデータがない（バッファが空）場合には「０」が格納される。
【００５６】
一方、第１のＤＭＡ転送フラグおよび第２のＤＭＡ転送フラグとは、ＤＭＡ転送を実行中か否かを識別するためのもので、各ＤＭＡ転送を実行中か否かを示す情報が格納される。例えば、ＤＭＡ転送中であれば「ＯＮ」、ＤＭＡ転送中でなければ「ＯＦＦ」が格納される。
【００５７】
転送制御手段３１２は、ＲＡＭ４上に第１のバッファおよび第２のバッファを設定する（ＳＴＥＰ５０２）。各バッファのサイズは、第１の実施形態にて説明したように、デバイスＡ１のポート幅およびデバイスＢ２のポート幅を考慮して設定される（少なくとも大きいほうのポート幅以上の領域を確保することが必要である）。
【００５８】
転送用のバッファを準備すると、転送制御手段３１２は、転送元デバイスのポート幅Ｎバイト単位でデバイスＡ１から第１のバッファへＤＭＡ転送を行う、第１のＤＭＡ転送をＤＭＡコントローラ５に指示する（ＳＴＥＰ５０３）。そして、第１のＤＭＡ転送フラグに転送中であることを示すＯＮを設定する（ＳＥＴＰ５０４）。ＤＭＡコントローラ５は、転送用制御手段３１２からの指示を受け付けると、１バイト単位で、デバイスＡ１から転送用バッファへの第１のＤＭＡ転送を開始する。
【００５９】
次に、転送用制御手段３１２は、ＤＭＡコントローラ５からのＤＭＡ終了割り込みが発生したと判断すると（ＳＴＥＰ５０５のＹｅｓ）、ＤＭＡ終了割り込みの内容に応じて各フラグの内容を更新する（ＳＴＥＰ５０６）。たとえば、デバイスＡ１から第１のバッファへの第１のＤＭＡ転送の終了を示す割り込みである場合には、第１のＤＭＡ転送フラグに転送中でないことを示す「ＯＦＦ」を設定し、第１のバッファフラグにデータが格納された状態を示す「１」を設定する。
【００６０】
次に、転送用制御手段３１２は、第１のバッファに対するデータの格納状態を判断する処理（ＳＴＥＰ５０７）と、第２のバッファに対するデータの格納状態を判断する処理（ＳＴＥＰ５０８）とを実行する。
【００６１】
図６は、第１のバッファに対するデータの格納状態を判断する処理の流れを示すフローチャートである。転送用制御手段３１２は、第１のバッファフラグを参照して第１のバッファにデータがあるか否かを判断する（ＳＴＥＰ６０１）。
【００６２】
ここでは、第１のバッファフラグに「１」が設定されているので、データがあると判断し（ＳＴＥＰ６０１のＹｅｓ）、次に、ＤＭＡ転送中か否かを判断する（ＳＴＥＰ６０５）。第２のＤＭＡ転送フラグにはＯＦＦが設定されているので、ＤＭＡ転送中でないと判断し、第１のバッファからデバイスＢ２への第２のＤＭＡ転送をＤＭＡコントローラ５へ指示する（ＳＴＥＰ６０６）。そして、第２のＤＭＡ転送フラグにＯＮを設定する（ＳＴＥＰ６０７）。
【００６３】
なお、第１のバッファにデータがないと判断した場合には（ＳＴＥＰ６０１のＮＯ）、次に、ＤＭＡ転送フラグを参照して、ＤＭＡ転送が実行中か否かを判断する（ＳＴＥＰ６０２）。そして、ＤＭＡ転送を実行中でないと判断した場合には（ＳＴＥＰ６０２のＮＯ）、デバイスＡ１から第１のバッファへの第１のＤＭＡ転送をＤＭＡコントローラ５へ指示する（ＳＴＥＰ６０３）。そして、第１のＤＭＡ転送フラグにＯＮを設定する（ＳＴＥＰ６０４）。
【００６４】
図７は、第２のバッファに対するデータの格納状態を判断する処理の流れを示すフローチャートである。転送用制御手段３１２は、第２のバッファフラグを参照して第２のバッファにデータがあるか否かを判断する（ＳＴＥＰ７０１）。
【００６５】
ここでは、第２のバッファフラグに「０」が設定されているので、データがないと判断し（ＳＴＥＰ７０１のＹｅｓ）、次に、ＤＭＡ転送中か否かを判断する（ＳＴＥＰ７０２）。第１のＤＭＡ転送フラグにはＯＦＦが設定されているので、ＤＭＡ転送中でないと判断し、デバイスＡ１から第２のバッファへの第１のＤＭＡ転送をＤＭＡコントローラ５へ指示する（ＳＴＥＰ７０３）。そして、第１のＤＭＡ転送フラグにＯＮを設定する（ＳＴＥＰ７０４）。
【００６６】
なお、第２のバッファにデータがあると判断した場合には（ＳＴＥＰ７０１のＮＯ）、次に、ＤＭＡ転送フラグを参照して、ＤＭＡ転送が実行中か否かを判断する（ＳＴＥＰ７０５）。そして、ＤＭＡ転送を実行中でないと判断した場合には（ＳＴＥＰ７０５のＮＯ）、第２のバッファからデバイスＢ２への第２のＤＭＡ転送をＤＭＡコントローラ５へ指示する（ＳＴＥＰ７０６）。そして、第２のＤＭＡ転送フラグにＯＮを設定する（ＳＴＥＰ７０７）。
【００６７】
上記構成においても、第１の実施形態と同様に、第１のバッファおよび第２のバッファへ格納したデータに対する変換処理が必要な場合には、データ変換手段３１３による変換処理を実行する。
【００６８】
以上の構成によれば、たとえば、デバイスＡから第１のバッファへデータをＤＭＡ転送（第１のＤＭＡ転送）した後に、第１のバッファからデバイスＢへデータをＤＭＡ転送（第２のＤＭＡ転送）している間に、デバイスＡから第２のバッファへデータをＤＭＡ転送（第１のＤＭＡ転送）することができる。このように、２つのバッファを切り替えながらＤＭＡ転送を行うことができるので、デバイスＡからデバイスＢへのデータ転送を効率的に実行することが可能になる。
【００６９】
また、本実施形態では、複数のバッファとして第１および第２のバッファを設ける構成について説明したが、設定するバッファの数やサイズは仕様に応じて適宜これを設定することが可能であり、たとえばバッファを３つ設ける構成としてもよい。また、本実施形態では、複数のＤＭＡ転送として第１のＤＭＡ転送および第２のＤＭＡ転送を用いる場合について説明したが、本発明はこれに限られず、３つのチャネルを利用して第１から第３のＤＭＡ転送を行う構成とすることも可能である。
【００７０】
（その他の実施形態）
本発明は上記各実施形態に限定されることなく、種々に変形して適用することが可能である。当業者は、ここに開示された内容に基づいて、本発明の範囲から外れることなしに適宜変更または改良を行うことが可能である。また、このような変更あるいは改良も本発明に含まれる。
【００７１】
例えば、上記実施形態では、転送元デバイスと転送先デバイスのポート幅がそれぞれ異なるため転送用バッファを介してＤＭＡ転送を行う構成としたが、転送元デバイスと転送先デバイスのポート幅が同一か否かを判断する手段を新たにもうけ、転送元デバイスと転送先デバイスのポート幅が同一でないと判断した場合に、転送用バッファを介してＤＭＡ転送を行うように制御してもよい。
【００７２】
これによれば、転送元デバイスと転送先デバイスのポート幅が同一である場合には、転送元デバイスから転送先デバイスへのＤＭＡ転送を行なうとともに、転送元デバイスと転送先デバイスのポート幅が同一でない場合には、転送用バッファを介して転送元デバイスから転送先デバイスへのＤＭＡ転送を行なうようにデータ転送を制御することができるようになるので、各デバイスのポート幅に応じたＤＭＡ転送を実現することができるようになる。
【図面の簡単な説明】
【００７３】
【図１】データ転送装置１００のハードウェア構成を示すブロック図である。
【図２】デバイスドライバ手段の機能構成図を示すブロック図である。
【図３】データ転送の処理を説明するフローチャートである。
【図４】データがＤＭＡ転送される様子を説明するための図である。
【図５】第２の実施形態にかかるデータ転送を示すフローチャートである。
【図６】第２の実施形態にかかるデータ転送を示すフローチャートである。
【図７】第２の実施形態にかかるデータ転送を示すフローチャートである。
【符号の説明】
【００７４】
１  転送元デバイス、  ２  転送先デバイス、  3  ＣＰＵ、  4  ＲＡＭ(転送用バッファ)、  ５  ＤＭＡコントローラ、  ６  ＲＯＭ、  １００  データ転送装置、
【図１】
2005128753.tif 000003
【図２】
2005128753.tif 000004
【図３】
2005128753.tif 000005
【図４】
2005128753.tif 000006
【図５】
2005128753.tif 000007
【図６】
2005128753.tif 000008
【図７】
2005128753.tif 000009