(57)【要約】【課題】タスクスイッチング等によるＣＰＵの処理時間の浪費を低減させることができるようにしたＤＭＡコントローラを提供する。【解決手段】ＣＰＵがＤＭＡ転送の設定を行うための設定用レジスタ（２０４〜２０８）と、設定用レジスタ（２０４〜２０８）に記憶されているデータを書き込むための動作用レジスタ（２０９〜２１４）と、ＤＭＡ転送を行うにあたって設定用レジスタ（２０４〜２０８）に記憶されているデータを動作用レジスタ（２０９〜２１４）に書き込む動作制御手段（２０２）と、動作用レジスタ（２０９〜２１４）に記憶されているデータに基づいてＤＭＡ転送を実行する転送実行手段（２０１）と、を備える。【選択図】　　　図２
2004118299.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵがＤＭＡ転送の設定を行うための設定用レジスタと、
前記設定用レジスタに記憶されているデータを書き込むための動作用レジスタ又は前記データを用いて計数動作を行う動作用カウンタと、
ＤＭＡ転送を開始するにあたって前記設定用レジスタに記憶されているデータが前記動作用レジスタ又は動作用カウンタに書き込むように制御する動作制御手段と、
前記動作用レジスタ又は動作用カウンタに記憶されているデータに基づいてＤＭＡ転送を実行する転送実行手段と、
を備えたことを特徴とするＤＭＡコントローラ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ＣＰＵ（中央処理装置）を介することなく周辺装置間で行われるデータ転送を制御するＤＭＡコントローラに関するものである。
【０００２】
【従来の技術】
ＤＭＡコントローラは、周辺装置からデータ転送の要求を受けると、システムバスの使用権をＣＰＵ等のバスコントローラに対して要求し、システムバスの使用権が認可されると、予め設定された転送元から転送先へのデータ転送を開始するようになっている。そして、ＤＭＡコントローラの制御によるデータ転送（以下、「ＤＭＡ転送」と称する）では、ＣＰＵの制御によるデータ転送とは違って、命令のリード及び解読が必要ないので、データの転送速度を高速にすることが可能となる。
【０００３】
従来のＤＭＡコントローラでは、ＣＰＵによってＤＭＡ転送が設定されるレジスタ（ＤＭＡ転送を実行するために必要な転送元のアドレス、転送先のアドレスなどの情報が書き込まれるレジスタ）の値に基づいてＤＭＡ転送を実行するようになっていた。
【０００４】
【特許文献１】
特開平７−３０６８２５号公報
【０００５】
【発明が解決しようとする課題】
このため、使用中のＤＭＡチャンネル（設定したＤＭＡ転送が終了していないチャンネル）にＤＭＡ転送の設定を行うことができなかった。したがって、ＣＰＵは、あるタスクでＤＭＡ転送を行おうとしたときに、全てのＤＭＡチャンネルが使用中である場合には、ＤＭＡ転送が終了するのを待つ必要があった。これは、タスクスイッチングを招いてＣＰＵの処理時間が浪費される原因となる。
【０００６】
そこで、本発明は、タスクスイッチング等によるＣＰＵの処理時間の浪費を低減させることができるようにしたＤＭＡコントローラを提供することを目的とする。
【０００７】
【課題を解決するための手段】
上記の目的を達成するため、本発明のＤＭＡコントローラでは、
ＣＰＵがＤＭＡ転送の設定を行うための設定用レジスタと、
前記設定用レジスタに記憶されているデータを書き込むための動作用レジスタ又は前記データを用いて計数動作を行う動作用カウンタと、
ＤＭＡ転送を開始するにあたって前記設定用レジスタに記憶されているデータが前記動作用レジスタ又は動作用カウンタに書き込むように制御する動作制御手段と、
前記動作用レジスタ又は動作用カウンタに記憶されているデータに基づいてＤＭＡ転送を実行する転送実行手段と、
を備えている。
【０００８】
この構成により、ＤＭＡ転送を開始するにあたって設定用レジスタの値を動作用レジスタに書き込むとともに、カウンタ群の値に基づいてＤＭＡ転送を実行するので、ＤＭＡ転送に必要な情報を設定用レジスタに書き込むことによって、使用中のＤＭＡチャンネルに対してもＤＭＡ転送の設定を行うことができるようになる。
【０００９】
【発明の実施の形態】
以下に、本発明の実施形態を図面を参照しながら説明する。本発明の一実施形態であるＤＭＡコントローラは、そのブロック図を図１に示すように、調停回路１、並びに、４つのＤＭＡチャンネル２−１、２−２、２−３、及び、２−４を備えている。
【００１０】
各ＤＭＡチャンネル２−１、２−２、２−３、２−４は、その回路構成を図２に示すように、シーケンサ２０１、レジスタコントローラ２０２、ＣＴＬレジスタ２０３、ＳＲＣレジスタ２０４、ＤＳＴレジスタ２０５、ＣＹＣレジスタ２０６、ＴＲＮレジスタ２０７、ＳＥＴレジスタ２０８、ＳＲＣカウンタ２０９、ＤＳＴカウンタ２１０、ＴＭＰ＿ＣＹＣレジスタ２１１、ＣＹＣカウンタ２１２、ＴＲＮカウンタ２１３、及び、ＣＵＲ＿ＳＥＴレジスタ２１４を備えている。
【００１１】
調停回路１は、システムバス３００の使用権の調停、シーケンサ２０１の制御等を行う。各ＤＭＡチャンネル２−１、２−２、２−３、２−４では、シーケンサ２０１が、調停回路１による制御の下で、ＣＴＬレジスタ２０３、ＳＲＣカウンタ２０９、ＤＳＴカウンタ２１０、ＣＹＣカウンタ２１２、ＣＵＲ＿ＳＥＴレジスタ２１４、及び、レジスタコントローラ２０２内のレジスタ（不図示）の内容に基づいてＤＭＡ転送を実行する。
【００１２】
レジスタコントローラ２０２は、シーケンサ２０１からの指示、並びに、ＣＴＬレジスタ２０３、ＣＹＣカウンタ２１２、ＴＲＮカウンタ２１３、ＣＵＲ＿ＳＥＴレジスタ２１４、及び、自身のレジスタの内容に基づいて、ＳＲＣカウンタ２０９、ＤＳＴカウンタ２１０、ＴＭＰ＿ＣＹＣレジスタ２１１、ＣＹＣカウンタ２１２、ＴＲＮカウンタ２１３、及び、ＣＵＲ＿ＳＥＴレジスタ２１４の動作の制御、並びに、自身のレジスタの書き換えを行う。
【００１３】
ＣＴＬレジスタ２０３、ＳＲＣレジスタ２０４、ＤＳＴレジスタ２０５、ＣＹＣレジスタ２０６、ＴＲＮレジスタ２０７、及び、ＳＥＴレジスタ２０８には、ＤＭＡ転送を実行するために必要な情報がＣＰＵによって書き込まれる。具体的には、ＣＴＬレジスタ２０３には、ＤＭＡ転送を制御するための情報が書き込まれる。ＳＲＣレジスタ２０４には、データの転送元の領域（データを読み出す領域）の先頭のアドレスが書き込まれる。ＤＳＴレジスタ２０５には、データの転送先の領域（データを書き込む領域）の先頭のアドレスが書き込まれる。
【００１４】
ＣＹＣレジスタ２０６には、１回のＤＭＡ転送におけるサイクル数（尚、１サイクルは、１回読み出して１回書き込むという動作である）に応じた値が書き込まれる。ＴＲＮレジスタ２０７には、ＤＭＡ転送を行う回数に応じた値が書き込まれる。ＳＥＴレジスタ２０８には、ＤＭＡ転送に関するその他の情報（１サイクルで転送するデータのサイズ、転送元アドレス及び転送先アドレスを１サイクル毎に更新する／しないなど）が書き込まれる。
【００１５】
尚、ＳＲＣレジスタ２０４に保持されているデータはＳＲＣカウンタ２０９に、ＤＳＴレジスタ２０５に保持されているデータはＤＳＴカウンタ２１０に、ＣＹＣレジスタ２０６に保持されているデータはＴＭＰ＿ＣＹＣレジスタ２１１及びＣＹＣカウンタ２１２に、ＴＲＮレジスタ２０７に保持されているデータはＴＲＮカウンタ２１３に、ＳＥＴレジスタ２０８に保持されているデータはＣＵＲＳＥＴレジスタ２１４に、それぞれ与えられている。ＴＭＰ＿ＣＹＣレジスタ２１１に保持されているデータはＣＹＣカウンタ２１２に与えられている。
【００１６】
調停回路１の具体的な動作について説明する。入力信号ＤＭＡ＿ＲＥＱｘ（ｘ＝１、２、３、または、４）がアサートされると、ＤＭＡチャンネル２−ｘに対してＤＭＡ転送が要求されたと認識する。また、ＤＭＡ転送待ちのチャンネル（ＤＭＡ転送が要求されたが、まだ、ＤＭＡ転送を実行していないチャンネル）があれば、システムバスの使用権をＣＰＵ等からなるバスコントローラに対して要求する（具体的には、出力信号ＢＵＳ＿ＲＥＱをアサートさせる）。
【００１７】
また、システムバスの使用権が認可されると（具体的には、入力信号ＢＵＳ＿ＡＣＫがアサートされると）、ＤＭＡ転送待ちのチャンネルのうちの最も優先度が高いチャンネルのシーケンサ２０１へのスタート信号をアサートさせる。また、システムバスの使用権が取り下げられると（具体的には、入力信号ＢＵＳ＿ＡＣＫがネゲートされると）、シーケンサ２０１へのスタート信号をネゲートさせる。
【００１８】
また、バスコントローラ（不図示）からＤＭＡ待機命令が発行される（具体的には、入力信号ＤＭＡ＿ＷＡＩＴがアサートされる）と、各ＤＭＡチャンネル２−１、２−２、２−３、２−４のシーケンサ２０１へのウエイト信号をアサートさせる。また、ＤＭＡ待機命令が解除される（具体的には、入力信号ＤＭＡ＿ＷＡＩＴがネゲートされる）と、シーケンサ２０１へのウエイト信号をネゲートさせる。
【００１９】
尚、バスコントローラは、ＤＭＡコントローラがアクセスしたアドレスに対するデータの読み出しあるいは書き込みが完了する前に次の動作に移行しないように、ＤＭＡコントローラがアクセスしたアドレスに応じて信号ＤＭＡ＿ＷＡＩＴを制御するようになっている。
【００２０】
また、ＤＭＡチャンネルのシーケンサ２０１からＣＹＣカウンタ２１２にアンダーフローが発生した旨の通知を受けると、そのシーケンサ２０１へのスタート信号をネゲートさせ、その後、ＤＭＡ転送待ちのチャンネルがある場合には、システムバスの使用権が認可されていれば、そのうちの優先度が最も高いチャンネルのシーケンサ２０１へのスタート信号をアサートさせ、一方、ＤＭＡ転送待ちのチャンネルがない場合には、システムバスを解放する（具体的には、出力信号ＢＵＳ＿ＲＥＱをネゲートさせる）。尚、システムバスを解放すると、システムバスの使用権が取り下げられるようになっている。
【００２１】
また、ＤＭＡチャンネルのシーケンサ２０１からＤＭＡ転送が終了した旨の通知を受けると、そのシーケンサ２０１へのスタート信号をネゲートさせるとともに、システムバスを解放する。
【００２２】
ＤＭＡチャンネルのシーケンサ２０１の動作を図３に示すフローチャートを用いて説明する。まず、ＣＴＬレジスタ２０３のＥＮＢビットが１であるか否かを判定する（＃１０１）。ＥＮＢビットが１であれば（＃１０１のＹ）、＃１０２へ移行する。
【００２３】
尚、ＣＰＵは、使用中でないチャンネルに対して、ＤＭＡ転送の設定を終えると、すなわち、ＣＴＬレジスタ２０３、ＳＲＣレジスタ２０４、ＤＳＴレジスタ２０５、ＣＹＣレジスタ２０６、ＴＲＮレジスタ２０７、及び、ＳＥＴレジスタ２０８にＤＭＡ転送に必要な情報を書き込むと、ＣＴＬレジスタ２０３のＥＮＢビットを１にセットするようになっている。
【００２４】
＃１０２では、ＣＴＬレジスタ２０３のＲＥＳＵＭビットが１、ＭＯＤ１ビットが１、ＭＯＤ０ビットが０、かつ、レジスタコントローラ２０２内のレジスタのＥＯＰ＿Ｏビットが１であるか否かを判定する。＃１０２での判定結果が肯定であれば（＃１０２のＹ）、アイドル状態であるとして前述した＃１０１へ移行し、一方、否定であれば（＃１０２のＮ）、アイドル状態からロード＆ウエイト状態に遷移する旨をレジスタコントローラ２０２に通知する（＃１０３）。
【００２５】
尚、ＣＰＵは、ＣＴＬレジスタ２０３のＥＮＢビットを０にセットすることによりＤＭＡ転送を中断させ、その後、ＥＮＢビットを１にセットすることによりＤＭＡ転送を再開させるに先立って、ＣＴＬレジスタ２０３のＲＥＳＵＭビットを１にセットするようになっている。
【００２６】
＃１０３を終えると、ＣＴＬレジスタ２０３のＥＮＢビットが１であるか否かを判定する（＃１０４）。ＥＮＢビットが１であれば（＃１０４のＹ）、アイドル状態は解除されたものとして＃１０５へ移行し、一方、ＥＮＢビットが１でなければ（＃１０４のＮ）、まだアイドル状態であると判断して前述した＃１０１へ移行する。
【００２７】
＃１０５では、調停回路１からのスタート信号がアサートされているか否かを判定する。スタート信号がアサートされていれば（＃１０５のＹ）、＃１０６へ移行し、一方、スタート信号がアサートされていなければ（＃１０５のＮ）、前述した＃１０４へ移行する。
【００２８】
＃１０６では、ＳＲＣカウンタ２０９の値に対応するアドレスからデータを自身のバッファに読み込む。＃１０６を終えると、調停回路１からのウエイト信号がアサートされているか否かを判定し（＃１０７）、ウエイト信号がアサートされていなければ（＃１０７のＮ）、＃１０８へ移行する。
【００２９】
＃１０８では、リード状態からライト状態に遷移する旨をレジスタコントローラ２０２に通知する。＃１０８を終えると、＃１０６で読み込んだデータをＤＳＴカウンタ２１０の値に対応するアドレスに書き込む（＃１０９）。次に、ウエイト信号がアサートされているか否かを判定し（＃１１０）、ウエイト信号がアサートされていなければ（＃１１０のＮ）、＃１１２へ移行する。
【００３０】
＃１１２では、レジスタコントローラ２０２内のレジスタのＥＯＰ＿Ｏビットが１であるか否かを判定する。ＥＯＰ＿Ｏビットが１であれば（＃１１２のＹ）、ＤＭＡ転送が終了した旨を調停回路１に通知する（＃１１３）。一方、ＥＯＰ＿Ｏビットが１でなければ（＃１１２のＮ）、後述する＃１２３へ移行する。
【００３１】
＃１１３を終えると、ＣＴＬレジスタ２０３のＣＥＰＥビットが１であるか否かを判定する（＃１１４）。ＣＥＰＥビットが１であれば（＃１１４のＹ）、割り込み信号を用いてＤＭＡ転送が終了した旨をＣＰＵに通知し（＃１１５）、その後、＃１１６へ移行する。一方、ＣＥＰＥビットが１でなければ（＃１１４のＮ）、＃１１５を行うことなく、＃１１６へ移行する。
【００３２】
＃１１６では、ＣＴＬレジスタ２０３のＭＯＤ１ビット、ＭＯＤ０ビットが共に０であるか否かを判定する。＃１１６での判定結果が肯定であれば（＃１１６のＹ）、ＣＴＬレジスタ２０３のＥＮＢビットに０をセットするとともに（＃１１７）、ライト状態からアイドル状態に遷移する旨をレジスタコントローラ２０２に通知する（＃１１８）。＃１１８を終えると、前述した＃１０１へ移行する。一方、＃１１６での判定結果が否定であれば（＃１１６のＮ）、＃１１９へ移行する。
【００３３】
＃１１９では、ＣＴＬレジスタ２０３のＭＯＤ１ビットが１であるか否かを判定する。ＭＯＤ１ビットが１であれば（＃１１９のＹ）、ＭＯＤ１ビット、ＭＯＤ０ビットを共に０にセットする（＃１２０）とともに、ＣＴＬレジスタ２０３のＣＥＰＥビットの値をＣＴＬレジスタ２０３のＮＥＰＥビットの値で更新する（＃１２１）。
【００３４】
一方、ＭＯＤ１ビットが１でなければ（＃１１９のＮ）、＃１２０を行うことなく、＃１２１を行う。＃１２１を終えると、ライト状態からロード＆ウエイト状態に遷移する旨をレジスタコントローラ２０２に通知し（＃１２５）、その後、前述した＃１０４へ移行する。
【００３５】
＃１１２での判定結果が否定であるとき（＃１１２のＮ）に移行する＃１２３では、ＣＹＣカウンタ２１２にアンダーフローが発生しているか否かを判定する。ＣＹＣカウンタ２１２にアンダーフローが発生していれば（＃１２３のＹ）、ＣＹＣカウンタ２１２にアンダーフローが発生した旨を調停回路１に通知する（＃１２４）とともに、ライト状態からロード＆ウエイト状態に遷移する旨をレジスタコントローラ２０２に通知する（＃１２５）。＃１２５を終えると、前述した＃１０４へ移行する。
【００３６】
一方、ＣＹＣカウンタ２１２にアンダーフローが発生していなければ（＃１２３のＮ）、ライト状態からリード状態に遷移する旨をレジスタコントローラ２０２に通知する（＃１２６）。＃１２６を終えると、前述した＃１０４へ移行する。
【００３７】
レジスタコントローラ２０２の動作を図４及び図５に示すフローチャートを用いて説明する。レジスタコントローラ２０２は、シーケンサ２０１からの状態遷移の通知を監視している（＃２０１、＃２０５、＃２１３、及び、＃２１４）。
【００３８】
まず、アイドル状態からロード＆ウエイト状態に遷移する旨の通知をシーケンサ２０１から受けた場合について説明する。このときには、＃２０１での判定結果が肯定になり（＃２０１のＹ）、自身のレジスタのＥＯＰ＿Ｏビットが１、または、ＣＴＬレジスタ２０３のＲＥＳＵＭビットが０であるか否かを判定する（＃２０２）。
【００３９】
＃２０２での判定結果が肯定であれば（＃２０２のＹ）、ＳＲＣカウンタ２０９の値をＳＲＣレジスタ２０４の値で、ＤＳＴカウンタ２１０の値をＤＳＴレジスタ２０５の値で、ＴＭＰ＿ＣＹＣレジスタ２１１及びＣＹＣカウンタ２１２の値をＣＹＣレジスタ２０６の値で、ＴＲＮカウンタ２１３の値をＴＲＮレジスタ２０７の値で、ＣＵＲ＿ＳＥＴレジスタ２１４の値をＳＥＴレジスタ２０８の値で、それぞれ更新する（＃２０３）。＃２０３を終えると、自身のレジスタのＥＯＰ＿Ｏビットを０にセットする（＃２０４）。
【００４０】
次に、リード状態からライト状態に遷移する旨の通知をシーケンサ２０１から受けた場合について説明する。このときには、＃２０５での判定結果が肯定になり（＃２０５のＹ）、ＣＵＲ＿ＳＥＴレジスタ２１４のＤＳＤＩＲビットが１であるか否かを判定する（＃２０６）。
【００４１】
ＤＳＤＩＲビットが１であれば（＃２０６のＹ）、ＳＲＣカウンタ２０９の値を１だけインクリメントさせ（＃２０７）、その後、＃２０８へ移行する。一方、ＤＳＤＩＲビットが１でなければ（＃２０６のＮ）、＃２０７を行うことなく、＃２０８へ移行する。
【００４２】
＃２０８では、ＣＹＣカウンタ２１２の値を１だけデクリメントさせる。＃２０８を終えると、ＣＹＣカウンタ２１２にアンダーフローが発生しているか否かを判定する（＃２０９）。ＣＹＣカウンタ２１２にアンダーフローが発生していれば（＃２０９のＹ）、ＴＲＮカウンタ２１３の値が０であるか否かを判定する（＃２１０）。
【００４３】
ＴＲＮカウンタ２１３の値が０でなければ（＃２１０のＮ）、ＴＲＮカウンタ２１３の値を１だけデクリメントさせる（＃２１１）。一方、ＴＲＮカウンタ２１３の値が０であれば（＃２１０のＹ）、自身のレジスタのＥＯＰ＿Ｏビットを１にセットする（＃２１２）。
【００４４】
次に、ライト状態からアイドル状態に遷移する旨の通知、または、ライト状態からリード状態に遷移する旨の通知をシーケンサ２０１から受けた場合について説明する。このときには、＃２１３での判定結果が肯定になり（＃２１３のＹ）、ＣＵＲ＿ＳＥＴレジスタ２１４のＤＤＤＩＲビットが１であるか否かを判定する（＃２１８）。ＤＤＤＩＲビットが１であれば（＃２１８のＹ）、ＤＳＴカウンタ２１０の値を１だけインクリメントさせる（＃２１９）。
【００４５】
次に、ライト状態からロード＆ウエイト状態に遷移する旨の通知をシーケンサ２０１から受けた場合について説明する。このときには、＃２１４での判定結果が肯定になり（＃２１４のＹ）、自身のレジスタのＥＯＰ＿Ｏビットが１であるか否かを判定する（＃２１５）。
【００４６】
ＥＯＰ＿Ｏビットが１であれば（＃２１５のＹ）、ＳＲＣカウンタ２０９、ＤＳＴカウンタ２１０、ＴＭＰ＿ＣＹＣレジスタ２１１及びＣＹＣカウンタ２１２、ＴＲＮカウンタ２１３、ＣＵＲ＿ＳＥＴレジスタ２１４の値を、それぞれＳＲＣレジスタ２０４、ＤＳＴレジスタ２０５、ＣＹＣレジスタ２０６、ＴＲＮレジスタ２０７、ＳＥＴレジスタ２０８の値で更新するとともに（＃２０３）、自身のレジスタのＥＯＰ＿Ｏビットを０にセットする（＃２０４）。一方、ＥＯＰ＿Ｏビットが１でなければ（＃２１５のＮ）、ＣＹＣカウンタ２１２にアンダーフローが発生しているか否かを判定する（＃２１６）。
【００４７】
ＣＹＣカウンタ２１２にアンダーフローが発生していれば（＃２１６のＹ）、ＣＹＣカウンタ２１２の値をＴＭＰ＿ＣＹＣレジスタ２１１の値で更新し（＃２１７）、その後、＃２１８へ移行する。一方、ＣＹＣカウンタ２１２にアンダーフローが発生していなければ（＃２１６のＮ）、＃２１７を行うことなく、＃２１８へ移行する。
【００４８】
＃２１８では、ＣＵＲ＿ＳＥＴレジスタ２１４のＤＤＤＩＲビットが１であるか否かを判定する。ＤＤＤＩＲビットが１であれば（＃２１８のＹ）、ＤＳＴカウンタ２１０の値を１だけインクリメントさせる（＃２１９）。
【００４９】
以上に述べたシーケンサ２０１及びレジスタコントローラ２０２の動作により、各ＤＭＡチャンネルでは、ＤＭＡ転送を開始するにあたって、レジスタ群（ＳＲＣレジスタ２０４、ＤＳＴレジスタ２０５、ＣＹＣレジスタ２０６、ＴＲＮレジスタ２０７、及び、ＳＥＴレジスタ２０８）の値をカウンタ群（ＳＲＣカウンタ２０９、ＤＳＴカウンタ２１０、ＴＭＰ＿ＣＹＣレジスタ２１１、ＣＹＣカウンタ２１２、ＴＲＮカウンタ２１３、及び、ＣＵＲ＿ＳＥＴレジスタ２１４）に書き込むとともに、カウンタ群の値に基づいてＤＭＡ転送を実行する。
【００５０】
したがって、ＤＭＡ転送に必要な情報を任意のタイミングでレジスタ群に書き込むことによって、使用中のＤＭＡチャンネルに対してもＤＭＡ転送の設定を行うことができるようになる。これにより、あるタスクでＤＭＡ転送を行おうとしたときに、全てのＤＭＡチャンネルが使用中であっても、ＤＭＡ転送の終了を待つことなくＤＭＡ転送の設定を行うことができる可能性が生まれ、タスクスイッチング等によるＣＰＵの処理時間の浪費を低減させることができる。
【００５１】
また、ＣＴＬレジスタ２０３のＭＯＤ１ビット及びＭＯＤ０ビットに応じて動作が以下のように異なる。ＤＭＡ転送が終了したときに、ＭＯＤ１ビット、ＭＯＤ０ビットが共に０にセットされていれば、アイドル状態（ＤＭＡ転送が禁止された状態）になる（以下、「ノーマルモード」と称する）。
【００５２】
ＤＭＡ転送が終了したときに、ＭＯＤ１ビットが０、ＭＯＤ０ビットが１にそれぞれセットされていれば、ロード＆ウエイト状態（カウンタ群の値をレジスタ群の値で更新してＤＭＡ転送が要求されるのを待っている状態）になるので、ＣＰＵの介在なしで次のＤＭＡ転送が開始される（以下、「オートリピートモード」と称する）。
【００５３】
ＤＭＡ転送が終了したときに、ＭＯＤ１ビットが１にセットされていれば、ＭＯＤ１ビット、ＭＯＤ０ビットを共に０にセットしてからロード＆ウエイト状態になるので、ＣＰＵの介在なしで次のＤＭＡ転送が開始されるが、そのＤＭＡ転送が終了すると、アイドル状態になる（以下、「オートスタートモード」と称する）。
【００５４】
したがって、ＣＰＵは、使用中でないＤＭＡチャンネルに対してＤＭＡ転送を設定した場合にはノーマルモードに、設定したＤＭＡ転送が繰り返し行われるようにしたい場合にはオートリピートモードに、使用中のＤＭＡチャンネルに対してＤＭＡ転送を設定した場合にはオートスタートモードに、それぞれＤＭＡチャンネルの動作モードが切り換わるように、ＣＴＬレジスタ２０３のＭＯＤ１ビット及びＭＯＤ０ビットを書き換えればよい。
【００５５】
また、ＤＭＡ転送が終了したときに、ＣＴＬレジスタ２０３のＣＥＰＥビットが０であれば、ＤＭＡ転送が終了した旨を通知する割り込みをＣＰＵに対して行わない。したがって、ＣＰＵは、次のＤＭＡ転送の設定を行ったときには、ＣＥＰＥビットを０にセットしておけば、１つ前に設定したＤＭＡ転送が終了してもＤＭＡコントローラから割り込みを受けないので、ＤＭＡコントローラからの無意味な割り込みがなくなり、その分だけ多くの時間を他の処理に費やすことができるようになる。
【００５６】
尚、ＣＰＵは、システムバスの使用権を持っているときには、ＣＴＬレジスタ２０３の値を書き換えることによって、ＤＭＡチャンネルの動作モード、及び、ＤＭＡ転送終了時の割り込みの有無をいつでも切り換えることができるので、状況の変化に容易に対応することができる。
【００５７】
その他には、ＣＹＣレジスタ２０６に設定された値をｐ、ＴＲＮレジスタ２０７に設定された値をｑとすると、ＤＭＡ転送が要求される毎に（ｐ＋１）サイクルのＤＭＡ転送を行い、その後、新たなＤＭＡ転送要求が発生するまで待機状態になる。そして、（ｑ＋１）回目のＤＭＡ転送の要求に対してＤＭＡ転送を行った時点で動作を終了する。すなわち、（ｐ＋１）サイクルのＤＭＡ転送を（ｑ＋１）回行うことになる。
【００５８】
したがって、ＣＰＵは、ＡサイクルのＤＭＡ転送をＢ回だけ繰り返し行いたい場合、ＣＹＣレジスタ２０６の値をＡ−１に、ＴＲＮレジスタの値をＢ−１にそれぞれ設定するという作業を一度だけ行えばよく、これにより、ＣＰＵの負担が軽減するので、その分、システムの性能低下を抑制することができる。
【００５９】
【発明の効果】
以上説明したように、本発明のＤＭＡコントローラによれば、使用中のＤＭＡチャンネルに対してもＤＭＡ転送の設定を行うことができるようになるので、あるタスクでＤＭＡ転送を行おうとしたときに、全てのＤＭＡチャンネルが使用中であっても、ＤＭＡ転送の終了を待つことなくＤＭＡ転送の設定を行うことができる可能性が生まれ、タスクスイッチング等によるＣＰＵの処理時間の浪費を低減させることができる。
【図面の簡単な説明】
【図１】本発明の一実施形態であるＤＭＡコントローラのブロック図である。
【図２】図１における各ＤＭＡチャンネルの回路構成を示す図である。
【図３】図２におけるシーケンサの動作を説明するためのフローチャートである。
【図４】図２におけるレジスタコントローラの動作を説明するためのフローチャートである。
【図５】図２におけるレジスタコントローラの動作を説明するためのフローチャートである。
【符号の説明】
１　　調停回路
２−１、２−２、２−３、２−４　　ＤＭＡチャンネル
２０１　　シーケンサ
２０２　　レジスタコントローラ
２０３　　ＣＴＬレジスタ
２０４　　ＳＲＣレジスタ
２０５　　ＤＳＴレジスタ
２０６　　ＣＹＣレジスタ
２０７　　ＴＲＮレジスタ
２０８　　ＳＥＴレジスタ
２０９　　ＳＲＣカウンタ
２１０　　ＤＳＲカウンタ
２１１　　ＴＭＰ＿ＣＹＣレジスタ
２１２　　ＣＹＣカウンタ
２１３　　ＴＲＮカウンタ
２１４　　ＣＵＲ＿ＳＥＴレジスタ
３００　　システムバス
【図１】
2004118299.tif 000003
【図２】
2004118299.tif 000004
【図３】
2004118299.tif 000005
【図４】
2004118299.tif 000006
【図５】
2004118299.tif 000007