(57)【特許請求の範囲】
【請求項１】
データ転送コントローラから入力されるデータを偶数個のデータブロックの単位で入力順に保持するデータバッファと、
受信装置に転送するデータブロックの数が設定される第１のレジスタと、
前記第１のレジスタに設定された前記受信装置に転送するデータブロックの数に基づいて、前記受信装置に転送するデータブロックの数が奇数のときにセットされ、前記受信装置に転送するデータブロックの数が偶数のときにリセットされる奇数フラグと、
前記データバッファにデータブロックが保持されているときにセットされ、前記データバッファにデータブロックが保持されていないときにリセットされるデータフラグと、
前記データバッファに保持された偶数個のデータブロックの単位で複数回の転送サイクルに分けて前記データ転送コントローラから入力されたデータを前記受信装置に転送し、前記奇数フラグがセットされているときに、前記複数回の転送サイクルのうちの最後の転送サイクルで１個のデータブロックを前記受信装置に転送する制御部と
を備え、
前記制御部は、前記奇数フラグがセットされ、前記データフラグがリセットされているときに、前記第１のレジスタに設定された数より１つ多い数を前記データ転送コントローラの第２のレジスタに設定し、前記奇数フラグがセットされ、前記データフラグがセットされているときに、前記第１のレジスタに設定された数より１つ少ない数を前記データ転送コントローラの前記第２のレジスタに設定すること
を特徴とするデータ転送装置。
【請求項２】
前記制御部は、前記最後の転送サイクル後にデータブロックが前記データバッファに残っているときに、前記データフラグをセットし、前記最後の転送サイクル後に前記データバッファが空のときに、前記データフラグをリセットすること
を特徴とする請求項１記載のデータ転送装置。
【請求項３】
前記制御部は、前記データフラグがセットされているときに、前記データバッファに残っているデータブロックと、前記データ転送コントローラからの偶数個のデータブロックの少なくとも１つとにより形成される偶数個のデータブロックを、前記受信装置へのデータの転送サイクル毎に前記受信装置に転送すること
を特徴とする請求項１または請求項２記載のデータ転送装置。
【請求項４】
前記制御部は、転送要求が発行される毎に、前記複数回の転送サイクルを実行し、前記転送要求が発行されたときに前記データフラグがセットされている場合、前回の転送要求に基づいて前記データ転送コントローラから前記データバッファに入力されたデータブロックのうち、前記受信装置に転送されずに残っているデータブロックを、今回の転送要求に基づく前記複数回の転送サイクルのうち最初の転送サイクルで前記受信装置に転送すること
を特徴とする請求項１ないし請求項３のいずれか１項記載のデータ転送装置。
【請求項５】
データ転送コントローラから入力されるデータを偶数個のデータブロックの単位でデータバッファに入力順に保持し、
受信装置に転送するデータブロックの数を第１のレジスタに設定し、
前記第１のレジスタに設定された前記受信装置に転送するデータブロックの数に基づいて、前記受信装置に転送するデータブロックの数が奇数のときに奇数フラグをセットし、
前記第１のレジスタに設定された前記受信装置に転送するデータブロックの数に基づいて、前記受信装置に転送するデータブロックの数が偶数のときに前記奇数フラグをリセットし、
前記データバッファにデータブロックが保持されているときにデータフラグをセットし、
前記データバッファにデータブロックが保持されていないときに前記データフラグをリセットし、
前記データバッファに保持された偶数個のデータブロックの単位で複数回の転送サイクルに分けて前記データ転送コントローラから入力されたデータを前記受信装置に転送し、前記奇数フラグがセットされているときに、前記複数回の転送サイクルのうちの最後の転送サイクルで１個のデータブロックを前記受信装置に転送し、
前記奇数フラグがセットされ、前記データフラグがリセットされているときに、前記第１のレジスタに設定された数より１つ多い数を前記データ転送コントローラの第２のレジスタに設定し、
前記奇数フラグがセットされ、前記データフラグがセットされているときに、前記第１のレジスタに設定された数より１つ少ない数を前記データ転送コントローラの前記第２のレジスタに設定すること
を特徴とするデータ転送方法。
【請求項６】
前記最後の転送サイクル後にデータブロックが前記データバッファに残っているときに、前記データフラグをセットし、前記最後の転送サイクル後に前記データバッファが空のときに、前記データフラグをリセットすること
を特徴とする請求項５記載のデータ転送方法。
【請求項７】
前記データフラグがセットされているときに、前記データバッファに残っているデータブロックと、前記データ転送コントローラからの偶数個のデータブロックの少なくとも１つとにより形成される偶数個のデータブロックを、前記受信装置へのデータの転送サイクル毎に前記受信装置に転送すること
を特徴とする請求項５または請求項６記載のデータ転送方法。
【請求項８】
転送要求が発行される毎に、前記複数回の転送サイクルを実行し、前記転送要求が発行されたときに前記データフラグがセットされている場合、前回の転送要求に基づいて前記データ転送コントローラから前記データバッファに入力されたデータブロックのうち、前記受信装置に転送されずに残っているデータブロックを、今回の転送要求に基づく前記複数回の転送サイクルのうち最初の転送サイクルで前記受信装置に転送すること
を特徴とする請求項５ないし請求項７のいずれか１項記載のデータ転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ転送装置およびデータ転送方法に関する。
【背景技術】
【０００２】
ＤＭＡＣ（Direct Memory Access Controller）を用いて、奇数バイトのデータを効率よく転送するために、最後の２バイトのデータのうち１バイトのみを転送先に出力する手法が提案されている（例えば、特許文献１−３参照。）。この種の奇数バイトのデータ転送に用いられるＤＭＡＣは、転送要求に応じて偶数または奇数のデータをデータバッファに転送する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−３３４６００号公報
【特許文献２】特開平７−３３４４５４号公報
【特許文献３】特開２００３−２８１０７４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、偶数バイトのデータのみ転送可能なＤＭＡＣを用いて、奇数バイトのデータを転送する手法は開示されていない。特に、偶数バイトのデータのみ転送可能なＤＭＡＣから有効なデータのみが転送されるデータ転送装置において、奇数バイトのデータを転送する手法は開示されていない。
【課題を解決するための手段】
【０００５】
本発明の一形態では、データ転送装置は、偶数個のデータブロック単位でデータを転送するデータ転送コントローラからのデータを受信装置に転送するデータ転送装置であって、データ転送コントローラからの偶数個のデータブロックを順に保持するデータバッファと、受信装置に転送するデータブロックの数が奇数か偶数かを示す奇数フラグと、受信装置へのデータの転送サイクル毎に、偶数個のデータブロックを受信装置に転送し、奇数フラグがセットされているときに、最後の転送サイクルで１つのデータブロックを受信装置に転送する制御部とを含んでいる。
【発明の効果】
【０００６】
奇数フラグを利用することで、偶数個のデータブロックを転送単位とするデータ転送コントローラを用いるときにも、偶数個のデータブロックだけでなく、奇数個のデータブロックを受信装置に転送できる。
【図面の簡単な説明】
【０００７】
【図１】一実施形態におけるデータ転送装置の例を示している。
【図２】別の実施形態におけるデータ転送装置の例を示している。
【図３】図２に示したデータ転送装置を有するシステムの例を示している。
【図４】図２に示したデータ転送装置の動作の例を示している。
【図５】図４に示したフローにより転送されるデータの例を示している。
【図６】図４に示したフローにより転送されるデータの別の例を示している。
【図７】図４に示したフローにより転送されるデータの別の例を示している。
【図８】図４に示したフローにより転送されるデータの別の例を示している。
【発明を実施するための形態】
【０００８】
以下、実施形態を、図面を用いて説明する。
【０００９】
図１は、一実施形態におけるデータ転送装置ＤＴの例を示している。データ転送装置ＤＴは、偶数個のデータブロックＤ１−Ｄ２（またはＤ３−Ｄ４）を１つの転送単位として転送するデータ転送コントローラＤＭＡＣからのデータを受け、受けたデータを受信装置ＲＣＶに転送する。なお、データ転送コントローラはＤＭＡＣに限定されず、ＣＰＵ（Central Processing Unit）等の他のコントローラでもよい。
【００１０】
データ転送装置ＤＴは、制御部ＣＮＴＬ、データバッファＢＵＦおよび奇数フラグＯＤＤＦＬＧを有している。データ転送装置ＤＴは、ハードウエアにより実現されるが、その一部はソフトウエアを用いて実現されてもよい。
【００１１】
データバッファＢＵＦは、データ転送コントローラＤＭＡＣから出力される偶数個のデータブロックＤ１−Ｄ２、...、Ｄ３−Ｄ４を順に受けて保持し、保持しているデータブロックＤ１−Ｄ２、...、Ｄ３−Ｄ４を受けた順に受信装置ＲＣＶに出力する。例えば、各データブロックＤ１−Ｄ４は、１バイトデータである。なお、各データブロックＤ１−Ｄ４は、２バイトデータや４バイトデータであってもよい。奇数フラグＯＤＤＦＬＧは、受信装置ＲＣＶに転送するデータブロックの数が奇数か偶数かを示す。
【００１２】
制御部ＣＮＴＬは、受信装置ＲＣＶへのデータの転送サイクルのうち、最後の転送サイクルを除く転送サイクル毎に、偶数個のデータブロック（例えば、Ｄ１−Ｄ２）を受信装置ＲＣＶに転送する。制御部ＣＮＴＬは、奇数フラグＯＤＤＦＬＧがセットされているときに、最後の転送サイクルで１つのデータブロックＤ３を受信装置ＲＣＶに転送する（図１（ａ））。このとき、残りのデータブロックＤ４は、データバッファＢＵＦに保持され、次の転送要求に応答して受信装置ＲＣＶに転送される。一方、制御部ＣＮＴＬは、奇数フラグＯＤＤＦＬＧがリセットされているときに、最後の転送サイクルで偶数個のデータブロックを受信装置ＲＣＶに転送する（図１（ｂ））。
【００１３】
このように、奇数フラグＯＤＤＦＬＧを利用することで、偶数個のデータブロックを転送単位とするデータ転送コントローラＤＭＡＣを用いるときにも、偶数個のデータブロックだけでなく、奇数個のデータブロックを受信装置ＲＣＶに転送できる。特に、奇数個のデータブロックの転送において、ダミーデータ等のデータブロック列に含まれないデータが、受信装置ＲＣＶに転送されることを防止できる。この結果、連続するデータブロックのみを受信装置ＲＣＶへ転送でき、転送効率を向上できる。さらに、ダミーデータの切り捨て処理等が不要になるため、受信装置ＲＣＶの受信処理を簡易にできる。
【００１４】
また、データ転送装置ＤＴをハードウエアにより実現することで、ソフトウエアを介在させることなく、効率的に奇数個のデータブロックを受信装置ＲＣＶにデータを転送できる。
【００１５】
図２は、別の実施形態におけるデータ転送装置ＤＴの例を示している。上述した実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。この実施形態では、データ転送装置ＤＴは、制御部ＣＮＴＬ、データバッファＢＵＦ、奇数フラグＯＤＤＦＬＧ、データフラグＤＴＦＬＧ、エンディアンレジスタＥＮＤＲＥＧ、カウンタＣＮＴおよび転送要求数レジスタＲＥＱＮＵＭを有している。
【００１６】
制御部ＣＮＴＬは、データバッファＢＵＦ、奇数フラグＯＤＤＦＬＧ、データフラグＤＴＦＬＧ、エンディアンレジスタＥＮＤＲＥＧおよびカウンタＣＮＴを制御し、図４に示すフローを実現するために動作する。例えば、制御部ＣＮＴＬは、図５等に示すように、転送要求ＤＲＥＱに応答して実施される複数の転送サイクル毎に、偶数個のデータブロックを受信装置ＲＣＶに転送する。但し、奇数フラグＯＤＤＦＬＧが”１”にセットされているときに、制御部ＣＮＴＬは、最後の転送サイクルで１つのデータブロックを受信装置ＲＣＶに転送する。
【００１７】
データバッファＢＵＦは、データ転送コントローラＤＭＡＣから出力される２バイト単位のデータを順に保持し、保持しているデータを２バイト単位または１バイト単位で受信装置ＲＣＶに出力する。そして、データ転送コントローラＤＭＡＣは、偶数個のデータブロック単位（すなわち、２バイト単位）でデータを転送する。
【００１８】
奇数フラグＯＤＤＦＬＧは、受信装置ＲＣＶに転送するバイト数が奇数のときに”１”にセットされ、受信装置ＲＣＶに転送するバイト数が偶数のときに”０”にリセットされる。データフラグＤＴＦＬＧは、受信装置ＲＣＶへのデータの転送後にデータバッファＢＵＦにデータが残っているときに”１”にセットされ、受信装置ＲＣＶへのデータの転送後にデータバッファＢＵＦにデータが残っていないときに”０”にリセットされる。
【００１９】
エンディアンレジスタＥＮＤＲＥＧは、バイトデータの格納順を示すエンディアンを保持する。具体的には、エンディアンレジスタＥＮＤＲＥＧは、リトルエンディアンまたはビッグエンディアンを示す情報が設定される。カウンタＣＮＴは、転送要求ＤＲＥＱ毎にリセットされ、受信装置ＲＣＶに転送されたデータブロック数（この例ではバイト数）をカウントする。転送要求数レジスタＲＥＱＮＵＭは、受信装置ＲＣＶに転送されるデータ数を転送要求毎に保持する。例えば、転送要求数レジスタＲＥＱＮＵＭは、図３に示すＣＰＵにより設定される。
【００２０】
データ転送コントローラＤＭＡＣは、ＣＰＵ等からのデータ転送要求（図５のＤＲＥＱ）に応じてバスマスタとして動作し、転送元からデータを受け、受けたデータをデータ転送装置ＤＴを介して受信装置ＲＣＶに転送する。データ転送コントローラＤＭＡＣの転送要求数レジスタＲＥＱＮＵＭｂは、データ転送装置ＤＴの制御部ＣＮＴＬにより設定される。
【００２１】
この例では、データ転送コントローラＤＭＡＣは、データを２バイト単位で転送可能である。換言すれば、データ転送コントローラＤＭＡＣは、データの最小転送単位である１バイトを１つのデータブロックとするときに、偶数のデータブロック（偶数バイトのデータ）のみ転送可能である。なお、データ転送コントローラＤＭＡＣは、データを４バイト単位で転送してもよい。以下の説明では、データ転送コントローラＤＭＡＣを、単にＤＭＡＣと称する。
【００２２】
受信装置ＲＣＶは、図３に示す通信ユニットＣＯＭにデータを出力するために、ＤＭＡＣを介して転送されるデータを一時的に保持する。受信装置ＲＣＶは、データ転送装置ＤＴと同じ転送要求数レジスタＲＥＱＮＵＭを有している。例えば、データ転送装置ＤＴの転送要求数レジスタＲＥＱＮＵＭおよび受信装置ＲＣＶの転送要求数レジスタＲＥＱＮＵＭは、同じアドレス空間に割り当てられており、常に同じ値が設定される。
【００２３】
図３は、図２に示したデータ転送装置ＤＴを有するシステムＳＹＳの例を示している。例えば、システムＳＹＳは、パーソナルコンピュータや携帯電話などである。システムＳＹＳは、ＣＰＵ、システムバスＢＵＳ、メモリユニットＭＥＭ、表示ユニットＤＩＳＰ、出力ユニットＯＵＴ、入力ユニットＩＮ、データ転送装置ＤＴ、ＤＭＡＣ、受信装置ＲＣＶ、通信ユニットＣＯＭ、ドライバＤＲＶおよび記憶媒体ＭＭを有している。
【００２４】
ＣＰＵは、プログラムを実行することで、システムＳＹＳ全体の動作を制御する。メモリユニットＭＥＭは、ＤＲＡＭやＳＲＡＭを有している。例えば、ＣＰＵが実行するプログラムは、ＤＲＡＭに格納されている。
【００２５】
表示ユニットＤＩＳＰは、液晶ディスプレイなどである。出力ユニットＯＵＴは、スピーカーなどである。入力ユニットＩＮは、キーボードやタッチパネルなどである。通信ユニットＣＯＭは、ＵＳＢ（Universal Serial Bus）インターフェースなどである。記憶媒体ＭＭは、ハードディスクやメモリカードなどである。ドライバＤＲＶは、記憶媒体ＭＭにアクセスするためにシステムバスＢＵＳに接続される。
【００２６】
例えば、ＤＭＡＣは、データ転送装置ＤＴを介してメモリユニットＭＥＭから画像データを読み出し（図３（ａ））、読み出した画像データをデータ転送装置ＤＴおよび受信装置ＲＣＶを介して通信ユニットＣＯＭに転送する（図３（ｂ））。
【００２７】
図４は、図２に示したデータ転送装置ＤＴの動作の例を示している。図４に示したフローは、ＣＰＵからのデータ転送要求に基づいて、データ転送装置ＤＴの制御部ＣＮＴＬ（ハードウエア）により実施される。なお、図４に示したフローの一部は、ソフトウエアにより実施されてもよい。ＣＰＵからのデータ転送要求に基づくＤＭＡＣの転送動作は、図４に示したフローと並行して実施される。
【００２８】
ＣＰＵは、データ転送要求を発行するときに、データ転送装置ＤＴの転送要求数レジスタＲＥＱＮＵＭおよび受信装置ＲＣＶの転送要求数レジスタＲＥＱＮＵＭに転送バイト数を設定する。以降の説明では、転送要求数レジスタＲＥＱＮＵＭに設定された転送バイト数を”ＲＥＱＮＵＭ”で示す。また、データ転送装置ＤＴは、データ転送を開始する前に、奇数フラグＯＤＤＦＬＧを”０”にリセットし、カウンタＣＮＴを”０”にリセットする。データフラグＤＴＦＬＧは、初期状態では”０”にリセットされているが、その後は、前回の転送後の状態を保持する。
【００２９】
まず、ステップＳ１０において、データ転送装置ＤＴは、転送要求数レジスタＲＥＱＮＵＭに設定された値が奇数ＯＤＤか否かを判定する。転送要求数レジスタＲＥＱＮＵＭが奇数ＯＤＤのとき処理はステップＳ１２に移行する。転送要求数レジスタＲＥＱＮＵＭが奇数ＯＤＤでないとき（すなわち偶数）、処理はステップＳ２０に移行する。
【００３０】
ステップＳ１２において、データ転送装置ＤＴは、奇数フラグＯＤＤＦＬＧを”１”にセットする。次に、ステップＳ１４において、データ転送装置ＤＴは、データフラグＤＴＦＬＧが”１”にセットされているか否かを判定する。データフラグＤＴＦＬＧが”１”にセットされているとき、すなわち、受信装置ＲＣＶに転送されていないデータがデータバッファＢＵＦに残っているとき、処理はステップＳ１６に移行する。データフラグＤＴＦＬＧが”０”にリセットされているとき、すなわち、データバッファＢＵＦが空のとき、処理はステップＳ１８に移行する。
【００３１】
ステップＳ１６では、データ転送装置ＤＴは、転送要求数レジスタＲＥＱＮＵＭに格納された値から”１”を引いた値を、ＤＭＡＣの転送要求数レジスタＲＥＱＮＵＭｂに設定する。ステップＳ１８では、データ転送装置ＤＴは、転送要求数レジスタＲＥＱＮＵＭに格納された値に”１”を加えた値を、ＤＭＡＣの転送要求数レジスタＲＥＱＮＵＭｂに設定する。ステップＳ２０では、データ転送装置ＤＴは、転送要求数レジスタＲＥＱＮＵＭに格納された値を、ＤＭＡＣの転送要求数レジスタＲＥＱＮＵＭｂに設定する。この後、処理はステップＳ２２に移行する。
【００３２】
ステップＳ２２において、データ転送装置ＤＴは、ＤＭＡＣから転送されデータバッファＢＵＦに保持されているデータのうち、最も古い２バイトのデータを受信装置ＲＣＶに転送する。そして、データ転送装置ＤＴは、カウンタ値ＣＮＴに”２”を加える。次に、ステップＳ２４において、データ転送装置ＤＴは、転送要求数レジスタＲＥＱＮＵＭの値からカウンタ値ＣＮＴを引いた値（すなわち、残りの転送バイト数）が”２”より少ないか否かを判定する。残りの転送バイト数が”２”以上のとき、２バイト転送をさらに実施するために、処理はステップＳ２２に戻る。残りの転送バイト数が”２”より少ないとき、すなわち、”１”または”０”のとき、処理はステップＳ２６に移行する。
【００３３】
ステップＳ２６において、データ転送装置ＤＴは、奇数フラグＯＤＤＦＬＧが”１”にセットされているか否かを判定する。奇数フラグＯＤＤＦＬＧが”１”にセットされているとき、データ転送装置ＤＴは、データバッファＢＵＦに最後に転送すべき１バイトのデータが残っていると判断し、処理をステップＳ２８に移行する。奇数フラグＯＤＤＦＬＧが”０”にリセットされているとき、データ転送装置ＤＴは、データバッファＢＵＦに転送すべきデータが残っていないと判断し、処理をステップＳ３６に移行する。
【００３４】
ステップＳ２８において、データ転送装置ＤＴは、データバッファＢＵＦに保持されている１バイトのデータを受信装置ＲＣＶに転送し、カウンタ値ＣＮＴに”１”を加える。次に、ステップＳ３０において、データ転送装置ＤＴは、奇数フラグＯＤＤＦＬＧを”０”にリセットする。
【００３５】
次に、ステップＳ３２において、データ転送装置ＤＴは、データフラグＤＴＦＬＧが”１”にセットされているか否かを判定する。データフラグＤＴＦＬＧが”１”にセットされているとき、データ転送装置ＤＴは、データバッファＢＵＦに残っていた１バイトデータがステップＳ２８により受信装置ＲＣＶに転送されたと判断し、処理をステップＳ３４に移行する。一方、データフラグＤＴＦＬＧが”０”にリセットされているとき、データ転送装置ＤＴは、ステップＳ２８の１バイト転送により、２バイトデータのうちの１バイトデータがデータバッファＢＵＦに残されたと判断し、処理をステップＳ３８に移行する。ステップＳ３４において、ステップＳ２８の１バイト転送によりデータバッファＢＵＦが空になったため、データ転送装置ＤＴは、データフラグＤＴＦＬＧを”０”にリセットし、転送処理を終了する。
【００３６】
一方、ステップＳ３６において、データフラグＤＴＦＬＧが”１”にセットされているとき、データ転送装置ＤＴは、偶数バイトの転送後、受信装置ＲＣＶに転送されていないデータがデータバッファＢＵＦに残っていると判断し、処理をステップＳ３８に移行する。データフラグＤＴＦＬＧが”０”にリセットされているとき、データ転送装置ＤＴは、偶数バイトの転送後、データバッファＢＵＦが空になっていると判断し、転送処理を終了する。
【００３７】
ステップＳ３８において、受信装置ＲＣＶに転送していない１バイトデータがデータバッファＢＵＦに残っているため、データ転送装置ＤＴは、データフラグＤＴＦＬＧを”１”に設定する。そして、転送処理が終了する。
【００３８】
図５は、図４に示したフローにより転送されるデータの例を示している。図５において、ＤＭＡＣ、データ転送装置ＤＴおよび受信装置ＲＣＶに示した矩形枠は、データが一時的に保持されるバッファやレジスタを示している。矩形枠内の各Ｄ１−Ｄ１０は転送されるバイトデータ（すなわち、データブロック）を示し、数字は転送されるデータの順序を示している。図５は、説明を簡単にするために、ＤＭＡの転送要求ＤＲＥＱがＣＰＵによって２回発行され、受信装置ＲＣＶへの５バイト（奇数）のデータ転送が２回実施される例を示している。状態ＳＴ１−ＳＴ１０の各々は、ＤＭＡＣ、データ転送装置ＤＴおよび受信装置ＲＣＶの少なくともいずれかの転送サイクルを示している。
【００３９】
最初の転送要求ＤＲＥＱが発行されたとき、図４に示したステップＳ１０、Ｓ１２により、奇数フラグＯＤＤＦＬＧは、奇数データの転送を示す”１”にセットされる。最初のデータが転送される前、カウンタ値ＣＮＴは”０”にリセットされる。初期状態において、データ転送装置ＤＴのデータバッファＢＵＦは空であるため、データフラグＤＴＦＬＧは”０”にリセットされている。このため、図４に示したステップＳ１８により、データ転送装置ＤＴは、ＤＭＡＣによる転送バイト数（ＲＥＱＮＵＭｂ）を、要求された転送バイト数”５”に”１”を加えた”６”に設定する。
【００４０】
まず、状態ＳＴ１において、ＤＭＡＣは、メモリユニットＭＥＭ等から読み出した最初の２バイトデータＤ１−Ｄ２をデータ転送装置ＤＴに出力する。次に、状態ＳＴ２において、ＤＭＡＣは、メモリユニットＭＥＭ等から読み出した次の２バイトデータＤ３−Ｄ４をデータ転送装置ＤＴに出力する。データ転送装置ＤＴは、ＤＭＡＣからのデータＤ１−Ｄ２をデータバッファＢＵＦに書き込み、このデータＤ１−Ｄ２を受信装置ＲＣＶに出力する。
【００４１】
次に、状態ＳＴ３において、ＤＭＡＣは、メモリユニットＭＥＭ等から読み出した２バイトデータＤ５−Ｄ６をデータ転送装置ＤＴに出力する。データ転送装置ＤＴは、ＤＭＡＣからのデータＤ３−Ｄ４をデータバッファＢＵＦに書き込み、このデータＤ３−Ｄ４を受信装置ＲＣＶに出力する。受信装置ＲＣＶは、データ転送装置ＤＴからのデータＤ１−Ｄ２をレジスタ等に一時的に保持する。データ転送装置ＤＴは、データＤ１−Ｄ２の転送完了に応答して、図４に示したステップＳ２２によりカウンタ値ＣＮＴを”２”に変更する。
【００４２】
状態ＳＴ４において、データ転送装置ＤＴは、ＤＭＡＣからのデータＤ５−Ｄ６をデータバッファＢＵＦに書き込み、このデータＤ５−Ｄ６を受信装置ＲＣＶに出力する。受信装置ＲＣＶは、データ転送装置ＤＴからのデータＤ３−Ｄ４をレジスタ等に一時的に保持する。データ転送装置ＤＴは、データＤ３−Ｄ４の転送完了に応答して、カウンタ値ＣＮＴを”４”に変更する。これにより、残りの転送バイト数は”１”になるため、図４に示した処理は、ステップＳ２４、Ｓ２６を経てステップＳ２８に移行する。
【００４３】
状態ＳＴ５では、データ転送装置ＤＴは、ステップＳ２８による１バイト転送を実施し、カウンタ値ＣＮＴを”５”に変更する。データ転送装置ＤＴは、図４に示したステップＳ３０により、５バイトのデータ転送の完了に応答して奇数フラグＯＤＤＦＬＧを”０”にリセットする。データフラグＤＴＦＬＧが”０”のため、図４に示した処理はステップＳ３８に移行する。５バイトのデータ転送が完了された後、受信装置ＲＣＶに転送していない１バイトのデータＤ６がデータバッファＢＵＦに残っているため、データ転送装置ＤＴは、データフラグＤＴＦＬＧを”１”にセットする。
【００４４】
この後、次の転送要求ＤＲＥＱが発行されると、データ転送装置ＤＴは、カウンタ値ＣＮＴを”０”にリセットし、ステップＳ１２により、奇数フラグＯＤＤＦＬＧを再び”１”にセットする。１バイトのデータＤ６がデータバッファＢＵＦに残っているため、処理はステップＳ１６に移行する。データ転送装置ＤＴは、ＤＭＡＣによる転送バイト数（ＲＥＱＮＵＭｂ）を、転送バイト数”５”から”１”を引いた”４”に設定する。
【００４５】
状態ＳＴ６において、状態ＳＴ１と同様に、ＤＭＡＣからデータ転送装置ＤＴに２バイトデータＤ７−Ｄ８が出力される。次に、状態ＳＴ７において、ＤＭＡＣは、次のデータＤ９−Ｄ１０をデータ転送装置ＤＴに出力し、４バイトのデータ転送を完了する。データ転送装置ＤＴは、既に保持しているデータＤ６とＤＭＡＣからの新たなデータＤ７−Ｄ８のうちの一部であるデータＤ７とを合わせて２バイトデータを生成し、受信装置ＲＣＶに出力する。
【００４６】
次に、状態ＳＴ８において、データ転送装置ＤＴは、既に保持しているデータＤ８とＤＭＡＣからのデータＤ９とを合わせて２バイトデータを生成し、受信装置ＲＣＶに出力する。受信装置ＲＣＶは、データ転送装置ＤＴからのデータＤ６−Ｄ７をレジスタ等に一時的に保持する。データ転送装置ＤＴは、データＤ６−Ｄ７の転送完了に応答して、カウンタ値ＣＮＴを”２”に変更する。
【００４７】
状態ＳＴ９において、データ転送装置ＤＴは、最後のバイトデータＤ１０を受信装置ＲＣＶに出力する。受信装置ＲＣＶは、データ転送装置ＤＴからのデータＤ８−Ｄ９をレジスタ等に保持する。データ転送装置ＤＴは、データＤ８−Ｄ９の転送完了に応答して、カウンタ値ＣＮＴを”４”に変更する。これにより、残りの転送バイト数は”１”になるため、図４に示した処理は、ステップＳ２４、Ｓ２６を経てステップＳ２８に移行する。
【００４８】
状態ＳＴ１０では、データ転送装置ＤＴは、ステップＳ２８による１バイト転送を実施し、カウンタ値ＣＮＴを”５”に変更する。データ転送装置ＤＴは、ステップＳ３０により、５バイトのデータ転送の完了に応答して奇数フラグＯＤＤＦＬＧを”０”にリセットする。データフラグＤＴＦＬＧが”１”のため、図４に示した処理はステップＳ３４に移行し、データ転送装置ＤＴは、データフラグＤＴＦＬＧを、データバッファＢＵＦにデータが残っていないことを示す”０”にリセットする。そして、２回の転送要求ＤＲＥＱに伴う１０バイトのデータ転送が完了する。
【００４９】
このように、ＤＭＡＣによる転送が偶数バイトに限定されるときにも、奇数フラグＯＤＤＦＬＧとデータフラグＤＴＦＬＧにより、データバッファＢＵＦに保持されているデータを認識し、転送動作を制御することで、受信装置ＲＣＶに奇数バイトのデータを転送できる。
【００５０】
図６は、図４に示したフローにより転送されるデータの別の例を示している。図５と同じ動作については、詳細な説明は省略する。この例では、５バイト（奇数バイト）の転送後に、６バイト（偶数バイト）の転送が実施される。状態ＳＴ１−ＳＴ５の動作は、図５の状態ＳＴ１−ＳＴ５と同じである。
【００５１】
ＣＰＵは、２回目の転送要求ＤＲＥＱを発行するとき、データ転送装置ＤＴおよび受信装置ＲＣＶの転送要求数レジスタＲＥＱＮＵＭに転送バイト数（＝６）を設定する。データ転送装置ＤＴは、カウンタ値ＣＮＴを”０”にリセットし、転送バイト数が偶数のため、奇数フラグＯＤＤＦＬＧを”０”にリセットする。転送バイト数が偶数のため、図４に示した処理は、ステップＳ１０を経てステップＳ２０に移行する。そして、データ転送装置ＤＴは、転送要求数レジスタＲＥＱＮＵＭに保持している転送バイト数（＝６）を、ＤＭＡＣの転送要求数レジスタに設定する。
【００５２】
状態ＳＴ６−ＳＴ７の動作は、奇数フラグＯＤＤＦＬＧの値が異なることを除き、図５の状態ＳＴ６−ＳＴ７と同じである。状態ＳＴ８において、ＤＭＡＣは、次のデータＤ１１−Ｄ１２をデータ転送装置ＤＴに出力し、６バイトのデータ転送を完了する。データ転送装置ＤＴは、既に保持しているデータＤ８−Ｄ９を受信装置ＲＣＶに出力する。受信装置ＲＣＶは、データ転送装置ＤＴからのデータＤ６−Ｄ７をレジスタ等に一時的に保持する。データ転送装置ＤＴは、データＤ６−Ｄ７の転送完了に応答して、カウンタ値ＣＮＴを”２”に変更する。
【００５３】
次に、状態ＳＴ９において、データ転送装置ＤＴは、データＤ８−Ｄ９を受信装置ＲＣＶに出力する。受信装置ＲＣＶは、データ転送装置ＤＴからのデータＤ８−Ｄ９をレジスタ等に一時的に保持する。データ転送装置ＤＴは、データＤ８−Ｄ９の転送完了に応答して、カウンタ値ＣＮＴを”４”に変更する。
【００５４】
状態ＳＴ１０において、受信装置ＲＣＶは、データ転送装置ＤＴからのデータＤ１０−Ｄ１１をレジスタ等に一時的に保持する。データ転送装置ＤＴは、データＤ１０−Ｄ１１の転送完了に応答して、カウンタ値ＣＮＴを”６”に変更する。これにより、残りの転送バイト数は”０”になる。奇数フラグＯＤＤＦＬＧは”０”を保持し、データフラグＤＴＦＬＧは”１”を保持しているため、図４に示した処理は、ステップＳ２４、Ｓ２６、Ｓ３６を経てステップＳ３８に移行する。６バイトのデータ転送が完了した後、受信装置ＲＣＶに転送していない１バイトのデータＤ１２がデータバッファＢＵＦに残っている。このため、データ転送装置ＤＴは、データフラグＤＴＦＬＧを”１”にセットする。そして、２回の転送要求ＤＲＥＱに伴う１１バイトのデータ転送が完了する。
【００５５】
このように、ＤＭＡＣによる転送が偶数バイトに限定され、かつ偶数バイトと奇数バイトとを混在して受信装置ＲＣＶにデータを転送するときにも、奇数フラグＯＤＤＦＬＧとデータフラグＤＴＦＬＧにより転送動作を制御することで、受信装置ＲＣＶに確実にデータを転送できる。
【００５６】
図７は、図４に示したフローにより転送されるデータの別の例を示している。図５および図６と同じ動作については、詳細な説明は省略する。この例では、６バイト（偶数バイト）の転送後に、５バイト（奇数バイト）の転送が実施される。状態ＳＴ１−ＳＴ４の動作は、奇数フラグＯＤＤＦＬＧが”０”であることを除き、図５の状態ＳＴ１−ＳＴ４の動作と同じである。
【００５７】
状態ＳＴ５において、受信装置ＲＣＶは、データ転送装置ＤＴからのデータＤ５−Ｄ６をレジスタ等に一時的に保持する。データ転送装置ＤＴは、データＤ５−Ｄ６の転送完了に応答して、カウンタ値ＣＮＴを”６”に変更する。これにより、残りの転送バイト数は”０”になる。奇数フラグＯＤＤＦＬＧは”０”を保持し、データフラグＤＴＦＬＧは”０”を保持している。このため、図４に示した処理は、ステップＳ２４、Ｓ２６、Ｓ３６を経て終了する。２回目の転送要求ＤＲＥＱに対応する状態ＳＴ６−ＳＴ１０は、転送されるデータが異なることを除き、図５に示した状態ＳＴ１−ＳＴ５と同じである。
【００５８】
図８は、図４に示したフローにより転送されるデータの別の例を示している。図５および図６と同じ動作については、詳細な説明は省略する。この例では、６バイト（偶数バイト）の転送が２回実施される。状態ＳＴ１−ＳＴ５の動作および状態ＳＴ６−Ｓ１０の動作は、図７の状態ＳＴ１−ＳＴ５の動作とそれぞれ同じである。
【００５９】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。さらに、データ転送後にデータがデータバッファＢＵＦに残っているか否かを示すデータフラグＤＴＦＬＧを用いることで、データバッファＢＵＦに保持されているバイトデータとＤＭＡＣから新たに転送されるバイトデータとを合わせた２バイトデータを受信装置ＲＣＶに転送できる。また、データフラグＤＴＦＬＧを用いることで、ＤＭＡＣからバッファ回路ＢＵＦに転送されるバイトデータの数を最適に調整できる。すなわち、ＤＭＡＣの転送要求数レジスタＲＥＱＮＵＭｂに設定する値を最適に調整できる。以上より、偶数のバイトデータを転送単位とするＤＭＡＣを用いるときにも、常に最小限のデータをバッファ回路ＢＵＦに保持でき、受信装置ＲＣＶへの奇数バイトのデータ転送を確実に実施できる。
【００６０】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずであり、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【００６１】
ＢＵＦ‥データバッファ；ＢＵＳ‥システムバス；ＣＮＴ‥カウンタ；ＣＯＭ‥通信ユニット；ＤＩＳＰ‥表示ユニット；ＤＲＶ‥ドライバ；ＤＴ‥データ転送装置；ＤＴＦＬＧ‥データフラグ；ＥＮＤＲＥＧ‥エンディアンレジスタ；ＩＮ‥入力ユニット；ＭＥＭ‥メモリユニット；ＭＭ‥記憶媒体；ＯＤＤＦＬＧ‥奇数フラグ；ＯＵＴ‥出力ユニット；ＲＣＶ‥受信装置；ＲＥＱＮＵＭ、ＲＥＱＮＵＭｂ‥転送要求数レジスタ
【図１】
0005482472.tif 000002
【図２】
0005482472.tif 000003
【図３】
0005482472.tif 000004
【図４】
0005482472.tif 000005
【図５】
0005482472.tif 000006
【図６】
0005482472.tif 000007
【図７】
0005482472.tif 000008
【図８】
0005482472.tif 000009