(57)【特許請求の範囲】
【請求項１】
コピー先アドレスを設定するデスティネーションアドレスレジスタを含む基本機能設定レジスタと、
スキャッタギャザー動作を切り替える第１レジスタを含み、前記第１レジスタに設定する値に応じて、通常のスキャッタギャザーに対応したタスクの実行と、バスを介した読み出しをせずに前記基本機能設定レジスタに書き込むデータを直接設定するタスクの実行と、を変更するスキャッタギャザー設定レジスタと、を有する、
ことを特徴とするＤＭＡ制御装置。
【請求項２】
さらに、前記デスティネーションアドレスレジスタの内容が示すアドレスに対して、直接書き込む値を生成する書き込み値生成回路を有する、
ことを特徴とする請求項１に記載のＤＭＡ制御装置。
【請求項３】
前記スキャッタギャザー設定レジスタは、一連のタスクを連続して何回実行するかを指定する第２レジスタを含む、
ことを特徴とする請求項１または請求項２に記載のＤＭＡ制御装置。
【請求項４】
さらに、前記第２レジスタの値を受け取り、スキャッタギャザー動作中に、前記一連のタスクの実行を何回繰り返したか判定する繰り返し回数判定回路を有する、
ことを特徴とする請求項３に記載のＤＭＡ制御装置。
【請求項５】
データ数を規定するコンフィギュレーションレジスタと、
スキャッタギャザー動作を切り替える第１レジスタを含み、前記第１レジスタに設定する値に応じて、通常のスキャッタギャザーに対応したタスクの実行と、バスを介した読み出しをせずに、コピー先アドレスを設定するデスティネーションアドレスレジスタを含む基本機能設定レジスタに書き込むデータを直接設定するタスクの実行と、を変更するスキャッタギャザー設定レジスタと、を有する、
ことを特徴とするＤＭＡ制御装置。
【請求項６】
さらに、前記コンフィギュレーションレジスタに対して、前記コンフィギュレーションレジスタの値または予め定められた値を選択するコンフィギュレーション値選択回路を有する、
ことを特徴とする請求項５に記載のＤＭＡ制御装置。
【請求項７】
前記スキャッタギャザー設定レジスタは、一連のタスクを連続して何回実行するかを指定する第２レジスタを含む、
ことを特徴とする請求項５または請求項６に記載のＤＭＡ制御装置。
【請求項８】
さらに、前記第２レジスタの値を受け取り、スキャッタギャザー動作中に、前記一連のタスクの実行を何回繰り返したか判定する繰り返し回数判定回路を有する、
ことを特徴とする請求項７に記載のＤＭＡ制御装置。
【請求項９】
請求項１乃至請求項８のいずれか１項に記載のＤＭＡ制御装置と、
メモリと、
ＣＰＵと、
複数の周辺回路と、
前記ＤＭＡ制御装置，前記メモリ，前記ＣＰＵおよび複数の前記周辺回路を繋ぐバスと、を有する、
ことを特徴とするマイクロコントローラ。
【請求項１０】
コピー先アドレスを設定するデスティネーションアドレスレジスタを含む基本機能設定レジスタと、スキャッタギャザー動作を切り替える第１レジスタを含むスキャッタギャザー設定レジスタと、を有し、
前記スキャッタギャザー設定レジスタにより、前記第１レジスタに設定する値に応じて、通常のスキャッタギャザーに対応したタスクの実行と、バスを介した読み出しをせずに前記基本機能設定レジスタに書き込むデータを直接設定するタスクの実行と、を変更する、
ことを特徴とするＤＭＡ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書で言及する実施例は、ＤＭＡ制御装置、マイクロコントローラおよびＤＭＡ制御方法に関する。
【背景技術】
【０００２】
近年、様々なシステムにおいて、ＣＰＵ(Central Processing Unit：中央処理装置)を介さずに、メモリ間、或いは、メモリと周辺回路間でデータ転送を行なうＤＭＡ(Direct Memory Access)転送機能が設けられている。
【０００３】
例えば、ＭＣＵ(Micro Control Unit：マイクロコントローラ)には、ＣＰＵ(ＣＰＵコア)，メモリおよび周辺回路などと共に、ＤＭＡ制御装置(ＤＭＡコントローラ：Direct Memory Access Controller：ＤＭＡＣ)が内蔵されている。なお、メモリとしては、例えば、ＳＲＡＭ((Static Random Access Memory)が利用されている。
【０００４】
さらに、例えば、ＭＣＵには、ＤＭＡ転送時において、散り散りになっている(scatter)メモリブロックに対して、まとめて(gather)連続転送を行うことが可能なスキャッタギャザー(Scatter-gather)モードが設けられている。
【０００５】
ここで、スキャッタギャザーモードとスキャッタギャザーモードで実行するタスク開始のトリガー信号として種々の信号が使える機能を組み合わせることにより、周辺回路の制御を、ＣＰＵを動作させないで行うことが提案されている。
【０００６】
ところで、従来、ＤＭＡ制御技術としては、様々な提案がなされている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平０６−０６００１３号公報
【特許文献２】特開２００３−０５８４９１号公報
【特許文献３】特開２０１１−０７０３７２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上述したように、スキャッタギャザーモードとして、ＣＰＵを動作させないで周辺回路の制御を行うことが提案されている。この周辺回路の制御は、各周辺回路に備わった各種レジスタへの書き込みおよび読み出しで行うことになる。
【０００９】
しかしながら、通常これらのレジスタアドレスは連続しているとは限らないため、例えば、ＤＭＡＣは、書き込みや読み出しを行うレジスタごとに１つのタスクとして実行する。そのため、処理サイクルが増大し、消費電力の増大を招くことになる。
【００１０】
また、複数回の不連続なアドレスに対するＤＭＡＣによるアクセス効率化のために、基準アドレスと相対アドレスを用いて１つのタスクで実行することが考えられる。しかしながら、周辺回路の操作で頻出するレジスタへ１回だけ書き込んだり読み出したりするタスクを行う場合、処理サイクルを削減することは困難である。
【課題を解決するための手段】
【００１１】
一実施形態によれば、コピー先アドレスを設定するデスティネーションアドレスレジスタを含む基本機能設定レジスタと、スキャッタギャザー動作を切り替える第１レジスタを含み、前記第１レジスタに設定する値に応じて、通常のスキャッタギャザーに対応したタスクの実行と、バスを介した読み出しをせずに前記基本機能設定レジスタに書き込むデータを直接設定するタスクの実行と、を変更するスキャッタギャザー設定レジスタと、を有するＤＭＡ制御装置が提供される。
【発明の効果】
【００１２】
開示のＤＭＡ制御装置、マイクロコントローラおよびＤＭＡ制御方法は、スキャッタギャザーモードにおける処理サイクルを削減して消費電力を低減することができるという効果を奏する。
【図面の簡単な説明】
【００１３】
【図１】図１は、マイクロコントローラの一例を示すブロック図である。
【図２】図２は、ＤＭＡ制御装置の一例における設定レジスタ構成を示すブロック図である。
【図３】図３は、ＤＭＡ制御装置の第１実施例における設定レジスタ構成を示すブロック図である。
【図４】図４は、図３に示すＤＭＡ制御装置における基本機能の動作を説明するための図である。
【図５】図５は、図３に示すＤＭＡ制御装置におけるスキャッタギャザー機能の動作を説明するための図である。
【図６】図６は、図３に示すＤＭＡ制御装置の設定レジスタ構成の一例を説明するための図である。
【図７】図７は、図６に示す設定レジスタ構成において、設定ビット＝０の動作の一例を説明するためのフローチャートである。
【図８】図８は、図６に示す設定レジスタ構成において、設定ビット＝１の動作の一例を説明するためのフローチャートである。
【図９】図９は、図６に示す設定レジスタ構成において、設定ビット＝２の動作の一例を説明するためのフローチャートである。
【図１０】図１０は、図６に示す設定レジスタ構成において、設定ビット＝３の動作の一例を説明するためのフローチャートである。
【図１１】図１１は、第１実施例のＤＭＡ制御装置におけるバスを介したアクセス回数の削減効果を説明するための図である。
【図１２】図１２は、ペリフェラルの操作の一例を説明するための図である。
【図１３】図１３は、ＤＭＡ制御装置の第２実施例における設定レジスタ構成を示すブロック図である。
【図１４】図１４は、図１３に示すＤＭＡ制御装置の設定レジスタ構成の一例を説明するための図である。
【図１５】図１５は、図１４に示す設定レジスタ構成において、設定ビット＝４の動作の一例を説明するためのフローチャートである。
【図１６】図１６は、図１４に示す設定レジスタ構成において、設定ビット＝５の動作の一例を説明するためのフローチャートである。
【図１７】図１７は、第２実施例のＤＭＡ制御装置におけるバスを介したアクセス回数の削減効果を説明するための図である。
【図１８】図１８は、ＤＭＡ制御装置の第３実施例における設定レジスタ構成を示すブロック図である。
【図１９】図１９は、図１８に示すＤＭＡ制御装置の動作を説明するための図(その１)である。
【図２０】図２０は、図１８に示すＤＭＡ制御装置の動作を説明するための図(その２)である。
【図２１】図２１は、ＤＭＡ制御装置の第４実施例における設定レジスタ構成のレジスタDMAC_SCATTERを説明するための図である。
【図２２】図２２は、図２１に示す設定レジスタ構成の一例を説明するための図である。
【図２３】図２３は、本実施例のＤＭＡ制御装置が適用されるワイヤレスセンサーノードの一例を示すブロック図である。
【図２４】図２４は、図２３のワイヤレスセンサーノードにおけるスキャッタギャザー設定レジスタのDMAC_SCATTERの設定の一例を説明するための図である。
【図２５】図２５は、図２３に示すワイヤレスセンサーノードの動作の一例を説明するための図である。
【図２６】図２６は、図２３に示すＳＲＡＭに保存されている各タスクの実行開始前にＤＭＡ制御装置の基本機能設定レジスタに読み込まれる値の一例を示す図である。
【図２７】図２７は、本実施例のＤＭＡ制御装置の一例を示すブロック図である。
【図２８】図２８は、図２７に示すＤＭＡ制御装置におけるコンフィギュレーション値選択回路および書き込み値生成回路の一例を示すブロック図である。
【図２９】図２９は、図２７に示すＤＭＡ制御装置におけるタスク数判定回路および繰り返し回数判定回路の一例を示すブロック図である。
【図３０】図３０は、図２７に示すＤＭＡ制御装置における設定値アドレス生成回路の一例を示すブロック図である。
【発明を実施するための形態】
【００１４】
まず、本実施例のＤＭＡ制御装置、マイクロコントローラおよびＤＭＡ制御方法を詳述する前に、図１および図２を参照して、ＤＭＡ制御装置の一例およびその問題点を説明する。図１は、マイクロコントローラの一例を示すブロック図である。
【００１５】
図１に示されるように、マイクロコントローラ(ＭＣＵ)は、ＤＭＡ制御装置(ＤＭＡコントローラ：ＤＭＡＣ)１，メモリ(ＳＲＡＭ)２，ＣＰＵコア(ＣＰＵ)３，複数の周辺回路(ペリフェラル＃０〜＃３)およびそれらを繋ぐバス５などを含む。
【００１６】
ここで、例えば、ペリフェラル＃０は、シリアルペリフェラルインターフェース(Serial Peripheral Interface：ＳＰＩ)であり、ペリフェラル＃１は、汎用入出力ポート(General Purpose Input/Output：ＧＰＩＯ)である。さらに、例えば、ペリフェラル＃２は、タイマ(Timer)であり、ペリフェラル＃３は、アナログ-デジタル変換器(Analog-to-Digital Converter：ＡＤＣ)である。
【００１７】
また、図２３を参照して後に詳述するように、例えば、ペリフェラル＃０(ＳＰＩ)は、ＳＰＩインターフェース(Ｉ／Ｆ)を介して外部の無線モジュールに接続され、ペリフェラル＃１(ＧＰＩＯ)は、外部のセンサー電源に接続される。さらに、例えば、ペリフェラル＃３(ＡＤＣ)は、ＡＤＣ Ｉ／Ｆを介して外部の温度センサーに接続される。そして、これらペリフェラル＃０〜＃３，ＤＭＡＣ１，ＳＲＡＭ２およびＣＰＵコア３は、例えば、３２ビットバス５を介して相互に接続されている。
【００１８】
なお、ペリフェラル＃０〜＃３の数および種類、並びに、バス５のビット幅(３２ビット)などは、単なる例であり、様々な構成があり得るのはいうまでもない。また、ＤＭＡ制御装置が設けられたＭＣＵは、様々な電子機器に対して幅広く適用することができるが、例えば、低消費電力が求められるワイヤレスセンサーネットワークの無線端末(ワイヤレスセンサーノード)に適用することができる。
【００１９】
図２は、ＤＭＡ制御装置の一例における設定レジスタ構成を示すブロック図であり、基本機能設定レジスタを示すものである。図２に示されるようにＤＭＡＣ(ＤＭＡ制御装置)１は、基本機能設定レジスタとして、コンフィギュレーションレジスタ(DMAC_CONFIG)101、DMAC_DST(デスティネーションアドレスレジスタ)102、および、ソースアドレスレジスタ(DMAC_SRC)103などを含む。
【００２０】
ＤＭＡＣ１は、DMAC_SRC 103で指定されたアドレスから始まりDMAC_CONFIG 101で指定された区間のアドレスまでのデータを読み出し、それを、DMAC_DST 102で指定されたアドレスから始まりDMAC_CONFIG 101で指定された区間のアドレスまで書き込む機能を持つ。このように、あるアドレスから始まる一定領域のデータを別のあるアドレスから始まる一定領域にコピーする処理を、タスクと呼ぶことにする。
【００２１】
このように、例えば、データのコピーを、ＤＭＡＣ１を用いて行うことで、その間、ＣＰＵコア３は、別の処理プログラムを実行できるというメリットがある。また、消費エネルギー(消費電力)に関して、ＣＰＵコア３とＤＭＡＣ１を比較すると、回路サイズは、一般的にＤＭＡＣ１の方が小さく、ＣＰＵコア３上で動作するプログラムでデータをコピーした場合には、ＤＭＡＣ１で行った場合よりも消費電力が大きくなる。
【００２２】
これは、ＣＰＵコア３でデータのコピーを行うと、例えば、プログラムが格納されているＳＲＡＭ(或いは、図示しないフラッシュメモリ)２からのプログラム読み出しなどにエネルギーを消費し、また、ＣＰＵコア３自体の電力消費も大きいためである。そのため、例えば、ワイヤレスセンサーノードなどの低消費電力が強く求められる場合を始めとして、ＤＭＡＣ１でデータのコピーを行うのが好ましい。
【００２３】
ところで、ＤＭＡＣに１つのタスクを実行させるためには、DMAC_SRC 103、DMAC_DST 102およびDMAC_CONFIG 101の設定を行うことになるが、通常、これらのレジスタへの設定値の書き込みは、ＣＰＵコア３により行われる。
【００２４】
そこで、複数のタスクに対応したDMAC_SRC 103、DMAC_DST 102およびDMAC_CONFIG 101の設定内容を予めＳＲＡＭ２に格納しておき、タスクを開始するタイミングになったら、ＤＭＡＣ１がＳＲＡＭ２から設定内容を読み出してタスクを実行するものが考えられる。すなわち、ＣＰＵコア３の介在なしに、複数のタスクを連続実行できるスキャッタギャザー機能(Scatter-Gather機能：スキャッタギャザーモード)を備えるＤＭＡＣ１が提案されている。
【００２５】
しかしながら、図１を参照して説明したように、ＭＣＵは、周辺回路(ペリフェラル＃０〜＃３)として、ＧＰＩＯやＡＤＣ、或いは、ＳＰＩ，Ｉ2ＣおよびＵＡＲＴ(Universal Asynchronous Receiver Transmitter)などのシリアルＩ／Ｆを搭載している。
【００２６】
さらに、ＭＣＵは、周辺回路として、タイマ、ＤＡＣ(Digital-to-Analog Converter)およびＰＷＭ(Pulse Width Modulation)などを搭載している。これら周辺回路の制御およびデータのやりとりは、周辺回路ごとに備わっている各種レジスタを介して行われる。
【００２７】
具体的に、例えば、ＧＰＩＯでは、GPIO_MODE(入出力モードレジスタ)，GPIO_OUT(出力データレジスタ)およびGPIO_IN(入力データレジスタ)が備わっている。そして、GPIO_MODEに書き込む値によってポートの入出力方向を制御し、入力モードの時は、GPIO_INの値を読み出すことによってＭＣＵの外部からＧＰＩＯに入力されている電圧レベルの値を知ることができる。また、出力モードの時は、GPIO_OUTに値を書き込むことによってＭＣＵの外部に出力する信号の電圧レベルを高レベル『Ｈ』または低レベル『Ｌ』のいずれかに切り替えることができる。
【００２８】
さらに、例えば、ＵＡＲＴなどのシリアルＩ／Ｆでは、ContReg(制御レジスタ)とDataReg(データレジスタ)が備わっており、データを出力したいときはDataRegに出力したい値を書き込み、その後、ContRegにデータ出力を指示する値を書き込む。これにより、例えば、ＵＡＲＴから所望のデータを出力させることができる。
【００２９】
ところで、近年、スキャッタギャザーモードで次のタスク開始のトリガー信号として、周辺回路からの様々な状態信号を利用できるようにしたＭＣＵが提案されている。ここで、トリガー信号は、例えば、ＧＰＩＯ(ペリフェラル＃１)４１で所定の値を受信したとき、または、ＡＤＣ(ペリフェラル＃３)４３でのデータ変換が完了したときを検出して出力される信号である。
【００３０】
或いは、トリガー信号は、例えば、ＳＰＩ(ペリフェラル＃０)４０でのデータ送信または受信が完了したとき、または、タイマ(ペリフェラル＃２)４２のカウント値が所望の値になったときを検出して出力される信号である。若しくは、トリガー信号は、例えば、ＤＡＣでの出力が完了したとき、または、ＰＷＭでの出力が完了したなどを検出して出力される信号である。
【００３１】
このように、スキャッタギャザーモードとスキャッタギャザーモードで実行するタスク開始のトリガー信号として種々の信号が使える機能を組み合わせると、周辺回路(ペリフェラル＃０〜＃３等)の制御を、ＣＰＵコア３を動作させないで行うことができる。
【００３２】
上述したように、周辺回路の制御は、各周辺回路に備わった各種レジスタへの書き込みおよび読み出しで行うことができる。ここで、使用するレジスタへの書き込みおよび読み出しは、タスクとしてＤＭＡＣ１で行い、そのタスクの起動タイミングは、各種トリガー信号を利用すればよい。
【００３３】
このとき、周辺回路の複数のレジスタへの書き込みや読み出しを行うことになるが、通常これらのレジスタアドレスは連続しているとは限らない。そのため、例えば、ＤＭＡＣ１は、書き込みや読み出しを行うレジスタごとに１つのタスクとして実行することになるため処理サイクルが増大し、消費電力の増大を招くことになる。
【００３４】
なお、複数回の不連続なアドレスに対するＤＭＡＣによるアクセス効率化のために、基準アドレスと相対アドレスを用いて１つのタスクで実行することが考えられる。しかしながら、周辺回路の操作で頻出するレジスタへ１回だけ書き込んだり読み出したりするタスクを行う場合、処理サイクルを削減することは困難である。
【００３５】
以下、本実施例のＤＭＡ制御装置、マイクロコントローラおよびＤＭＡ制御方法を、添付図面を参照して詳述する。図３は、ＤＭＡ制御装置の第１実施例における設定レジスタ構成を示すブロック図である。
【００３６】
図３に示されるように、第１実施例のＤＭＡ制御装置(ＤＭＡＣ)１は、図２を参照して説明した基本機能設定レジスタ101〜103に対応する１１〜１３と共に、スキャッタギャザー設定レジスタ１４〜１６を含む。
【００３７】
すなわち、ＤＭＡＣ１は、基本機能設定レジスタとして、コンフィギュレーションレジスタ(DMAC_CONFIG)１１、DMAC_DST(デスティネーションアドレスレジスタ)１２、および、ソースアドレスレジスタ(DMAC_SRC)１３などを含む。
【００３８】
前述したように、ＤＭＡＣ１は、DMAC_SRC１３で指定されたアドレスからDMAC_CONFIG１１で指定された区間までのデータを読み出し、そのデータを、DMAC_DST１２で指定されたアドレスからDMAC_CONFIG１１で指定された区間まで書き込む機能を有する。ここで、本第１実施例のＤＭＡＣ１において、基本機能設定レジスタのDMAC_SRC１３は、イミディエイト(即値)レジスタ(DMAC_IMMEDIATE)とすることができる。すなわち、レジスタDMAC_SRC１３は、設定ビットの値によってDMAC_IMMEDIATEとして使うようになっている。
【００３９】
また、ＤＭＡＣ１は、スキャッタギャザー設定レジスタとして、実行するタスク数を設定するレジスタ(DMAC_TASK_NUM)１４および最初に実行するタスク(＃０)の基本機能設定レジスタの内容が格納されたアドレスを設定するレジスタ(DMAC_TASK_ADDR)１５を含む。これらDMAC_TASK_NUM１４およびDMAC_TASK_ADDR１５は、例えば、図２に示すＤＭＡＣに設けられていてもよい。本第１実施例のＤＭＡＣ１は、さらに、スキャッタギャザー設定レジスタとして、スキャッタギャザー動作(モード)の切り替え用のレジスタ(DMAC_SCATTER：第１レジスタ)１６が追加されている。
【００４０】
図３に示されるように、DMAC_SCATTER１６は、例えば、タスク＃０〜＃１５の１６個のタスクに対して３２ビットが割り当てられ、タスクごとに２ビットで４つの値が設定できるようになっている。すなわち、DMAC_SCATTER１６により、スキャッタギャザーで順次実行するタスクの動作をそれぞれ２ビットで設定し、設定によって各タスクでの処理内容を変更するようになっている。
【００４１】
図４は、図３に示すＤＭＡ制御装置における基本機能の動作を説明するための図である。ここで、図４は、各基本機能設定レジスタ(DMAC_CONFIG１１、DMAC_DST１２，DMAC_SRC１３)の詳細と通常の(スキャッタギャザーモードでない)タスクを１つ処理する際におけるデータのコピーの様子を示している。
【００４２】
具体的に、ＤＭＡＣ１における基本機能の動作の例として、レジスタDMAC_CONFIG１１、レジスタDMAC_DST１２およびレジスタDMAC_SRC１３に対して、次の値(アドレス)を設定した場合を考える。
DMAC_CONFIG ＝ 0x0000_0003
DMAC_DST ＝ 0x0000_2400
DMAC_SRC ＝ 0x0000_1000
【００４３】
すなわち、DMAC_CONFIG１１には、コピーしたいデータの数(３個：0x0000_0003)を設定し、DMAC_SR１３Cには、コピー元の先頭アドレス(0x0000_1000)を設定し、DMAC_DST１２には、コピー先の先頭アドレス(0x0000_2400)を設定する。
【００４４】
さらに、各基本機能設定レジスタ１１〜１３に対して、上記のように設定(レジスタに書き込み(write))した後、DMAC_ENABLEに対して、次の値を設定する。
DMAC_ENABLE ＝ 0x0000_00001
【００４５】
或いは、各基本機能設定レジスタ１１〜１３に対して所望の値を書き込んだ後、レジスタDMAC_START(図示しない)に対して「１(通常の１つのタスク実行開始を指示する値)」を書き込む。
【００４６】
これにより、図４に示されるように、ＤＭＡＣ１は、0x0000_1000から0x0000_1008のデータ(データ数＝３)が、バス５を介して読み出(read)され、0x0000_2400から0x0000_2408に対して、バス５を介して書き込まれる(３つの３２ビットデータがコピーされる)。
【００４７】
図５は、図３に示すＤＭＡ制御装置におけるスキャッタギャザー機能の動作を説明するための図であり、スキャッタギャザーモードを実行する際、複数タスクの実行にDMAC_CONFIG１１，DMAC_DST１２，DMAC_SRC１３の値がどのように読み出されるかを示している。
【００４８】
なお、スキャッタギャザー設定レジスタのDMAC_TASK_NUM１４には、実行したいタスクの数が設定され、DMAC_TASK_ADDR１５には、複数のタスクの実行に使用するレジスタの値が格納されているメモリ(ＳＲＡＭ２)のアドレスが設定される。
【００４９】
まず、ＳＲＡＭ２に対して、タスク＃０〜＃２を実行するための基本機能設定レジスタの内容を準備しておく。すなわち、図５に示されるように、３つのタスク＃０〜＃２に対応したDMAC_SRC１３、DMAC_DST１２およびDMAC_CONFIG１１の設定内容を予めＳＲＡＭ２に格納しておく。
【００５０】
具体的に、DMAC_TASK_NUM１４(スキャッタギャザーで実行するタスク数)＝３とし、DMAC_TASK_ADDR１５(最初に実行するタスク＃０の基本機能設定レジスタの内容が保存されているアドレス)＝0x2000_0000を設定する。
【００５１】
すなわち、DMAC_TASK_NUM＝３，DMAC_TASK_ADDR＝0x20000000が設定されているとき、例えば、レジスタDMAC_START(図示しない)に「２(スキャッタギャザーモード実行開始を指示する値)」を書き込むことで、ＤＭＡＣ１はスキャッタギャザーモードを開始する。
【００５２】
最初、DMAC_TASK_ADDR１５に書き込まれているアドレスから順にＳＲＡＭ２の値を読み出してDMAC_SRC１３，DMAC_DST１２，DMAC_CONFIG１１にコピーし、これら３つのレジスタの値に基づいて、ＤＭＡＣ１は、タスク＃０を実行する。すなわち、図５に示されるように、スキャッタギャザー機能(モード)を起動すると、ＤＭＡＣ１は、ＳＲＡＭ２の0x2000_0000から0x2000_0008の値を基本機能設定レジスタ(DMAC_SRC１３，DMAC_DST１２，DMAC_CONFIG１１)にコピーし、タスク＃０を実行する。
【００５３】
また、タスク＃０が完了したら、ＤＭＡＣ１は、ＳＲＡＭ２の0x2000_000Cから0x2000_0014の値を読み出して基本機能設定レジスタにコピーし、これら３つのレジスタの値に基づいてタスク＃１を実行する。さらに、ＤＭＡＣ１は、タスク＃１と同様に、タスク＃２も実行する。
【００５４】
図６は、図３に示すＤＭＡ制御装置の設定レジスタ構成の一例を説明するための図である。図３を参照して説明したように、各タスク＃０〜＃１５の設定ビットとしては２ビットが割り当てられているため、設定ビットの値(モード)としては、『０』〜『３』の４つを設定することができる。
【００５５】
すなわち、図６に示されるように、設定ビットの値(設定値)が『０』のとき、ＤＭＡＣ１は、通常の(一般的な)スキャッタギャザーに対応した動作を行う。また、設定値が『１』のとき、ＤＭＡＣ１は、ＳＲＡＭ２からDMAC_CONFIG１１の設定値を読み出さずに、例えば、ＤＭＡＣ１が直接DMAC_CONFIG ＝ 0x0000_0001としてタスクを実行する。
【００５６】
さらに、設定値が『２』のとき、ＤＭＡＣ１は、例えば、ＳＲＡＭ２からコピー元データの読み出しをせずに、タスク実行の際、DMAC_SRC１３に書かれた値をDMAC_DST１２に書き込み、書き込み値を即値指定する。そして、設定値が『３』のとき、ＤＭＡＣ１は、ＳＲＡＭ２からDMAC_CONFIG１１の設定値を読み出さずに、例えば、ＤＭＡＣ１が直接DMAC_CONFIG ＝ 0x0000_0001とし、かつ、書き込み値を即値指定する。
【００５７】
このように、第１実施例のＤＭＡ制御装置は、例えば、スキャッタギャザーモードで実行されるタスクは４つの動作モード(設定値『０』〜『３』)を備え、１６個分のタスク(＃０〜＃１５)について、それぞれ動作モードを設定できるようになっている。
【００５８】
次に、図７〜図１０を参照して、上述した設定ビット＝０〜３の動作を説明する、なお、図７〜図１０に示すフローチャートおいて、太線の処理ブロックは、バス５を介したＳＲＡＭ２(メモリ)からの読み出しアクセス処理を示し、二重線の処理ブロックは、バス５を介したＳＲＡＭ２への書き込みアクセス処理を示す。
【００５９】
図７は、図６に示す設定レジスタ構成において、設定ビット＝０(設定値が『０』)の動作の一例を説明するためのフローチャートである。上述したように、設定値が『０』のときの動作は、通常のスキャッタギャザーモードの処理と同様のものである。
【００６０】
図７に示されるように、設定値が『０』のとき、タスク設定および実行処理が開始すると、ステップＳＴ０１において、ＳＲＡＭ２からDMAC_SRC１３の値を読み出してDMAC_SRC１３に設定し、ステップＳＴ０２に進む。
【００６１】
ステップＳＴ０２では、ＳＲＡＭ２からDMAC_DST１２の値を読み出してDMAC_DST１２に設定し、ステップＳＴ０３に進み、ＳＲＡＭ２からDMAC_CONFIG１１の値を読み出してDMAC_CONFIG１１に設定し、ステップＳＴ０４に進む。
【００６２】
ステップＳＴ０４では、DMAC_SRC１３に設定された値(コピー元の先頭アドレス)を読み出し、ステップＳＴ０５に進んで、DMAC_DST１２に設定された値(コピー先の先頭アドレス)に、読み出した値(データ)を書き込む。
【００６３】
ここで、ステップＳＴ０１〜ＳＴ０４の処理は、バス５を介したＳＲＡＭ２からの読み出しアクセスになり、ステップＳＴ０５の処理は、バス５を介したＳＲＡＭ２への書き込みアクセスになる。
【００６４】
さらに、ステップＳＴ０６に進んで、DMAC_SRC１３を「＋４」インクリメントし、また、ステップＳＴ０７に進んで、DMAC_DST１２を「＋４」インクリメントし、ステップＳＴ０８に進む。ここで、ステップＳＴ０６およびＳＴ０７における「＋４」のインクリメントは単なる例であり、「＋４」に限定されるものではない。
【００６５】
ステップＳＴ０８では、DMAC_CONFIG１１のデータ数を「−１」デクリメントし、ステップＳＴ０９に進んで、データ数が１以上かどうか(データ数≧１)を判定する。ステップＳＴ０９において、データ数≧１が成立すると判定すると、ステップＳＴ０４に戻って同様の処理を繰り返し、データ数≧１が成立しない、すなわち、データ数が存在しないと判定すると、タスク設定および実行処理を完了(終了)する。
【００６６】
図８は、図６に示す設定レジスタ構成において、設定ビット＝１(設定値が『１』)の動作の一例を説明するためのフローチャートである。図８と、上述した図７の比較から明らかなように、設定値が『１』のとき、図７におけるステップＳＴ０３の処理は、ステップＳＴ１３に示されるバス５を使用しない処理に置き換えられている。
【００６７】
なお、図８におけるステップＳＴ１１，ＳＴ１２およびＳＴ１４〜ＳＴ１９の処理は、図７におけるステップＳＴ０１，ＳＴ０２およびＳＴ０４〜ＳＴ０９の処理と同様のものであり、その説明は省略する。
【００６８】
図８に示されるように、ステップＳＴ１２において、ＳＲＡＭ２からDMAC_DST１２の値を読み出してDMAC_DST１２に設定した後、ステップＳＴ１３に進んで、ＤＭＡＣ１がDMAC_CONFIG１１のデータ数を「１」に設定する。すなわち、設定値が『１』のとき、ＤＭＡＣ１は、ＳＲＡＭ２からDMAC_CONFIG１１の設定値を読み出さずに、DMAC_CONFIG ＝ 0x0000_0001として、直接、データ数を「１」に設定する。
【００６９】
なお、設定値が『１』のとき、上述したように、ＤＭＡＣ１が直接DMAC_CONFIG ＝ 0x0000_0001としている(データ数を１に設定している)ので、ステップＳＴ１９の判定は、必ずＮＯになってタスク設定および実行処理を完了することになる。
【００７０】
このように、設定値が『１』のときは、図７を参照して説明した設定値が『０』の処理におけるステップＳＴ０３のバス５を介したＳＲＡＭ２からの読み出しアクセスをなくすことができ、バスを介したメモリアクセスを１回削減することが可能になる。
【００７１】
図９は、図６に示す設定レジスタ構成において、設定ビット＝２(設定値が『２』)の動作の一例を説明するためのフローチャートである。図９と、前述した図７の比較から明らかなように、設定値が『２』のとき、図７におけるステップＳＴ０１の処理は、ステップＳＴ２１のように、レジスタDMAC_IMMEDIATE(１３)を使用した処理に置き換えられている。
【００７２】
さらに、図７におけるステップＳＴ０４およびＳＴ０５の処理は、ステップＳＴ２４の処理に置き換えられている。なお、図９におけるステップＳＴ２２，ＳＴ２３およびＳＴ２５〜ＳＴ２８の処理は、図７におけるステップＳＴ０２，ＳＴ０３およびＳＴ０６〜ＳＴ０９の処理と同様のものであり、その説明は省略する。
【００７３】
図９に示されるように、設定値が『２』のとき、タスク設定および実行処理が開始すると、ステップＳＴ２１において、ＳＲＡＭ２からDMAC_IMMEDIATE１３の値を読み出して、DMAC_IMMEDIATE１３に設定し、ステップＳＴ２２に進む。
【００７４】
さらに、ステップＳＴ２２において、ＳＲＡＭ２からDMAC_DST１２の値を読み出してDMAC_DST１２に設定し、ステップＳＴ２３で、ＳＲＡＭ２からDMAC_CONFIG１１の値を読み出してDMAC_CONFIG１１に設定した後、ステップＳＴ２４に進む。
【００７５】
ステップＳＴ２４では、DMAC_DST１２に対してDMAC_IMMEDIATE１３の値を書き込む。すなわち、DMAC_DST１２で示されるアドレスに書き込む値は、DMAC_IMMEDIATE(DMAC_SRCと共用)１３になるため、書き込む値を、ＳＲＡＭ２を介して読み出す処理(図７におけるステップＳＴ０４)が不要になる。その結果、前述した設定値が『０』の場合と比較して、メモリからの値の読み出し処理を１回削減することが可能になる。
【００７６】
図１０は、図６に示す設定レジスタ構成において、設定ビット＝３(設定値が『３』)の動作の一例を説明するためのフローチャートであり、上述した設定値が『１』のときの処理と設定値が『２』のときの処理を組み合わせたものに相当する。すなわち、図１０において、ステップＳＴ３３は、図８のステップＳＴ１３に対応し、ステップＳＴ３１およびＳＴ３４は、図９のステップＳＴ２１およびＳＴ２４に対応する。
【００７７】
図１０に示されるように、設定値が『３』のとき、タスク設定および実行処理が開始すると、ステップＳＴ３１において、ＳＲＡＭ２からDMAC_IMMEDIATE１３の値を読み出して、DMAC_IMMEDIATE１３に設定し、ステップＳＴ３２に進む。
【００７８】
さらに、ステップＳＴ３２において、ＳＲＡＭ２からDMAC_DST１２の値を読み出してDMAC_DST１２に設定し、ステップＳＴ３３に進んで、ＤＭＡＣ１がDMAC_CONFIG１１のデータ数を「１」に設定し、ステップＳＴ３４に進む。すなわち、設定値が『３』のとき、ＤＭＡＣ１は、ＳＲＡＭ２からDMAC_CONFIG１１の設定値を読み出さずに、DMAC_CONFIG ＝ 0x0000_0001として、直接、データ数を「１」に設定する。
【００７９】
ステップＳＴ３４では、DMAC_DST１２に対してDMAC_IMMEDIATE１３の値を書き込む。すなわち、DMAC_DST１２で示されるアドレスに書き込む値は、DMAC_IMMEDIATE(DMAC_SRCと共用)１３になるため、書き込む値を、ＳＲＡＭ２を介して読み出す処理(図７におけるステップＳＴ０４)が不要になる。以上により、前述した設定値が『０』の場合と比較して、メモリからの値の読み出し処理を２回削減することが可能になる。
【００８０】
図１１は、第１実施例のＤＭＡ制御装置におけるバスを介したアクセス回数の削減効果を説明するための図であり、上述した設定値が『０』〜『３』(設定ビット＝１〜３)の場合におけるバス５のアクセス回数の削減割合を示すものである。
【００８１】
図１１、並びに、図７〜図１０を参照して説明したように、バス５を介した書き込みアクセス回数は、設定値が『０』〜『３』のいずれの場合でも、１回(ステップＳＴ０５，ＳＴ１５，ＳＴ２４，ＳＴ３４)である。
【００８２】
一方、バス５を介した読み出しアクセス回数は、設定値が『０』の場合は４回(ステップＳＴ０１〜ＳＴ０４)であるのに対して、設定値が『１』の場合は３回(ステップＳＴ１１，ＳＴ１２，ＳＴ１４)になる。
【００８３】
また、バス５を介した読み出しアクセス回数は、設定値が『２』の場合も３回(ステップＳＴ２１〜ＳＴ２３)になる。さらに、バス５を介した読み出しアクセス回数は、設定値が『３』の場合は２回(ステップＳＴ３１，ＳＴ３２)になる。ただし、設定値が『１』〜『３』の場合、タスク設定および実行開始の前に、予めレジスタDMAC_SCATTER１６に対して適切な値を設定しておくことが求められる。
【００８４】
すなわち、図１１に示されるように、アクセス回数の削減割合(削減率)は、設定値が『０』の場合(５回)を基準として、設定値が『１』および『２』の場合(４回)は、２０％となり、そして、設定値が『３』の場合(３回)は、４０％となる。
【００８５】
このように、本実施例のＤＭＡ制御装置(ＤＭＡ制御方法)によれば、ＤＭＡ処理に求められるサイクル数を削減して消費電力を低減することができる。なお、図１１は、バス５を介したアクセス回数を示すのみであり、例えば、ＤＭＡＣ１およびＣＰＵ２の消費電力を考慮すると、本実施例を適用することによる消費電力低減の効果は、より一層大きなものとなる。
【００８６】
図１２は、ペリフェラル(周辺回路)の操作の一例を説明するための図であり、スキャッタギャザーモードを用いてＧＰＩＯ(汎用入出力ポート：図１におけるＧＰＩＯ(４１))のport#0から高レベル『Ｈ』(「１」)を出力させる処理を示すものである。
【００８７】
ここで、ＧＰＩＯにおいて、例えば、『Ｈ』を出力するには、レジスタGPIO_MODEに「１」(＝出力モード)を書き込み、レジスタGPIO_OUTに「１」(＝『Ｈ』出力)を書き込むことで実現可能なものとする。
【００８８】
すなわち、ＧＰＩＯのポート＃０の出力値を設定するために、レジスタGPIO_OUTの０ビットに「１」を書き込む。さらに、ＧＰＩＯのポート＃０を出力モードに設定するために、レジスタGPIO_MODEの［３：０］ビットに４‘ｈ１(１６進数で設定ビット＝１)を書き込む。
【００８９】
なお、設定したいペリフェラルの制御レジスタ(GPIO_OUT，GPIO_MODE)のアドレス(0xXXXX，0xYYYY)は、連続していないので、レジスタGPIO_OUTへの設定をタスク＃０で実行し、レジスタGPIO_MODEへの設定をタスク＃１としたスキャッタギャザーで実行する。
【００９０】
この場合、例えば、タスク＃０として、レジスタGPIO_OUTに「１」を書き込むタスク、タスク＃１として、レジスタGPIO_MODEに「１」を書き込むタスクとし、スキャッタギャザーモードを実行すればよいことになる。
【００９１】
なお、タスク＃０および＃１は、両方とも１つのアドレス(レジスタGPIO_OUTのアドレスとレジスタGPIO_MODEのアドレス)に対する書き込みで、書き込むべき値が予め「１」と分かっているので、設定値『３』の動作モードを用いたタスクとすればよい。
【００９２】
前述した図３に示されるように、レジスタDMAC_SCATTER１６は、例えば、３２ビットとされ、下位ビットから２ビットごとに１つのタスクの設定値を示すものとすれば、１回のレジスタ書き込みで１６個分のタスクの設定値を書き込むことが可能になる。こにより、レジスタDMAC_SCATTER１６の書き込みに要する処理サイクルの増加を抑えることができる。
【００９３】
上述したように、第１実施例のＤＭＡ制御装置によれば、例えば、ＣＰＵコア３を動作させることなく、ＤＭＡＣ１を用いて少ない処理サイクルで周辺回路(４１)を制御するためのレジスタアクセスを行うことが可能になる。
【００９４】
これにより、ＭＣＵの回路規模のうち大きな割合を占めるＣＰＵコア３を動作させずにＤＭＡＣ１によって処理を行うことができ、さらに、動作するＤＭＡＣ１の動作時間を短縮して、消費電力を低減することが可能になる。これらの効果は、第１実施例に限定されるものではなく、後述する各実施例でも、同様に発揮される。
【００９５】
なお、本実施例のＤＭＡ制御装置、マイクロコントローラおよびＤＭＡ制御方法は、様々な電子機器に対して適用可能である。特に、本実施例は、太陽電池，熱発電素子および振動発電素子など環境に存在するエネルギーをエネルギー源として利用する、超低消費電力が求められるようなワイヤレスセンサーノードに用いられるＭＣＵなどへの適用が有効なものと考えられる。
【００９６】
図１３は、ＤＭＡ制御装置の第２実施例における設定レジスタ構成を示すブロック図であり、図１４は、図１３に示すＤＭＡ制御装置の設定レジスタ構成の一例を説明するための図である。
【００９７】
図１３と、前述した図３の比較から明らかなように、第２実施例のＤＭＡＣ(ＤＭＡ制御装置)１は、図３に示す第１実施例と同様の構成を有している。すなわち、ＤＭＡＣ１は、基本機能設定レジスタとして、コンフィギュレーションレジスタ(DMAC_CONFIG)１１、DMAC_DST(デスティネーションアドレスレジスタ)１２、および、ソースアドレスレジスタ(DMAC_SRC)１３などを含む。
【００９８】
また、ＤＭＡＣ１は、スキャッタギャザー設定レジスタとして、実行するタスク数を設定するレジスタ(DMAC_TASK_NUM)１４および最初に実行するタスク(＃０)の基本機能設定レジスタの内容が格納されたアドレスを設定するレジスタ(DMAC_TASK_ADDR)１５を含む。さらに、ＤＭＡＣ１は、スキャッタギャザー設定レジスタとして、スキャッタギャザーモード切り替え用のレジスタ(DMAC_SCATTER)１６を含む。
【００９９】
ここで、図１３に示す第２実施例のＤＭＡＣ１におけるDMAC_SCATTER１６は、例えば、タスク＃０〜＃９の１０個のタスク16-0〜16-9に対して３２ビットが割り当てられ、タスクごとに３ビットで８つの値が設定できるようになっている。なお、残りの２ビットは、未使用ビットとされている。
【０１００】
このDMAC_SCATTER１６により、スキャッタギャザーで順次実行するタスクの動作をそれぞれ３ビットで設定し、設定によって各タスクでの処理内容を変更するようになっている。すなわち、図１４に示されるように、設定ビット＝１(設定値が『０』)〜設定ビット＝５(設定値が『５』)の６種類の動作モードが設定されるようになっている。
【０１０１】
なお、図１４では、設定ビット＝６および設定ビット＝７は、未定義とされているが、これらに対しても動作モードを設定すれば、最大８種類の動作モードを設定することができる。
【０１０２】
また、図２１を参照して後述する第４実施例では、スキャッタギャザーで順次実行するタスクの動作をそれぞれ４ビット(最大１６種類)で設定するが、この割り当てるビットの数は様々に変更することができる。さらに、ビット幅は、一例として３２ビットとしているが、６４ビット等であってもよいのはいうまでもない。
【０１０３】
図１４に示されるように、本第２実施例のＤＭＡＣ１による６種類のスキャッタギャザーの動作モードは、例えば、図６を参照して説明した４種類(設定値が『０』〜『３』)に加え、設定値が『４』および『５』の動作モードが設定されている。
【０１０４】
すなわち、図１４に示されるように、設定ビットの値(設定値)が『４』のとき、ＤＭＡＣ１は、ＳＲＡＭ２からDMAC_CONFIG１１の設定値を読み出さずに、例えば、ＤＭＡＣ１が直接DMAC_CONFIG ＝ 0x0000_0001とし、かつ、書き込み値を全て「０」に設定する。
【０１０５】
また、設定ビットの値(設定値)が『５』のとき、ＤＭＡＣ１は、ＳＲＡＭ２からDMAC_CONFIG１１の設定値を読み出さずに、例えば、ＤＭＡＣ１が直接DMAC_CONFIG ＝ 0x0000_0001とし、かつ、書き込み値を全て「１」に設定する。
【０１０６】
このように、第２実施例のＤＭＡ制御装置は、例えば、スキャッタギャザーモードで実行されるタスクは６つの動作モード(設定値『０』〜『５』)を備え、１０個分のタスク(＃０〜＃９)について、それぞれ動作モードを設定できるようになっている。
【０１０７】
図１５は、図１４に示す設定レジスタ構成において、設定ビット＝４(設定値が『４』)の動作の一例を説明するためのフローチャートである。図１５と、前述した図１０の比較から明らかなように、設定値が『４』のとき、図１０におけるステップＳＴ３１の処理は、省略されている。
【０１０８】
すなわち、設定値が『４』の動作モードでは、ステップＳＴ４２において、ＤＭＡＣ１が直接DMAC_CONFIG ＝ 0x0000_0001とし、さらに、ステップＳＴ４３において、DMAC_DST１２に対して0x0000_0000を書き込む。
【０１０９】
すなわち、図１５では、図１０のステップＳＴ３４におけるDMAC_DST１２に対してDMAC_IMMEDIATE１３を書き込む代わりに、ステップＳＴ４３において、DMAC_DST１２に対して0x0000_0000を書き込むようになっている。
【０１１０】
なお、図１５におけるステップＳＴ４１，ＳＴ４２，ＳＴ４４〜ＳＴ４６の処理は、図１０におけるステップＳＴ３２，ＳＴ３３，ＳＴ３５〜ＳＴ３７の処理と同様のものであり、その説明は省略する。
【０１１１】
このように、図１５に示す設定値が『４』の動作モードでは、書き込む値が0x0000_0000と決まっているので、図１０に示す設定値が『３』の動作モードと比較すると、ＳＲＡＭ２からDMAC_CONFIG１１の設定値を読み込む動作が不要となる。
【０１１２】
これにより、図１０を参照して説明した設定値が『３』の場合と比較して、メモリからの値の読み出し処理(バス５を介したアクセス回数)を、さらに、１回削減することが可能になる。すなわち、前述した設定値が『０』の場合と比較して、メモリからの値の読み出し処理を３回削減することができる。
【０１１３】
図１６は、図１４に示す設定レジスタ構成において、設定ビット＝５(設定値が『５』)の動作の一例を説明するためのフローチャートである。図１６と、上述した図１５の比較から明らかなように、設定値が『５』のとき、図１５におけるステップＳＴ４３の処理がＳＴ５３に置き換えられている。
【０１１４】
すなわち、設定値が『５』の動作モードでは、図１５のステップＳＴ４３におけるDMAC_DST１２に0x0000_0000を書き込む代わりに、ステップＳＴ５３において、DMAC_DST１２に0xFFFF_FFFFを書き込むようになっている。
【０１１５】
なお、図１６におけるステップＳＴ５１，ＳＴ５２，ＳＴ５４〜ＳＴ５６の処理は、上述した図１５におけるステップＳＴ４１，ＳＴ４２，ＳＴ４４〜ＳＴ４６の処理と同様のものである。
【０１１６】
すなわち、図１６に示す設定値が『５』の動作モードでは、設定値が『４』の動作モードにおけるステップＳＴ４３のDMAC_DST１２に0x0000_0000を書き込む処理を除いて、図１５に示す設定値が『４』の動作モードと同様である。
【０１１７】
これにより、図１０を参照して説明した設定値が『３』の場合と比較して、メモリからの値の読み出し処理(バス５を介したアクセス回数)を、さらに、１回削減することが可能になる。すなわち、前述した設定値が『０』の場合と比較して、メモリからの値の読み出し処理を３回削減することができる。
【０１１８】
なお、以上において、設定ビット＝７(設定値が『７』)として、例えば、次に実行するタスクの設定ビットの位置を、レジスタDMAC_SCATTER１６の最初に戻すことを指示するモードを設けてもよい。
【０１１９】
図１７は、第２実施例のＤＭＡ制御装置におけるバスを介したアクセス回数の削減効果を説明するための図であり、上述した設定値が『０』〜『５』(設定ビット＝１〜５)の場合におけるバス５のアクセス回数の削減割合を示すものである。すなわち、前述した図１１の設定値が『０』〜『３』の場合に加え、設定値が『４』および『５』の場合も含めて示すものである。
【０１２０】
図１７、並びに、図１５および図１６を参照して説明したように、バス５を介した書き込みアクセス回数は、設定値が『４』および『５』のいずれの場合も、２回(ステップＳＴ４１，ＳＴ４３、および、ＳＴ５１，ＳＴ５３)である。
【０１２１】
すなわち、バス５を介した読み出しアクセス回数は、設定値が『０』の場合の４回(ステップＳＴ０１〜ＳＴ０４)に対して、設定値が『４』および『５』の場合(２回)となり、アクセス回数の削減割合は、６０％となる。このように、第２実施例のＤＭＡ制御装置(ＤＭＡ制御方法)によれば、ＤＭＡ処理に求められるサイクル数をさらに削減して、消費電力を低減することが可能なのが分かる。
【０１２２】
図１８は、ＤＭＡ制御装置の第３実施例における設定レジスタ構成を示すブロック図である。図１８と、前述した図３の比較から明らかなように、第３実施例のＤＭＡ制御装置において、ＤＭＡＣ１は、さらに、タスクリピートレジスタ(DMAC_TASK_REPEAT：第２レジスタ)１７を含む。レジスタDMAC_TASK_REPEAT１７は、DMAC_TASK_NUM１４により数が指定される一連のタスクを連続して何回実行するかを指定するためのレジスタである。
【０１２３】
図１９および図２０は、図１８に示すＤＭＡ制御装置の動作を説明するための図である。ここで、図１９は、DMAC_TASK_NUM１４およびDMAC_TASK_REPEAT１７に対して、DMAC_TASK_NUM ＝ ４，DMAC_TASK_REPEAT ＝ ３と指定されたときに実行されるタスクの数と順序を示している。
【０１２４】
また、図２０は、このときの各タスク実行前に設定される基本機能設定レジスタ(DMAC_CONFIG１１，DMAC_DST１２，DMAC_SRCまたはDMAC_IMMEDIATE１３)の値がメモリ２上のどこから読み出されるかを示している。
【０１２５】
図１９に示されるように、レジスタDMAC_TASK_NUM１４には、DMAC_TASK_NUM ＝ 4が指定されているため、タスク＃０，＃１，＃２，＃３の３個のタスクが実行され、このシーケンスが、レジスタDMAC_TASK_REPEAT１７に設定されている３回だけ繰り返される。
【０１２６】
このとき、各タスク実行前に設定される基本機能設定レジスタの値は、図２０に示されるようにしてメモリ２から読み出される。具体的に、タスク＃０のSrc addr(DMAC_SRCまたはDMAC_IMMEDIATE１３)は0x2000_0000から、タスク＃０のDst addr(DMAC_DST１２)は0x2000_0004から、タスク＃０のconfig(DMAC_CONFIG１１)は0x2000_0008から、それぞれ設定値が読み出される。
【０１２７】
また、タスク＃１のSrc addrは0x2000_000Cから、タスク＃１のDst addrは0x2000_0010から、タスク＃１のconfigは0x2000_0014から、それぞれ設定値が読み出される。さらに、タスク＃２のSrc addrは0x2000_0018から、タスク＃２のDst addrは0x2000_001Cから、タスク＃２のconfigは0x2000_0020から、それぞれ設定値が読み出される。そして、タスク＃３のSrc addrは0x2000_0024から、タスク＃３のDst addrは0x2000_0028から、タスク＃３のconfigは0x2000_0020から、それぞれ設定値が読み出される。
【０１２８】
このように、第３実施例のＤＭＡ制御装置によれば、レジスタDMAC_TASK_REPEAT１７を設けることにより、DMAC_TASK_NUM１４により指定された一連のタスク(＃０〜＃３)を、DMAC_TASK_REPEAT１７に設定された回数だけ繰り返して実行させることができる。
【０１２９】
図２１は、ＤＭＡ制御装置の第４実施例における設定レジスタ構成のレジスタDMAC_SCATTER１６を説明するための図である。図２１に示されるように、タスク＃０〜＃７の設定ビットは、それぞれ４ビットであり、また、各タスク(例えば、＃０)の動作モード指定ビットは、３ビット(例えば、図１４に示す設定ビットの値０〜７に相当)とされている。さらに、各タスクのトリガー指定ビット(タスク実行開始のトリガーの種類を指定するためビット)は、１ビットとされている。
【０１３０】
ところで、近年開発されている組込機器用ＭＣＵでは、ＤＭＡＣ１によるタスク実行のトリガーを与える方法として、ＣＰＵ３からＤＭＡＣ１内のタスク実行を指示するためのレジスタへ書き込む以外の方法が準備されている。
【０１３１】
すなわち、近年のＭＣＵは、ＣＰＵ３からＤＭＡＣ１内のタスク実行を指示するためのレジスタへ書き込む機能に加えて、ＳＰＩ４０，ＧＰＩＯ４１，タイマ４２およびＡＤＣ４３などの周辺回路から、ＤＭＡＣ１へトリガー信号を出力する機能を備えている。
【０１３２】
具体的に、例えば、ＳＰＩ４０は、ＳＰＩ Ｉ／Ｆからデータの送信や受信が完了したとき、また、ＧＰＩＯ４１は、入力信号の信号レベルに変化があったときに、トリガー信号を出力する。
【０１３３】
さらに、タイマ４２は、カウンタの値が所定の値になったとき、そして、ＡＤＣ４３は、ＡＤＣ Ｉ／Ｆから入力されるアナログ信号のデジタル値への変換が完了したときに、トリガー信号を出力する。
【０１３４】
図２２は、図２１に示す設定レジスタ構成の一例を説明するための図である。図２２と、前述した図１４の比較から明らかなように、本第４実施例において、各タスク＃０〜＃７の設定ビットの値０〜７(下位３ビット)は、図１４に示す第２実施例における設定ビット０〜７(３ビット)と同様の動作を指定する。
【０１３５】
また、本第４実施例において、各タスク＃０〜＃７の設定ビットの上位１ビットは、タスク実行開始のトリガーの種類を指定するために使用され、例えば、設定ビット(上位１ビット)の値が０の場合、タスク開始トリガーは、前のタスクが完了したときが指定される。また、例えば、設定ビット(上位１ビット)の値が０の場合、タスク開始トリガーは、ＤＭＡＣ１が周辺回路からトリガー信号を受信したときが指定される。
【０１３６】
図２３は、本実施例のＤＭＡ制御装置が適用されるワイヤレスセンサーノードの一例を示すブロック図である。図２３に示されるように、ワイヤレスセンサーノード(無線端末)は、ＭＣＵ(マイクロコントローラ)，無線モジュール６０，センサー電源６１および温度センサー６３を含む。
【０１３７】
ＭＣＵは、前述した図１と同様のものであり、ＤＭＡＣ１，メモリ２，ＣＰＵ３，ＳＰＩ４０，ＧＰＩＯ４１，タイマ４２およびＡＤＣ４３を含み、それぞれバス５を介して接続されている。なお、ＤＭＡＣ１に対しては、各周辺回路(ＳＰＩ４０，ＧＰＩＯ４１，タイマ４２およびＡＤＣ４３)からトリガー信号が入力されるようになっている。
【０１３８】
図２３を参照して、ＣＰＵ３を用いることなく、温度センサー６３からのセンサー出力電圧Ｖosを一定間隔でデジタル値に変換し、ＳＰＩ Ｉ／Ｆ(ＳＰＩ４０)を介して外部の無線モジュール６０に出力する処理動作を説明する。
【０１３９】
ここで、ＳＰＩ４０は、例えば、無線通信機能を持つ無線モジュール６０に繋がっており、無線モジュール６０は、例えば、ＳＰＩ４０を介して受け取ったデータをサーバへ無線送信する。
【０１４０】
センサー電源６１は、例えば、ＭＣＵのＧＰＩＯ４１からの入力信号が高レベル『Ｈ』＝ＭＣＵの電源電圧、または、低レベル『Ｌ』＝ＭＣＵの設置電圧を受け取り、『Ｈ』のときは温度センサー６３への電力供給を行い、『Ｌ』のときは電力供給を行わない。温度センサー６３は、センサー電源６１から電力供給を受けている間、周囲の温度を測定し、アナログのセンサー電圧ＶosとしてＡＤＣ４３に出力する。
【０１４１】
ＳＰＩ４０，ＧＰＩＯ４１，タイマ４２並びにＡＤＣ４３の制御および動作に関わる各種設定レジスタは、予め適切に設定されている。ここで、ＳＰＩ４０は、例えば、ＳＰＩ内部に設けられた送信データレジスタに対して送信したいデータを書き込むことで、データの送信を開始する。
【０１４２】
また、ＧＰＩＯ４１は、例えば、ＧＰＩＯ内部に設けられたレジスタGPIO_OUTに『１』を書き込むと『Ｈ』を出力し、『０』を書き込むと『Ｌ』を出力する。さらに、ＡＤＣ４３は、例えば、ＡＤＣ内部に設けられたレジスタSTARTに『１』を書き込むことで、アナログ-デジタル変換動作を開始する。
【０１４３】
図２４は、図２３のワイヤレスセンサーノード(ＤＭＡＣ１)におけるスキャッタギャザー設定レジスタのDMAC_SCATTER１６の設定の一例を説明するための図である。図２４に示されるように、タスク＃０の設定ビット(４ビット)＝１３，タスク＃１の設定ビット＝５，タスク＃２の設定ビット＝１２，そして，タスク＃３の設定ビット＝１とする。なお、レジスタDMAC_TASK_NUM１４は、DMAC_TASK_NUM ＝ ４と設定されているものとする。
【０１４４】
図２５は、図２３に示すワイヤレスセンサーノードの動作の一例を説明するための図である。図２５の概略を説明すると、まず、(Ａ)において、タイマ４２がＤＭＡＣ１へトリガー信号を出力し、(Ｂ)において、ＤＭＡＣ１がＧＰＩＯ４１のレジスタGPIO_OUTに『１』を書き込む(タスク＃０)。
【０１４５】
次に、(Ｃ)において、ＤＭＡＣ１がＡＤＣ４３のレジスタSTARTに『１』を書き込み(タスク＃１)、(Ｄ)において、ＡＤＣ４３が温度センサー６３からのセンサー出力電圧Ｖosをデジタル値に変換する。さらに、(Ｅ)において、ＡＤＣ４３がＤＭＡＣ１へトリガー信号を出力し、(Ｆ)において、ＤＭＡＣ１がＧＰＩＯ４１のレジスタGPIO_OUTに『０』を書き込む(タスク＃２)。
【０１４６】
そして、(Ｇ)において、ＤＭＡＣ１がＡＤＣ４３のデジタル値を読み出し、ＳＰＩ４０の送信データレジスタに対して読み出したデジタル値(データ)を書き込み(タスク＃３)、(Ｈ)において、ＳＰＩ４０がデータを出力する。
【０１４７】
すなわち、(Ａ)において、タイマ４２は、ＤＭＡＣ１に対して、一定間隔でトリガー信号を出力する。さらに、(Ｂ)において、タイマ４２からのトリガー信号を受信したＤＭＡＣ１は、タスク＃０の設定ビットの上位１ビットが『１』であるか否かを確認する。
【０１４８】
図２４に示されるように、タスク＃０の上位１ビットは『１』であることから、ＤＭＡＣ１は、トリガー信号によるタスク実行を開始するべく、ＳＲＡＭ(メモリ)２に割り当てられている0x2000_0000から0x2000_0008の値を読み出す。そして、読み出した値を、基本機能設定レジスタに書き込む。
【０１４９】
基本機能設定レジスタに対する書き込み処理が終了すると、基本機能設定レジスタの値に従ってタスク＃０の実行、すなわち、ＧＰＩＯ４１のレジスタGPIO_OUTに『１』を書き込む。
【０１５０】
さらに、GPIO_OUTに『１』が書き込まれたＧＰＩＯ４１は、出力信号を『Ｈ』に設定する。この『Ｈ』信号を受け取ったセンサー電源６１は、温度センサー６３に対する電力供給を開始する。電力が供給された温度センサー６３は、周囲温度を測定し、アナログ電圧としてセンサー出力電圧Ｖosを出力する。
【０１５１】
そして、(Ｃ)において、タスク＃０を完了したＤＭＡＣ１は、タスク＃１の設定ビットの上位１ビットが『１』であるか否かを確認する。図２４に示されるように、タスク＃１の上位１ビットは『０』であることから、ＤＭＡＣ１は、前のタスク完了により次のタスク実行を開始するべく、ＳＲＡＭ２に割り当てられている0x2000_000Cから0x2000_0014の値を読み出し、基本機能設定レジスタに書き込む。この書き込み処理の終了後、基本機能設定レジスタの値に従ってタスク＃１の実行、すなわち、ＡＤＣ４３のレジスタSTARTに『１』を書き込む。
【０１５２】
ここで、タスク＃１を完了したＤＭＡＣ１は、タスク＃２の設定ビットの上位ビットが『１』であるか否かを確認する。図２４に示されるように、タスク＃２の上位１ビットは『１』であることから、ＤＭＡＣ１は、タスク＃２の実行開始信号であるトリガー信号の受信を待つ。
【０１５３】
さらに、(Ｄ)において、レジスタSTARTに『１』が書き込まれたＡＤＣ４３は、アナログ入力電圧(Ｖos)をデジタル値に変換し、変換した値をデータレジスタに書き込み、(Ｅ)において、ＡＤＣ４３がＤＭＡＣ１へトリガー信号を出力する。
【０１５４】
次に、(Ｆ)において、ＡＤＣ４３からのトリガーを受信したＤＭＡＣ１は、タスク＃２の設定ビットの上位１ビットが『１』であるか否かを確認する。図２４に示されるように、タスク＃２の上位１ビットは『１』であることから、ＤＭＡＣ１は、トリガー信号受信によるタスク実行を開始するべく、ＳＲＡＭ２に割り当てられている0x2000_0018から0x2000_0020の値を読み出し、基本機能設定レジスタへ書き込む。
【０１５５】
書き込み処理の終了後、基本機能設定レジスタの値に従ってタスク＃２の実行、すなわち、ＧＰＩＯ４１のレジスタGPIO_OUTに『０』を書き込む。また、レジスタGPIO_OUTに『０』が書き込まれたＧＰＩＯ４１は、出力信号を『Ｌ』に設定する。この『Ｌ』の信号を受け取ったセンサー電源６１は、温度センサー６３に対する電力供給を停止する。
【０１５６】
さらに、(Ｇ)において、タスク＃２を完了したＤＭＡＣ１は、タスク＃３の設定ビットの上位１ビットが『１』であるか否かを確認する。図２４に示されるように、タスク＃３の上位１ビットは『０』であることから、ＤＭＡＣ１は、前のタスク完了により次のタスク実行を開始するべく、ＳＲＡＭに割り当てられている0x20000024から0x2000_002Cの値を読み出し、基本機能設定レジスタへ書き込む。書き込み終了後、基本機能設定レジスタの値に従ってタスク＃の実行、すなわち、ＡＤＣ４３のデータレジスタの値を読み出し、ＳＰＩ４０の送信データレジスタに書き込む。
【０１５７】
ここで、ＤＭＡＣ１は、DMAC_TASK_NUM ＝ ４であることからスキャッタギャザーモードで実行するタスクの数が４であり、既に、タスク＃０〜＃３の４つのタスクを実行済みであることから、次に実行するタスクがないことを判定し、動作を終了する。
【０１５８】
そして、(Ｈ)において、送信データレジスタに値が書き込まれたＳＰＩ４０は、その書き込まれた値をＳＰＩ Ｉ／Ｆを介して無線モジュール６０に出力する。ＳＰＩ Ｉ／Ｆを介してデータを受け取った無線モジュール６０は、無線チャネルを介してサーバなどに対して、受け取ったデータを送信する。なお、上述した(Ａ)〜(Ｈ)の一連の処理は、タイマ４２から出力されるトリガー信号に基づいて、一定間隔で行われることになる。
【０１５９】
図２６は、図２３に示すＳＲＡＭ(メモリ)２に保存されている各タスクの実行開始前にＤＭＡ制御装置(ＤＭＡＣ１)の基本機能設定レジスタに読み込まれる値の一例を示す図である。
【０１６０】
ここで、タスク＃０および＃１は、前述した図２２の設定ビットの下位３ビットにおいて、設定ビット＝５(設定値が『５』)で指定されるモードで動作する。なお、設定値が『５』の動作モードは、図１４および図１６を参照して説明した通りである。
【０１６１】
そのため、レジスタSrc addr(DMAC_SRCまたはDMAC_IMMEDIATE１３)、レジスタconfig(DMAC_CONFIG１１)に設定される0x2000_0000，0x2000_0008，0x2000_000C，0x2000_0014には、どんな値が設定されていてもよい(don't care)。
【０１６２】
ここで、書き込み先アドレスであるレジスタGPIO_OUT(例えば、タスク＃０のDst addr：DMAC_DST１２)とレジスタSTART(例えば、タスク＃１のDst addr：DMAC_DST１２)の値は、それぞれ0x2000_0004および0x2000_0010に設定されている。
【０１６３】
また、タスク＃２は、前述した図２２の設定ビットの下位３ビットにおいて、設定ビット＝４(設定値が『４』)で指定されるモードで動作する。なお、設定値が『４』の動作モードは、図１４および図１５を参照して説明した通りである。
【０１６４】
そのため、レジスタSrc addr(１３)、レジスタconfig(１１)に設定される0x2000_0018，0x2000_0020には、どんな値が設定されていてもよい(don't care)。ここで、書き込み先アドレスであるレジスタGPIO_OUT(１２)の値は、0x2000_001Cに設定されている。
【０１６５】
さらに、タスク＃３は、前述した図２２の設定ビットの下位３ビットにおいて、設定ビット＝１(設定値が『１』)で指定されるモードで動作する。なお、設定値が『１』の動作モードは、図６および図８を参照して説明した通りである。
【０１６６】
そのため、レジスタconfig(１１)に設定される0x2000_002Cには、どんな値が設定されていてもよい(don't care)。ここで、読み出し先アドレスであるＡＤＣ４３のデータレジスタの値と、書き込み先アドレスであるＳＰＩ４０の送信データレジスタの値は、それぞれ0x2000_0024および0x2000_0028に設定されている。
【０１６７】
上述した動作により、ＤＭＡＣ１を用いて温度センサー６３の値を取得し、無線チャネルを介してサーバへ送信するワイヤレスセンサーノードの機能が実現される。なお、上述した各種レジスタの値の読み出しおよび書き込みは、例えば、ＣＰＵ３を用いて行うこともできるが、ＣＰＵ３はＤＭＡＣ１と比較して回路規模が大きいため、ＤＭＡＣ１を用いて行う場合よりも消費電力が大きくなる。
【０１６８】
また、ＣＰＵ３で実行するプログラムは、例えば、ＳＲＡＭ２から読み出すことになるため、バス５のアクセス回数が増えることからも、ＤＭＡＣ１を用いて行う場合よりも消費電力が大きくなる。
【０１６９】
さらに、同じスキャッタギャザーモードを備えるＤＭＡＣを用いて行う場合と比較しても、本実施例によれば、各タスクの処理サイクルは、図１７を参照して説明したように、最大６０％削減することができる。すなわち、本実施例によれば、より少ない処理サイクル、すなわち、より短い時間で処理を完了することができ、しかも、消費電力を削減することが可能である。
【０１７０】
図２７は、本実施例のＤＭＡ制御装置の一例を示すブロック図である。図２７に示されるように、ＤＭＡ制御装置(ＤＭＡＣ)１は、制御部８１，コンフィギュレーション値選択回路８２，書き込み値生成回路８３，タスク数判定回路８４，繰り返し回数判定回路８５および設定値アドレス生成回路８６を含む。
【０１７１】
ここで、コンフィギュレーション値選択回路８２，書き込み値生成回路８３，タスク数判定回路８４，繰り返し回数判定回路８５および設定値アドレス生成回路８６は、制御部８１を介してバス５に繋がれている。
【０１７２】
さらに、ＤＭＡＣ１は、例えば、図１８を参照して説明したように、基本機能設定レジスタおよびスキャッタギャザー設定レジスタを含む。基本機能設定レジスタは、DMAC_CONFIG１１、DMAC_DST１２、および、DMAC_SRCまたはDMAC_IMMEDIATE１３を含む。また、スキャッタギャザー設定レジスタは、DMAC_TASK_NUM１４、DMAC_TASK_ADDR１５、DMAC_SCATTER(第１レジスタ)１６およびDMAC_TASK_REPEAT(第２レジスタ)１７を含む。
【０１７３】
さらに、基本機能設定レジスタ(１１〜１３)およびスキャッタギャザー設定レジスタ(１４〜１７)は、図示しないが、各回路(８２〜８６)および制御部８１に接続されている。なお、図２７は、ＤＭＡＣ１の単なる一例を示すものであり、様々な変形および変更が可能なのはいうまでもない。
【０１７４】
図２８は、図２７に示すＤＭＡ制御装置におけるコンフィギュレーション値選択回路８２および書き込み値生成回路８３の一例を示すブロック図である。図２８に示されるように、コンフィギュレーション値選択回路８２は、選択切り出し部８２１および選択部８２２を含む。このコンフィギュレーション値選択回路８２は、レジスタDMAC_SRCまたはDMAC_IMMEDIATE１３が出力する値をDMAC_SRCのアドレスとして使うかレジスタDMAC_IMMEDIATEとして使うかの選択信号を生成する。
【０１７５】
選択切り出し部８２１は、３２ビットのレジスタDMAC_SCATTER１６の値のうち、例えば、現在実行中のタスク番号の位置の４ビットを切り出して出力する。選択部８２２は、入力される４ビットの値から１つのタスク実行でＤＭＡＣ１によって書き込まれる値の数を、レジスタDMAC_CONFIG１１の値にするか『１』にするかを選択する。
【０１７６】
選択部８２２は、例えば、図１４を参照して説明したように、４ビットの入力値が『１』，『３』，『４』および『５』のときは『１』を選択し、それ以外のときはレジスタDMAC_CONFIG１１の値を選択して出力する。
【０１７７】
また、図２８に示されるように、書き込み値生成回路８３は、書き込みデータバッファ８３１および選択部８３２を含み、例えば、ＤＭＡＣ１がコピー先アドレスに書き込む値を生成する。選択部８３２は、コンフィギュレーション値選択回路８２(選択切り出し部８２１)から出力される４ビットの値に基づいて、レジスタDMAC_IMMEDIATEの値，『０』，『１』，または，読み込みデータバッファ８３１の値にするかを選択する。
【０１７８】
例えば、図１４を参照して説明したように、４ビットの入力値が『０』および『１』のときは読み込みデータバッファ８３１の値を選択し、『２』および『３』のときはレジスタDMAC_IMMEDIATE(１３)の値を選択する。そして、４ビットの入力値が『４』のときは『０』を選択し、４ビットの入力値が『５』のときは『１』を選択する。
【０１７９】
読み込みデータバッファ８３１には、設定ビットの値が『０』，『１』のとき、制御部８１は、バス５を介してレジスタDMAC_SRC(１３)に設定されているアドレスから始まり、レジスタDMAC_CONFIG１１に設定されている個数のデータが保存される。
【０１８０】
なお、４ビットの入力値が『０』，『１』のときは、このデータをレジスタDMAC_DST１２に設定されているアドレスから始まるメモリ空間に対して、レジスタDMAC_CONFIG１１に設定されている個数のデータを書き込むことでタスクを実行する。
【０１８１】
図２９は、図２７に示すＤＭＡ制御装置におけるタスク数判定回路および繰り返し回数判定回路の一例を示すブロック図であり、図２９(a)はタスク数判定回路８４を示し、図２９(b)は繰り返し回数判定回路８５を示す。
【０１８２】
図２９(a)に示されるように、タスク数判定回路８４は、比較部８４１，レジスタ(TASK_COUNT)８４２およびインクリメント部８４３を含み、スキャッタギャザーモード実行中(スキャッタギャザー動作中)に、何番のタスクを実行するかの制御信号を出力する。レジスタTASK_COUNT８４２は、制御部８１からタスクの完了通知を受け取り、インクリメント部８４３により値をインクリメント(＋１)する。
【０１８３】
比較部８４１は、レジスタDMAC_TASK_NUM１４から１回のスキャッタギャザーモードにより実行するタスク数を受け取り、TAK_COUNT８４２の値と比較し、２つの値が同一のときは、所望の数のタスク完了を制御部８１に通知する。
【０１８４】
図２９(b)に示されるように、繰り返し回数判定回路８５は、比較部８５１，レジスタ(REPEAT_COUNT)８５２およびインクリメント部８５３を含み、スキャッタギャザーモード実行中に、一連のタスク実行を何回繰り返したか判定する。レジスタREPEAT_COUNT８５２は、制御部８１から一連のタスク実行完了通知を受け取り、インクリメント部８５３により値をインクリメントする。
【０１８５】
比較部８５１は、レジスタDMAC_TASK_REPEAT１７の値を受け取り、REPEAT_COUNT８５２の値と比較し、２つの値が同一のときは、所望の繰り返し回数だけ一連のタスク実行を完了したとして制御部８１に通知する。
【０１８６】
図３０は、図２７に示すＤＭＡ制御装置における設定値アドレス生成回路の一例を示すブロック図である。図３０に示されるように、設定値アドレス生成回路８６は、加算部８６１および乗算部８６２を含み、一連のタスク実行前に基本機能設定レジスタに読み込まれる値がメモリ２のどのアドレスに書き込まれているかを制御部８１に通知する。
【０１８７】
すなわち、設定値アドレス生成回路８６は、レジスタDMAC_SRC(１３)，DMAC_DST１２およびDMAC_CONFIG１１の値が、ＳＲＡＭ２におけるどのアドレスに書き込まれているかを制御部８１に通知する。
【０１８８】
例えば、タスク＃０を実行するのに求められる基本機能設定レジスタの値が保存されているアドレスは、レジスタDMAC_TASK_ADDR１５に保存されている。具体的に、１つのタスクに対して、レジスタDMAC_SRC，DMAC_DSTおよびDMAC_CONFIGの３２ビットデータが３個の場合を考える。さらに、本実施例のＤＭＡＣ１が搭載されているＭＣＵがバイトアドレッシング方式(８ビットごとに１つのアドレスを割り当てる)を採用しているものとする。
【０１８９】
このとき、タスク＃０の基本機能設定レジスタの値は、レジスタDMAC_TASK_ADDR１５に保存されているアドレスをｎとすると、例えば、ｎからｎ＋１１で示されるアドレスのＳＲＡＭ２上に保存されている。
【０１９０】
また、タスク＃１ｎに対しては、ｎ＋１２からｎ＋２３になり、同様に、タスク＃ｍに対しては、ｎ＋１２×ｍからｎ＋１２×(ｍ＋１)−１になる。従って、設定値アドレス生成回路８６は、(レジスタDMAC_TASK_ADDR１５のアドレス)＋(レジスタTACK_COUNT８４２の値)×１２を制御部８１に出力する。
【０１９１】
なお、制御部８１は、ＣＰＵ３からバス５を介して行われる基本機能設定レジスタ(１１〜１３)およびスキャッタギャザー設定レジスタ(１４〜１７)への値の書き込みおよび読み出し、並びに、各種回路(８２〜８６)の制御を行う。
【０１９２】
すなわち、制御部８１は、各種回路からの信号を受け取って１つのタスク、或いは、スキャッタギャザーモードを実行するための各種制御信号を各種回路に出力する。さらに、制御部８１は、タスク実行時に行われるバス５を介したデータの読み込みおよび書き込みも制御する。
【０１９３】
以上、実施形態を説明したが、ここに記載したすべての例や条件は、発明および技術に適用する発明の概念の理解を助ける目的で記載されたものであり、特に記載された例や条件は発明の範囲を制限することを意図するものではない。また、明細書のそのような記載は、発明の利点および欠点を示すものでもない。発明の実施形態を詳細に記載したが、各種の変更、置き換え、変形が発明の精神および範囲を逸脱することなく行えることが理解されるべきである。
【０１９４】
以上の実施例を含む実施形態に関し、さらに、以下の付記を開示する。
（付記１）
基本機能設定レジスタと、
前記基本機能設定レジスタに書き込むデータを、バスを介して読み出しせずに直接設定してタスクを実行するスキャッタギャザー設定レジスタと、を有する、
ことを特徴とするＤＭＡ制御装置。
【０１９５】
（付記２）
前記基本機能設定レジスタは、データ数を規定するコンフィギュレーションレジスタを含み、
前記ＤＭＡ制御装置は、さらに、前記コンフィギュレーションレジスタに対して、前記コンフィギュレーションレジスタの値または予め定められた値を選択するコンフィギュレーション値選択回路を有する、
ことを特徴とする付記１に記載のＤＭＡ制御装置。
【０１９６】
（付記３）
前記基本機能設定レジスタは、コピー先アドレスを設定するデスティネーションアドレスレジスタを含み、
前記ＤＭＡ制御装置は、さらに、前記デスティネーションアドレスレジスタに対して、直接書き込む値を生成する書き込み値生成回路を有する、
ことを特徴とする付記１に記載のＤＭＡ制御装置。
【０１９７】
（付記４）
前記スキャッタギャザー設定レジスタは、複数のスキャッタギャザー動作を切り替える第１レジスタを含む、
ことを特徴とする付記１乃至付記３のいずれか１項に記載のＤＭＡ制御装置。
【０１９８】
（付記５）
前記スキャッタギャザー設定レジスタは、一連のタスクを連続して何回実行するかを指定する第２レジスタを含む、
ことを特徴とする付記４に記載のＤＭＡ制御装置。
【０１９９】
（付記６）
さらに、前記第２レジスタの値を受け取り、スキャッタギャザー動作中に、前記一連のタスクの実行を何回繰り返したか判定する繰り返し回数判定回路を有する、
ことを特徴とする付記５に記載のＤＭＡ制御装置。
【０２００】
（付記７）
さらに、前記一連のタスクの実行前に、前記基本機能設定レジスタに読み込まれる値がメモリのどのアドレスに書き込まれているかを出力する設定値アドレス生成回路を有する、
ことを特徴とする付記５または付記６に記載のＤＭＡ制御装置。
【０２０１】
（付記８）
さらに、スキャッタギャザー動作中に、何番のタスクを実行するかの制御信号を出力するタスク数判定回路を有する、
ことを特徴とする付記１乃至付記７のいずれか１項に記載のＤＭＡ制御装置。
【０２０２】
（付記９）
付記１乃至付記８のいずれか１項に記載のＤＭＡ制御装置と、
メモリと、
ＣＰＵと、
複数の周辺回路と、
前記ＤＭＡ制御装置，前記メモリ，前記ＣＰＵおよび複数の前記周辺回路を繋ぐバスと、を有する、
ことを特徴とするマイクロコントローラ。
【０２０３】
（付記１０）
スキャッタギャザーモードを有するＤＭＡ制御方法であって、
前記スキャッタギャザーモードは、基本機能設定レジスタに書き込むデータを、バスを介して読み出しせずに直接設定してタスクを実行する、のを含む、
ことを特徴とするＤＭＡ制御方法。
【０２０４】
（付記１１）
前記基本機能設定レジスタにおける、データ数を規定するコンフィギュレーションレジスタに設定する値を、前記バスを介してメモリから読み出すことなく、予め定められた値に設定する、のを含む、
ことを特徴とする付記１０に記載のＤＭＡ制御方法。
【０２０５】
（付記１２）
前記基本機能設定レジスタにおける、コピー先アドレスを規定するデスティネーションアドレスレジスタに設定する値を、前記バスを介してメモリから読み出すことなく、直接生成して書き込む、のを含む、
ことを特徴とする付記１０に記載のＤＭＡ制御方法。
【０２０６】
（付記１３）
前記スキャッタギャザーモードは、複数設けられ、
複数の前記スキャッタギャザーモードの設定によって、各タスクによる処理内容を変更する、のを含む、
ことを特徴とする付記１０乃至付記１２のいずれか１項に記載のＤＭＡ制御方法。
【０２０７】
（付記１４）
前記スキャッタギャザーモードは、一連のタスクを連続して何回実行するかを指定する、のを含む、
ことを特徴とする付記１３に記載のＤＭＡ制御方法。
【０２０８】
（付記１５）
前記スキャッタギャザーモードは、前記一連のタスクの実行を何回繰り返したか判定する、のを含む、
ことを特徴とする付記１４に記載のＤＭＡ制御方法。
【符号の説明】
【０２０９】
１    ＤＭＡ制御装置(ＤＭＡＣ)
２    メモリ(ＳＲＡＭ)
３    ＣＰＵ(ＣＰＵコア)
５    バス
４０    シリアルペリフェラルインターフェース(ＳＰＩ)
４１    汎用入出力ポート(ＧＰＩＯ)
４２    タイマ
４３    アナログ-デジタル変換器(ＡＤＣ)
１１，101    DMAC_CONFIG
１２，102    DMAC_DST
１３，103    DMAC_SRC
１４    DMAC_TASK_NUM
１５    DMAC_TASK_ADDR
１６    DMAC_SCATTER(第１レジスタ)
１７    DMAC_TASK_REPEAT(第２レジスタ)
８１    制御部
８２    コンフィギュレーション値選択回路
８３    書き込み値生成回路
８４    タスク数判定回路
８５    繰り返し回数判定回路
８６    設定値アドレス生成回路
【図１】
0006467935.tif 000002
【図２】
0006467935.tif 000003
【図３】
0006467935.tif 000004
【図４】
0006467935.tif 000005
【図５】
0006467935.tif 000006
【図６】
0006467935.tif 000007
【図７】
0006467935.tif 000008
【図８】
0006467935.tif 000009
【図９】
0006467935.tif 000010
【図１０】
0006467935.tif 000011
【図１１】
0006467935.tif 000012
【図１２】
0006467935.tif 000013
【図１３】
0006467935.tif 000014
【図１４】
0006467935.tif 000015
【図１５】
0006467935.tif 000016
【図１６】
0006467935.tif 000017
【図１７】
0006467935.tif 000018
【図１８】
0006467935.tif 000019
【図１９】
0006467935.tif 000020
【図２０】
0006467935.tif 000021
【図２１】
0006467935.tif 000022
【図２２】
0006467935.tif 000023
【図２３】
0006467935.tif 000024
【図２４】
0006467935.tif 000025
【図２５】
0006467935.tif 000026
【図２６】
0006467935.tif 000027
【図２７】
0006467935.tif 000028
【図２８】
0006467935.tif 000029
【図２９】
0006467935.tif 000030
【図３０】
0006467935.tif 000031