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