以下に、本発明に係るDMAC(DMAコントローラ)の実施の形態を図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
実施の形態1.
図1は、実施の形態1に係るDMACを備えたMCUの構成を示す図である。同図に示すように、MCU(Micro Controller Unit)100は、高速動作(高い周波数での動作)するCPUバス1とCPUバス1よりも低速動作(低い周波数での動作)を行うIOバス2を含んでおり、1チップの半導体集積回路装置で構成されている。
CPUバス1には、CPU11から高速アクセス可能な内蔵RAM(記憶装置)10、MCU100を制御する中央演算処理装置(以下、CPU11という)、CPU11が実行するプログラムを格納する命令ROM(Read Only Memory)12が接続されている。
IOバス2には、バス権要求の競合を調停するBSC(Bus State Controller)14、計時用のタイマ15、DMA転送を制御するDMAコントローラ(以下、DMAC20という)が接続されている。また、ブリッジ13は、CPUバス1およびIOバス2を接続している。ここでは、IOバス2にBSC14、タイマ15、DMAC20、ブリッジ13が接続されている場合について説明するが、IOバス2にはこれら以外の種々の周辺モジュールを接続してもよい。
命令ROM12は、図示しないROMキャッシュを介してCPU11と接続している。内蔵RAM10は、CPU11からウェイトサイクル無しの1サイクルでアクセス可能なメモリであり、スクラッチメモリとしてCPU11から頻繁にアクセスされるデータが格納されている。本実施の形態1においては、内蔵RAM10の一部を周辺モジュールからのデータの転送先として用いる。データ転送を行う際は、内蔵RAM10内のデータ転送先の写像領域のベースアドレスを指定してデータ転送が行われ、内蔵RAM10は指定されたベースアドレスで指定された領域に転送用のデータを格納する。
BSC14は、DMAC20がデータ転送を行う際や、ブリッジ13がCPU11からのリード/ライト動作要求に応じて周辺モジュール(タイマ15等)にアクセスする際に、DMAC20やブリッジ13からバス権要求される。BSC14は、DMAC20やブリッジ13からバス権要求されると、DMAC20やブリッジ13にバス権要求に対するバス権許可の信号を通知する。
ブリッジ13は、CPUバス1とIOバス2の動作仕様(周波数、バス幅、バスプロトコル)の違いを吸収し、CPUバス1側およびIOバス2側のマスタモジュールおよびスレーブモジュールとして動作する。
DMAC20、ブリッジ13は、BSC14からバス権許可の信号が通知されると、IOバス2の所定のプロトコルに従ってデータ転送や周辺モジュールへのアクセスを行う。DMAC20は、複数チャネルを有している。本実施の形態1においては、DMAC20が2チャネルで構成される場合について説明する。DMAC20は、周辺モジュールと内蔵RAM10の間のデータ転送を行なう装置であり、チャネル0に対応するチャネルC0、チャネル1に対応するチャネルC1、各チャネルC0,C1に共通する動作を制御する共通制御部(チャネル制御部)30、チャネルC0,C1と共通制御部30を接続するバスインタフェース部40からなる。
各チャネルC0,C1は、データ有効フラグ21、イネーブルレジスタ(受付レジスタ)22、割り込み許可レジスタ23、転送制御部24を有している。イネーブルレジスタ22は、タイマ15等の周辺モジュールからの転送要求をチャネル単位で設定するレジスタである。各チャネルC0,C1は、各チャネルC0,C1に対応するイネーブルレジスタ22に転送許可(=1)が設定されると、次にイネーブルレジスタ22に転送禁止(=0)が設定されるまで、周辺モジュールから転送要求が発生するたびに1回のデータ転送を行う。
データ有効フラグ21は、データ転送先の内蔵RAM10に有効なデータ(転送されたデータ)が格納されているか否かを示すフラグである。データ有効フラグ21は、周辺モジュールから転送要求を受け付けた後、1回の転送が終了するタイミングで初期値「0」から「1」にセットされる。MCU100のユーザ(ソフトウェア)は、データ有効フラグ21を参照することによって、データ転送先の内蔵RAM10に有効なデータが格納されているか否かを判断することができる。
割り込み許可レジスタ23は、CPU11への割り込み要求を許可するか否かを示すレジスタである。割り込み許可レジスタ23が割り込み許可(=1)に設定された状態で、データ有効フラグ21が「1」にセットされると、データ有効フラグ21が「1」にセットされるタイミングでDMAC20からCPU11に割り込み要求を行う。一方、割り込み許可レジスタ23が割り込み不許可(=0)に設定された状態では、データ有効フラグ21が「1」にセットされてもDMAC20からCPU11への割り込み要求を行わない。MCU100のユーザへは、DMAC20からCPU11への割り込み要求によっても、データ転送先の内蔵RAM10に有効なデータが格納されているか否かを通知することが可能となる。
転送制御部24は、転送受け付けが可能な状態で周辺モジュールから転送要求が発生した場合に、共通制御部30にチャネルとして転送を受け付けたことを通知する。転送制御部24は、共通制御部30にチャネルとして転送を受け付けたことを通知する際に、データ転送の転送元(周辺モジュール)のアドレスと転送先(内蔵RAM10)のアドレスを共通制御部30に通知する。
共通制御部30は、マスタイネーブルレジスタ(制御レジスタ)31、写像領域指定レジスタ32、バッファ33を有している。写像領域指定レジスタ32は、データ転送先である内蔵RAM10内の写像領域を指定するレジスタである。データ転送先の写像領域は、例えば0x100単位で指定する。
写像領域指定レジスタ32は、内蔵RAM10内の64KB(Kilo Byte)を指定可能な16ビットレジスタ(下位8ビットは0で固定)等で構成されている。マスタイネーブルレジスタ31は、DMAC20の動作のオン/オフを指定するレジスタである。バッファ33は、転送元の周辺モジュールからリードしたデータを格納する。
共通制御部30は、所定のチャネルを選択してデータ転送を行なう機能(図示せず)を有している。共通制御部30は、マスタイネーブルレジスタ31が転送許可(=1)に設定された状態で、データ転送を受け付けしたことを示す信号がいずれかのチャネルC0,C1から通知された場合、予め設定された所定の優先度に基づいて起動するチャネルを選択する。本実施の形態1においては、チャネル選択の優先度の一例として、チャネル選択の優先度がチャネル番号の昇順(固定)である場合について説明する。したがって、チャネルC0とチャネルC1で同時に転送要求を受け付けた場合、共通制御部30はチャネルC0を選択し、チャネルC0から通知されるアドレス情報(転送元のアドレス、転送先のアドレス)等に従ってデータ転送を行う。
共通制御部30は、データ転送先の内蔵RAM10の絶対アドレスを生成する機能(図示せず)を有している。共通制御部30は、選択したチャネルから通知される転送先の内蔵RAM10の相対アドレス、写像領域指定レジスタ32によって指定される写像領域の先頭アドレス、MCU100の設計時に規定(予め設定)される内蔵RAM10の先頭アドレスに基づいて、データ転送先の内蔵RAM10の絶対アドレスを生成する。
共通制御部30は、バスインタフェース部40を介し、IOバス2のプロトコルに従って、(1)転送元の周辺モジュールからデータをリードし、(2)リードしたデータを共通制御部30のバッファ33に格納し、(3)バッファ33に格納したデータを内蔵RAM10へライトする。
つぎに、周辺モジュールの一例であるタイマ15が有するチャネル0の構成を説明する。なお、本実施の形態1においては、タイマ15が特許請求の範囲に記載の周辺モジュールおよび転送要求モジュールに対応する。
図2は、実施の形態1に係るタイマの構成を示すブロック図である。ここでのタイマ15は、チャネル0を備えている。タイマ15のチャネル0は、例えば16ビットのカウンタ52、例えば16ビットのキャプチャレジスタ(転送要求部)53A,53B、制御レジスタ54、分周器51、バスインタフェース部55からなる。
制御レジスタ54は、チャネル0のオン/オフの状態等を設定する。分周器51は、MCU100のクロック生成器(図示せず)から提供されるクロックを適宜分周した信号を生成する。
カウンタ52は、分周器51が生成した信号をカウントする。カウンタ52は、制御レジスタ54によってチャネル0がオンの状態に設定された場合に、分周器51が分周する信号に同期してインクリメントされる。
キャプチャレジスタ53A,53Bは、イベント(TIA0)、イベント(TIA1)を入力する。イベント(TIA0)の入力がインプットキャプチャ(IC(input capture)0)に対応し、イベント(TIA0)の入力がインプットキャプチャ(IC1)に対応する。キャプチャレジスタ53A,53Bは、それぞれのイベント(TIA0)、イベント(TIA1)に対応する転送要求を送信する。キャプチャレジスタ53Aからの転送要求(IC0)はインプットキャプチャ(IC0)に基づいて送信され、キャプチャレジスタ53Bからの転送要求(IC1)はインプットキャプチャ(IC1)に基づいて送信される。
所定のイベント(TIA0)がタイマ15に通知されると、カウンタ52の値がタイマ15から送信する転送要求(IC0)にコピーされる。タイマ15は、この転送要求(IC0)が更新されると同時に更新された転送要求(IC0)をDMAC20に通知する。また、所定のイベント(TIA1)がタイマ15に通知されると、カウンタ52の値がタイマ15から送信する転送要求(IC1)にコピーされる。タイマ15は、この転送要求(IC1)が更新されると同時に更新された転送要求(IC1)をDMAC20に通知する。ここで、イベント(TIA0)、イベント(TIA1)は、MCU100の特定の端子からの入力信号が割り当てられている。
バスインタフェース部55は、カウンタ52、キャプチャレジスタ53A,53B、制御レジスタ54を接続する。バスインタフェース部55は、IOバス2と接続されており、IOバス2を介したデータ(カウンタ52の値、キャプチャレジスタ53Aの転送要求(IC0)、キャプチャレジスタ53Bの転送要求(IC1)、制御レジスタ54の値)の読み出しを管理する。すなわち、カウンタ52の値、キャプチャレジスタ53Aの転送要求(IC0)、キャプチャレジスタ53Bの転送要求(IC1)、制御レジスタ54の値は、CPU11やDMAC20からIOバス2を介して読み出すことが可能な構成となっている。
つぎに、DMAC20と周辺モジュールの関係を説明する。図3は、実施の形態1に係るDMACのチャネルの機能と特徴を説明するための図である。DMAC20は、チャネルC0,C1を有している。図3において、「転送要求元」の列は転送要求を発生する周辺モジュールのモジュール名を示す。ここでは、チャネルC0,C1に対し、タイマ15のチャネル0から転送要求が行われる場合を示している。
また、「事象」の列は転送要求のトリガとなる周辺モジュール側の状態の変化を示す。ここでは、キャプチャレジスタ53Aがイベント(TIA0)を入力(インプットキャプチャ(IC0))すると、DMAC20のチャネルC0に対し転送要求を行う場合を示し、キャプチャレジスタ53Bがイベント(TIA1)を入力(インプットキャプチャ(IC1)すると、DMAC20のチャネルC1に対し転送要求を行う場合を示している。
「転送レジスタ」の列は、転送要求に応じてDMAC20がアクセスする周辺モジュールのリソース(レジスタやローカルメモリ等)を示す。ここでは、転送要求に対してDMAC20のチャネルC0がキャプチャレジスタ53Aにアクセスし、DMAC20のチャネルC1がキャプチャレジスタ53Bにアクセスする場合を示している。
「転送方向」の列は、データ転送の方向を示す。ここでは、周辺モジュール(タイマ15)のレジスタ(キャプチャレジスタ53A,53B)からデータを読み出して内蔵RAM10へデータ転送する場合の動作(「REG→RAM」)を示している。
「転送領域相対アドレス」の列は、写像領域指定レジスタ32で指定される写像領域の先頭アドレスからの相対アドレスを示す。ここでは、DMAC20のチャネルC0がデータ転送する際に、「0x0」が写像領域の先頭アドレスからの相対アドレスとなる場合を示し、DMAC20のチャネルC1がデータ転送する際に「0x2」が写像領域指定レジスタ32で指定される場合を示している。
「転送データ長」の列は、1回の転送要求によって転送されるデータ長をビット(bit)数で示す。ここでは、1回の転送要求によって転送されるデータ長が16ビットである場合を示している。
「アドレス」の列は、データの転送先/転送元アドレスが変化するか否かを示す。ここでは、同じアドレス間でのデータ転送を繰り返す場合(「固定」)を示している。なお、ここでのDMAC20のチャネルC0,C1の属性は各チャネルで固定である。
つぎに、DMAC20の動作処理手順について説明する。図4−1は、実施の形態1に係るDMAC20の動作処理手順を示すフローチャートである。DMAC20の各チャネルC0,C1に共通した初期設定として、写像領域指定レジスタ32の設定、マスタイネーブルレジスタ31の設定を行なう(ステップS110)。写像領域指定レジスタ32としては、例えば「00100」を設定し、マスタイネーブルレジスタ31としては、例えば転送許可(=1)を設定する。
つぎに、例えば頻繁に読み出すIOリソースに対するDMAC20の各チャネルC0,C1の初期設定として、チャネル毎に割り込み許可レジスタ23の設定、イネーブルレジスタ22の設定を行なう(ステップS120)。例えば、チャネルC0の割り込み許可レジスタ23としては割り込み許可(=1)を設定し、イネーブルレジスタ22としては転送許可(=1)を設定する。
CPU11は、任意のソフトウェア処理を実行する(ステップS130)。この間、DMAC20は周辺モジュールから内蔵RAM10へのデータ転送を行なう。これにより、その後にDMAC20の再設定を行なうことなく任意のソフトウェア処理の実行中は常に内蔵RAM10に最新のデータ(値)を反映させることが可能となる。CPU11によって任意のソフトウェア処理が終了すると、DMAC20によるデータ転送処理を終了する(ステップS140)。
ここで、周辺モジュールから内蔵RAM10へのデータ転送の処理手順について説明する。図4−2は、実施の形態1に係るMCU内のデータ転送の処理手順を示すフローチャートである。ここでは、DMAC20の初期設定として、マスタイネーブルレジスタ31に転送許可(=1)が設定され、チャネルC0の割り込み許可レジスタ23に割り込み許可(=1)が設定され、イネーブルレジスタ22に転送許可(=1)が設定されている場合について説明する。
MCU100の特定の端子からの入力信号として、イベント(TIA0)、イベント(TIA1)がタイマ15に入力される。このイベント(TIA0)、イベント(TIA1)は、それぞれキャプチャレジスタ53A,53Bに入力される(ステップS210)。ここでは、キャプチャレジスタ53Aにイベント(TIA0)が入力された場合について説明する。キャプチャレジスタ53Aは、インプットキャプチャ(IC0)に対応した転送要求(IC0)を生成する。
また、所定のイベント(TIA0)がタイマ15に通知されると、カウンタ52の値がタイマ15から送信する転送要求(IC0)にコピーされる。タイマ15は、この転送要求(IC0)が更新されると同時に更新された転送要求(IC0)をDMAC20に通知する(ステップS220)。これにより、タイマ15からの転送要求(IC0)のアサートが発生する。
DMAC20のチャネルC0は、イネーブルレジスタ22に転送許可(=1)が設定されているか否かを確認する(ステップS230)。ここでのDMAC20のチャネルC0は、イネーブルレジスタ22に転送許可(=1)が設定されているので、タイマ15から内蔵RAM10へのデータ転送処理を開始する。
転送制御部24は、共通制御部30にチャネルC0として転送を受け付けたことを通知する。このとき、転送制御部24はデータ転送の転送元(タイマ15)のアドレスと転送先(内蔵RAM10)のアドレスを共通制御部30に通知する(ステップS240)。
マスタイネーブルレジスタ31が転送許可(=1)の設定であるため、共通制御部30の写像領域指定レジスタ32は、データ転送先である内蔵RAM10内の写像領域を指定する(ステップS250)。共通制御部30は、起動するチャネルC0を選択し、選択したチャネルC0から通知される転送先の内蔵RAM10の相対アドレス、写像領域指定レジスタ32によって指定される写像領域の先頭アドレス、MCU100の設計時に規定される内蔵RAM10の先頭アドレスに基づいて、データ転送先の内蔵RAM10内の絶対アドレスを生成する(ステップS260)。
共通制御部30は、バスインタフェース部40を介し、IOバス2のプロトコルに従って、転送元のタイマ15からデータ(変更されたタイマ15の内容に関する情報(IC0)をリードする。共通制御部30は、リードしたデータをバッファ33に格納し、バッファ33に格納したデータをIOバス2、ブリッジ13、CPUバス1を介して、生成した内蔵RAM10の絶対アドレスにライトする(ステップS270,S280)。
タイマ15から転送要求を受け付けた後、1回のデータ転送が終了するタイミングでデータ有効フラグ21が初期値0から1にセットされる。割り込み許可レジスタ23が割り込み許可(=1)に設定されているので、データ有効フラグ21が「1」にセットされると、DMAC20からCPU11に割り込み要求を行う。この後、CPU11はDMAC20から転送されたデータを、CPUバス1を介して所定のタイミングで内蔵RAM10からリードする(ステップS290)。
このように、DMAC20が内蔵RAM10にタイマ15のデータを転送することによって、CPU11はIOバス2にアクセスする代わりに内蔵RAM10の所定のアドレスを参照すれば内蔵RAM10上にコピーされたIOバス2(タイマ15)の最新値を読み出すことが可能となる。したがって、CPU11による1回のリード動作あたりで削減できるサイクル数は「(CPU11がIOバス2にアクセスするサイクル数)−(CPU11が内蔵RAM10にアクセスするサイクル数)」となる。
例えば、(CPU11がIOバス2にアクセスするサイクル数)が8サイクルの場合、(CPU11が内蔵RAM10にアクセスするサイクル数)は1サイクルであるため、CPU11による1回のリード動作あたりで削減できるサイクル数は「(8サイクル)−(1サイクル)=(7サイクル)」となる。そして、この削減されるサイクル数はCPU11の処理性能の向上に寄与する。
ここで、この実施の形態1におけるDMAC20と従来用いられていたDMACの差異を明確にするため、MCU100をDMAC20で構成した場合と従来用いられていたDMACで構成した場合の違いについて説明する。まず、従来のDMACの構成について説明する。
図5は、従来のDMACの構成の一例を示すブロック図である。DMAC120は、チャネル0に対応するチャネルD0、チャネル1に対応するD1、共通制御部130、チャネルD0,D1と共通制御部130を接続するバスインタフェース部140からなる。
各チャネルD0,D1は、転送先アドレスレジスタ(DAR(destination address register))121、転送元アドレスレジスタ(SAR(source address register))122、転送カウントレジスタ(TCR(transport count register))123、チャネル制御レジスタ(CHCR(Channel Control register))125、転送制御部(転送要求部)124、セレクタ126を有している。
転送先アドレスレジスタ121は転送先のアドレスを保持するアドレスレジスタであり、転送元アドレスレジスタ122は転送元のアドレスを保持するアドレスレジスタである。転送先アドレスレジスタ121、転送元アドレスレジスタ122は、チャネル制御レジスタ125に指定されたアドレスレジスタの増減に従って、1回の転送が実行されるたびにレジスタの値を更新する機能を備えている。
転送カウントレジスタ123は、転送処理の回数をカウントする。転送カウントレジスタ123は、1回の転送要求に応じた処理を行なう毎にデクリメントされ、0にデクリメントされると転送要求の受付を禁止する状態となる。転送カウントレジスタ123は、転送要求の受付を禁止する状態となるとタイマ15が転送要求を発生させても転送要求を受け付けない。DMAC120は、チャネル制御レジスタ125に割り当てられている割り込み許可ビットが割り込み許可(=1)に設定された状態で転送カウントレジスタ123が0にデクリメントされると、転送カウントレジスタ123が0にデクリメントされるタイミングでCPU11に割り込み要求を発生する。
チャネル制御レジスタ125は、DMAC20のイネーブルレジスタ22に相当するビットレジスタである。ここでのチャネル制御レジスタ125は、割り込み許可レジスタ23に相当するビットに加えて、転送によるアドレスレジスタの増減の指定、転送終了における割り込みの生成のオン/オフの指定、転送サイズ、転送要因を指定するビットが割り当てられている。
セレクタ126は、チャネル制御レジスタ125で指定した転送要因を選択する。共通制御部130は、マスタイネーブルレジスタ31に対応する機能に加え、オペレーションレジスタ131を備えている。オペレーションレジスタ131は、チャネルD0,D1間の優先度を(1)優先度固定、または(2)ラウンドロビン的な優先度の変更のいずれかに設定することを可能としている。
バスインタフェース部140は、DMAC20のバスインタフェース部40と同様の機能を備えている。従来のDMAC120の転送制御部124と本実施の形態1に係る転送制御部24は、アドレス生成以外の処理は同様の処理を行なう。すなわち、従来のDMAC120の転送制御部124は転送先アドレスレジスタ121、転送元アドレスレジスタ122に格納されたアドレスを生成するのに対し、本実施の形態1に係る転送制御部24は予め設定された固定のアドレスを生成する。
つぎに、本実施の形態1に係るDMAC20の構成と従来のDMAC120の構成の違いについて説明する。従来のDMAC120においては、各チャネルD0,D1が転送要求を選択するセレクタ126、転送先アドレスを記憶する転送先アドレスレジスタ121、転送元アドレスを記憶する転送元アドレスレジスタ122、これらのセレクタ126、転送先アドレスレジスタ121、転送元アドレスレジスタ122を制御する転送制御部124内の回路等のハードウェアが必要であったが、本実施の形態1に係るDMAC20においてはこれらのハードウェアが不要となる。また、本実施の形態1に係るDMAC20においては従来のDMAC120のチャネル制御レジスタ125に設定する転送サイズ等の属性をチャネル毎に予め固定に設定することができるため、DMAC20はこの設定を行なうためのハードウェア規模をDMAC120よりも削減することが可能となる。
また、本実施の形態1に係るDMAC20は、転送先アドレスレジスタ121、転送元アドレスレジスタ122を備えていないため、DMAC20のユーザが不正なアドレスを設定した場合に必要なエラー検出回路が不要となる。本実施の形態1に係るDMAC20は、これらのハードウェアを削減することが可能となるため、DMAC20はDMAC120よりも1チャネルあたりのハードウェア規模を縮小(例えば約10分の1)することが可能となる。
つぎに、本実施の形態1に係るDMAC20の動作処理手順と従来のDMAC120の動作処理手順の違いについて説明する。図6は、従来のDMACの動作処理手順を示すフローチャートである。
DMAC120の各チャネルD0,D1に共通した初期設定として、オペレーションレジスタ131の設定を行なう(ステップS310)。つぎに、チャネルD0,D1毎の初期設定として、転送先アドレスレジスタ121、転送元アドレスレジスタ122、転送カウントレジスタ123、チャネル制御レジスタ125の設定を行なう(ステップS320)。そして、MCU100において任意のソフトウェア処理を開始する(ステップS330)。DMAC120においては転送回数を有限回にしか設定できない。このため、CPU11は任意のソフトウェア処理の途中で転送カウントレジスタ123の転送カウントが「0」になることを共通制御部130からCPU11への割り込みによって検出する(ステップS340)。
割り込みが検出されると、ハードウェアによって割り込み処理ルーチンに分岐する。割り込み処理ルーチンに分岐すると、CPU11のレジスタを退避し(ステップS350)、チャネルD0,D1の各レジスタ(転送先アドレスレジスタ121、転送元アドレスレジスタ122、転送カウントレジスタ123、チャネル制御レジスタ125)を再設定する(ステップS360)。この後、CPU11のレジスタを復帰させ(ステップS370)、任意のソフトウェア処理を再開する(ステップS380)。CPU11によって任意のソフトウェア処理が終了するまでステップS330〜ステップS380の処理が繰り返される(ステップS390)。
このように、従来のDMAC120においては、ステップS360の処理において少なくとも転送カウントレジスタ123を再設定する必要があるため、CPU11がIOバス2にアクセスするサイクル数(サイクル数8)に加えて転送時にアクセスする転送カウントレジスタの値を再設定するサイクルが必要となる。また、ステップS350、ステップS370の処理においても夫々10サイクル程度の実行サイクルが必要となる。すなわち、本実施の形態1に係るDMAC20は、従来のDMAC120の動作処理と比べてソフトウェアによる処理ステップ数が少なくなり、実行サイクル数が少なくなる。
なお、本実施の形態1においては、MCU100の実装上の工夫として図3に示すように転送先のアドレス(転送領域相対アドレス)を連続する領域にマッピングする構成としている。ここで、例えばタイマ15からのデータ(IC0)、データ(IC1)が内蔵RAM10の不連続なアドレスにマッピングされ、CPU11がデータ(IC0)の読み出し、データ(IC1)の読み出しを処理するソフトウェアを実行する場合について説明する。この場合、転送先のアドレスを連続する領域にマッピングしなければ、(IC0)の読み出し後、(IC1)の読み出しのためのアドレス設定する命令が必要になるとともに、読み出し命令を2回行なう必要がある。
一方、本実施の形態1においては、転送先のアドレスを連続する領域にマッピングする構成としているので、データ(IC0)とデータ(IC1)の値は、写像領域上の相対アドレス(転送領域相対アドレス)0,2に転送される。このため、CPU11は4バイト(32ビット)を1回の読み出し命令で行なうことが可能となる。したがって、DMAC20を有するMCU100は、従来のDMAC120を有するMCU100よりもCPU11の実行する命令ステップ数を削減することが可能となる。
なお、本実施の形態1においては、データ転送の対象をタイマ15としたが、IOバス2を介して読み出し可能な周辺モジュールであればタイマ15以外の周辺モジュールをデータ転送の対象としてもよい。また、DMAC20を備えるMCU100は、本実施の形態1で説明した階層よりも深い階層のバス構成を有するハードウェア構成であってもよい。
なお、本実施の形態1においては、DMAC20を備えるMCU100を1チップで構成する場合について説明したが、MCU100を1チップで構成する場合に限られずMCU100を複数のチップで構成してもよい。例えば、DMAC20を1つのチップで構成し、DMAC以外のMCU100の構成要素とDMAC20を接続してもよい。この場合も、DMAC20はIOバス2に接続する。
このように、実施の形態1によれば、タイマ15等の周辺モジュールの内容が変更された際に、変更された周辺モジュールの内容に関する情報(IC0、IC1)がDMAC20によって内蔵RAM10に転送されるのでCPU11は高速動作が可能なCPUバス1上の内蔵RAM10の一部を周辺モジュールの写像領域(エイリアス)として利用することができるとともに、少ないサイクル数で仮想的に周辺モジュールの読み出しを行なうことが可能となる。
また、MCU100がDMAC20を備えるので、DMAC20の初期設定、DMAC20の再設定をソフトウェアによる少ないステップ数の処理で行なうことが可能となり、CPU11の負荷を軽減できるとともに、従来のDMACよりもハードウェアの規模(サイズ)を小さく構成することが可能となる。
また、転送回数のカウンタを再設定する必要がないので、転送回数の再設定処理を行なう際のCPU11の負荷がなくなる。また、DMAC20は、転送回数のカウンタを備える必要がないため、DMAC20のハードウェアを小さく構成することが可能となる。
また、DMAC20がデータ有効フラグ21を備えているので、ソフトウェアからはデータ有効フラグ21を確認することによって、写像領域を参照した場合に有効なデータが格納されているか否かを認識することが可能となる。したがって、ソフトウェアによって写像領域を誤って読み出さないための手段を提供することができる。
また、MCU100のユーザへは、DMAC20からCPU11への割り込み要求によっても、データ転送先の内蔵RAM10に有効なデータが格納されているか否かを通知することが可能となる。これにより、データ有効フラグ21とは異なる手段によって、ソフトウェアは写像領域のデータが有効であるか否かを認識することが可能となる。したがって、ソフトウェアが柔軟に動作可能なソフトウェアインタフェースを提供できる。
また、DMAC20が写像領域指定レジスタ32を備えるので、内蔵RAM10上でDMAC20がデータ転送に利用する領域を設定することが可能となる。これにより、同じCPU11で時分割して動作するソフトウェア同士で内蔵RAM10の利用が競合しないよう管理、制御することが容易になる。したがって、ソフトウェア開発における自由度と移植性が高まる。
また、データ転送先のアドレスを内蔵RAM10上の連続した領域としているので、周辺モジュール側の設定を変更することなく、ユーザに使いやすいソフトウェアインタフェースを提供することが可能となる。
実施の形態2.
つぎに、図7〜図11を用いてこの発明の実施の形態2について説明する。実施の形態2では、データ転送する回数をカウントしながら内蔵RAM10と周辺モジュールの間のデータ転送を行なう。
図7は実施の形態2に係るMCUの構成を示す図であり、図8は実施の形態2に係るDMACの構成を示す図である。図7および図8の各構成要素のうち図1に示す実施の形態1のMCU100、DMAC20と同一機能を達成する構成要素については同一番号を付しており、重複する説明は省略する。
本実施の形態2においては、MCU100のIOバス2に、BSC14、タイマ15、DMAC20とともに非同期送受信装置(以下、UART(Universal Asynchronous Receiver Transmitter)60という)が接続されている。ここでは、UART60が特許請求の範囲に記載の周辺モジュールおよび転送要求モジュールに対応する。
本実施の形態2においては、DMAC20が4チャネルで構成される場合について説明する。DMAC20は、チャネルC0〜チャネルC3、共通制御部30、バスインタフェース部40からなる。なお、チャネルC0,C1は実施の形態1と同様の機能を有しており、図8においてその記載を省略している。
チャネルC2はチャネル2に対応し、チャネルC3はチャネル3に対応する。共通制御部30は、チャネルC0〜C3に共通する動作を制御する。バスインタフェース部40は、チャネルC0〜C3と共通制御部30を接続する。
チャネルC2,C3は、それぞれ転送終了フラグ25、転送カウントレジスタ(TCR)26、写像領域アドレスレジスタ27、割り込み許可レジスタ23、転送制御部24を備えている。本実施の形態2においては、チャネルC2がUART60の後述するRDR64から転送要求を受け付け、チャネルC3がUART60の後述するTDR65から転送要求を受け付ける。ここでは、RDR64とTDR65が特許請求の範囲に記載の転送要求部に対応する。
転送カウントレジスタ26は、転送回数を指定する例えば5ビットのレジスタである。
転送カウントレジスタ26において、例えば「0」〜「16」を設定可能とし、「17」〜「31」を設定禁止とする。転送カウントレジスタ26は、1回の転送要求に応じて1データの転送を行なうたびにデクリメントされ、「0」になると以降の転送要求を受け付けず転送処理を終了する。すなわち、転送カウントレジスタ26は例えば最大16回までの転送を、CPU11からの再設定をすることなく行なうことができる。
また、チャネルC2,C3は、チャネルC0,C1が備えていたイネーブルレジスタ22を有しておらず、転送カウントレジスタ26に「0」以外の値を指定することによって転送を許可する。
写像領域アドレスレジスタ27は、例えば4ビットのレジスタである。写像領域アドレスレジスタ27は、次に転送要求があった際に転送する写像領域のアドレスを、写像領域相対アドレスの先頭からの相対アドレスとして保持する。写像領域アドレスレジスタ27は、1データの転送を行なうたびに1ずつインクリメントされる。写像領域アドレスレジスタ27は、転送カウントレジスタ26に「0」以外の値を書き込んで転送を設定した際に、0にリセットされる。
転送終了フラグ25は、データ転送が終了したか否かを示すフラグである。DMAC20は、転送カウントレジスタ26が0にデクリメントされるタイミングで転送終了フラグ25を初期値「0」から「1」にセットする。
割り込み許可レジスタ23は、CPU11への割り込み要求を許可するか否かを示すレジスタである。割り込み許可レジスタ23が割り込み許可(=1)に設定された状態で、データ有効フラグ21が「1」にセットされると、転送終了フラグ25が「1」にセットされるタイミングでDMAC20からCPU11に割り込み要求を行う。一方、割り込み許可レジスタ23が割り込み不許可(=0)に設定された状態では、転送終了フラグ25が「1」にセットされてもDMAC20からCPU11への割り込み要求を行わない。
ソフトウェア処理によって転送の終了を検出するには、転送終了フラグ25をポーリングするか、又は割り込み許可レジスタ23を「1」に設定することによってDMAC20からCPU11への割り込みを行なう。
UART60は、シリアル通信を行うためのデバイスであり、データの送信時はパラレル信号をシリアル信号に変換し、データの受信時はシリアル信号をパラレル信号に変換する。
図9は、UARTのチャネルの構成を示すブロック図である。UART60の各チャネルはボーレート制御部61、バスインタフェース部62、送受信制御部63からなる。バスインタフェース部62は、ボーレート制御部61、送受信制御部63を接続する。バスインタフェース部62は、IOバス2に接続されている。
ボーレート制御部61は、変復調の速度を制御する。送受信制御部63は、受信データレジスタ(以下、RDR(receive data register)64という)、送信データレジスタ(以下、TDR(transmit data register)65という)、ステートレジスタ66を備える。
MCU100の特定の端子から入力される受信データがRDR64によって受信され、RDR64の値が更新されると、UART60は「受信データフル」の状態となる。MCU100の特定の端子へTDR65のデータが送信されると、UART60は「送信データエンプティ」の状態となる。
これらの事象に同期して、DMAC20へデータの転送要求やCPU11への割り込み通知が行なわれる。すなわち、RDR64は「受信データフル」の状態になるとDMAC20のチャネルC2へデータの転送要求(Rx0)を送信し、TDR65は「送信データエンプティ」の状態になるとDMAC20のチャネルC3へデータの転送要求(Tx0)を送信する。これにより、DMAC20がUART60と内蔵RAM10の間のデータ転送を行なう。
ステートレジスタ66は、RDR64、TDR65の空き状態に関する情報を格納する。RDR64、TDR65、ステートレジスタ66、ボーレート制御部61に含まれる種々のレジスタ(図示せず)が格納する値は、CPU11やDMAC20からバスインタフェース部62、IOバス2を介して読み出すことが可能な構成となっている。
TDR65が「送信データエンプティ」の状態でない場合に、TDR65に書き込みを行なうと、TDR65のデータが上書きされる。一方、RDR64が「受信データフル」の状態でない場合に、RDR64からデータの読み出しを行なうと無効なデータの読み出しを行なうこととなる。すなわち、これらの状態でのデータの書き込み、読み出しは無効な動作となる。
したがって、CPU11によるソフトウェア処理によってTDR65/RDR64に正しくアクセスするためには、送信データエンプティ/受信データフルの事象で起動される割り込みハンドラによってTDR65/RDR64にアクセスする。または、ステートレジスタ66が格納する値を読み出して、TDR65への書き込みやRDR64からの読み出しが有効な状態であるか否かを判断した後、有効な状態であると判断された場合にCPU11によるソフトウェア処理によってTDR65/RDR64へのアクセスを行なう。
図10は、実施の形態2に係るDMACのチャネルの機能と特徴を説明するための図である。ここでは、DMAC20のチャネルC2が、転送要求元(UART60のチャネル0)の事象(受信データフル(Rx0))によって、RDR64にアクセスし、RDR64からデータを読み出して内蔵RAM10へデータ転送する場合(「REG→RAM」)を示している。また、DMAC20のチャネルC2は、転送領域相対アドレス「0x10」番地から「0x1F」番地までの16バイト(転送データ8bit(1byte)の16個分)の領域をチャネルC2用の写像領域として占有する場合を示している。
また、DMAC20のチャネルC3が、転送要求元(UART60のチャネル0)の事象(送信データエンプティ(Tx0))によって、TDR65にアクセスし、内蔵RAM10の内容を読み出してIOバス2上のレジスタ(TDR65)に転送する(RAM→REG)場合を示している。また、DMAC20のチャネルC3は、転送領域相対アドレス「0x20」番地から「0x2F」番地までの16バイト(転送データ8bitの16個分)の領域をチャネルC3用の写像領域として占有する場合を示している。
また、DMAC20のチャネルC2,C3は、転送のたびに1バイト(1データ分)だけデータを格納する内蔵RAM10のアドレスが増加し(「RAM:増加」)、周辺モジュール(UART60)のレジスタ(RDR64)は同じアドレスが転送対象(REG:固定)である場合を示している。
つぎに、DMAC20の動作処理手順について説明する。図11−1は、実施の形態2に係るDMAC20の動作処理手順を示すフローチャートである。DMAC20の各チャネルC0〜C3に共通した初期設定として、写像領域指定レジスタ32の設定、マスタイネーブルレジスタ31の設定を行なう(ステップS410)。写像領域指定レジスタ32としては、例えば「00100」を設定し、マスタイネーブルレジスタ31としては、例えば転送許可(=1)を設定する。
つぎに、例えば頻繁に読み出すIOリソースに対するDMAC20の各チャネルC2,C3の初期設定として、チャネル毎に転送カウントレジスタ26の設定を行なう(ステップS420)。例えば、チャネルC2の割り込み許可レジスタ23としては転送許可(=1)を設定し、転送カウントレジスタ26としては「16」を設定する。
CPU11は、任意のソフトウェア処理を実行する(ステップS430)。この間、DMAC20は周辺モジュールと内蔵RAM10との間のデータ転送を行なう。DMAC20においては転送回数を有限回にしか設定できない。このため、CPU11は任意のソフトウェア処理の途中で転送カウントレジスタ26の転送カウントが「0」になることを共通制御部130からCPU11への割り込みによって検出する(ステップS440)。
この後、DMAC20は図6で説明した従来のDMAC120と同様の処理を行なう。すなわち、ここでのステップS450〜S490の処理が図6のステップS350〜S390の処理に対応する。なお、本実施の形態2に係るDMAC20はステップS460の処理において、転送先アドレスレジスタ121または転送元アドレスレジスタ122を設定する必要はなく、転送カウントレジスタ123の設定のみを行なえばよい。
ここで、周辺モジュールと内蔵RAM10との間のデータ転送の処理手順について説明する。図11−2および図11−3は、実施の形態2に係るMCU内のデータ転送の処理手順を示すフローチャートである。図11−2では、UART60からの転送要求(Rx0)に応じてUART60のデータを内蔵RAM10に転送する場合について説明し、図11−3では、UART60からの転送要求(Tx0)に応じて内蔵RAM10のデータをUART60に転送する場合について説明する。
MCU100の特定の端子からUART60に受信データが入力されると、UART60のチャネル0のRDR64が「受信データフル(Rx0)」の状態となる(ステップS510)。RDR64は、DMAC20に「受信データフル(Rx0)」に対応する転送要求(Rx0)を送信し、DMAC20のチャネルC2がこの転送要求(Rx0)をIOバス2を介して受信する(ステップS520)。
DMAC20のチャネルC2は、転送カウントレジスタ26の値を確認する(ステップS530)。転送カウントレジスタ26の値が「0」でなければ(ステップS530、No)、RDR64のデータをリードし(ステップS540)、共通制御部30が内蔵RAM10にデータをライトする(ステップS550)。
写像領域アドレスレジスタ27は、1データの転送を行なうたびに1ずつインクリメントされる。写像領域アドレスレジスタ27は、次に転送要求があった際に転送する写像領域のアドレスを、写像領域相対アドレスの先頭からの相対アドレスとして保持する(ステップS560)。
転送カウントレジスタ26は、データの転送を行なうたびに「1」デクリメントされ(ステップS570)、「0」になると以降の転送要求を受け付けず転送処理を終了する。すなわち、転送カウントレジスタ26の値が「0」になるまで、転送要求(Rx0)がDMAC20に送信されるとRDR64からのデータをリードし、共通制御部30が写像領域アドレスレジスタ27の値に基づいて内蔵RAM10にデータをライトする処理が繰り返される(ステップS510〜S570)。
転送カウントレジスタ26の値が「0」になると(ステップS530、Yes)、転送終了フラグ25が「0」から「1」にセットされる(ステップS580)。この後、CPU11はDMAC20から転送されたデータを所定のタイミングでCPUバス1を介して内蔵RAM10からリードする(ステップS590)。なお、写像領域アドレスレジスタ27は、転送カウントレジスタ26に「0」以外の値を書き込んで転送を設定した際に、「0」にリセットされる。
また、CPU11においてUART60へ書き込むデータがある場合このデータを内蔵RAM10にライトする(ステップS610)。MCU100の特定の端子へUART60から送信データが出力されると、UART60のチャネル0のTDR65が「送信データエンプティ(Tx0)」の状態となる(ステップS620)。TDR65は、DMAC20に「送信データエンプティ(Tx0)」に対応する転送要求(Tx0)を送信し、DMAC20のチャネルC3がこの転送要求(Tx0)を受信する(ステップS630)。
DMAC20のチャネルC3は、転送カウントレジスタ26の値を確認する(ステップS640)。転送カウントレジスタ26の値が「0」でなければ(ステップS640、No)、内蔵RAM10のデータをリードし(ステップS650)、共通制御部30がUART60のTDR65にデータを送信する(ステップS660)。
写像領域アドレスレジスタ27は、1データの転送を行なうたびに1ずつインクリメントされる。写像領域アドレスレジスタ27は、次に転送要求があった際にアクセスする写像領域のアドレスを、写像領域相対アドレスの先頭からの相対アドレスとして保持する(ステップS670)。
転送カウントレジスタ26は、データの転送を行なうたびに「1」デクリメントされ(ステップS680)、「0」になると以降の転送要求を受け付けず転送処理を終了する。すなわち、転送カウントレジスタ26の値が「0」になるまで、転送要求(Tx0)がDMAC20に送信されると共通制御部30が写像領域アドレスレジスタ27の値に基づいて内蔵RAM10からのデータをリードし、UART60にデータを送信する処理が繰り返される(ステップS610〜S680)。
転送カウントレジスタ26の値が「0」になると(ステップS640、Yes)、転送終了フラグ25が「0」から「1」にセットされる(ステップS690)。なお、写像領域アドレスレジスタ27は、転送カウントレジスタ26に「0」以外の値を書き込んで転送を設定した際に、「0」にリセットされる。
このように、CPU11は任意のソフトウェア処理の途中で周辺モジュール(UART60)に直接アクセスする代わりに、周辺モジュールに書き込むデータを内蔵RAM10に設定することや、DMAC20が周辺モジュールから読み出して内蔵RAM10に転送されたデータを内蔵RAM10上で参照することが可能となる。
ここで、この実施の形態2におけるDMAC20と従来用いられていたDMACの差異を明確にするため、MCU100を実施の形態2に係るDMAC20で構成した場合と従来用いられていたDMACで構成した場合の違いについて説明する。
従来のDMAC120は、ステップS260の処理において、転送カウントレジスタ123の設定に加えて、転送先アドレスレジスタ121または転送元アドレスレジスタ122を設定するサブステップが必要となる。一方、本実施の形態2に係るDMAC20は、DMAC120のステップS260に対応するステップS360の処理において、転送カウントレジスタ26の設定を行なえばよい。したがって、実施の形態2におけるDMAC20の処理は、従来のDMAC120と比べて転送先アドレスレジスタ121または転送元アドレスレジスタ122を設定するサブステップの分だけ少ないステップ数によってデータ転送が可能となる。また、従来のDMAC120と比べて実施の形態2に係るDMAC20は、DMAC120よりも1チャネルあたりのハードウェア規模を縮小することが可能となる。
このように、実施の形態2によれば、CPU11がUART60等の周辺モジュールに書き込む複数のデータを予め内蔵RAM10に設定した後、DMAC20が内蔵RAM10のデータを周辺モジュールに書き込むので、CPU11から周辺モジュールへの書き込み動作を仮想的に高速化することが可能となる。
また、周辺モジュールから読み出された複数のデータを、DMAC20が内蔵RAM10に転送することによって、CPU11による周辺モジュールからのデータの読み出しを仮想的に高速化することが可能となる。
また、DMAC20の初期設定(起動)、DMAC20の再設定の際に、転送先アドレスレジスタ121または転送元アドレスレジスタ122を設定することなくデータ転送を行なうことが可能となるので、少ないステップ数によってデータ転送が可能となる。
また、転送カウントレジスタ26の設定によって、データの転送許可と内蔵RAM10のアドレスのリセットを兼ねたソフトウェアインタフェースを提供できるため、少ない処理ステップ数で転送処理の再開を行なうことが可能となり、CPU11の負荷を軽減することが可能となる。
実施の形態3.
つぎに、図12〜図17−2を用いてこの発明の実施の形態3について説明する。実施の形態3では、データ転送する回数をカウントしながら内蔵RAM10と周辺モジュールの間のデータ転送を行なうとともに、転送カウントレジスタ26の値が「0」になると転送カウントレジスタ26の値を再設定する。
図12は実施の形態3に係るMCUの構成を示す図であり、図13は実施の形態3に係るDMACの構成を示す図である。図12および図13の各構成要素のうち図1および図7に示す実施の形態1,2のMCU100、図1および図8に示す実施の形態1,2のDMAC20と同一機能を達成する構成要素については同一番号を付しており、重複する説明は省略する。
本実施の形態3においては、MCU100のIOバス2に、BSC14、タイマ15、DMAC20、UART60とともにI/Oポート(以下、PORT70という)が接続されている。ここでは、PORT70が特許請求の範囲に記載の周辺モジュールに対応し、タイマ15が転送要求モジュールに対応する。
本実施の形態3においては、DMAC20が6チャネルで構成される場合について説明する。DMAC20は、チャネルC0〜チャネルC5、共通制御部30、バスインタフェース部40からなる。なお、チャネルC0,C1は実施の形態1と同様の機能を有するとともにチャネルC2,C3は実施の形態2と同様の機能を有するため、図8においてその記載を省略している。
チャネルC4はチャネル4に対応し、チャネルC5はチャネル5に対応する。共通制御部30は、チャネルC0〜C5に共通する動作を制御する。バスインタフェース部40は、チャネルC0〜C5と共通制御部30を接続する。
チャネルC4,C5は、イネーブルレジスタ22、転送カウントレジスタ(TCR)26、写像領域アドレスレジスタ27、ループレジスタ(転送回数指定レジスタ)28、転送制御部24を備えている。本実施の形態3においては、チャネルC4がタイマ15のチャネル1から転送要求を受け付け、チャネルC5がタイマ15のチャネル2から転送要求を受け付ける。
ループレジスタ28は、転送処理のループ制御を指定する例えば5bitのレジスタである。ループレジスタ28は、例えば「0」〜「16」を設定可能とし、「17」〜「31」を設定禁止とする。
転送カウントレジスタ26には、イネーブルレジスタ22が「0」(転送禁止)から「1」(転送許可)に設定されると、ループレジスタ28の値がコピーされる。転送カウントレジスタ26は、1回の転送要求に応じて1データの転送を行なうたびにデクリメントされ、「0」になると再びループレジスタ28の値がコピーされる。これにより、DMAC20の転送処理が続行する。すなわち、CPU11がDMAC20へ再設定を行なうことなく、DMAC20による無限回のDMA転送を行なうことが可能となる。ここでの写像領域アドレスレジスタ27は、転送カウントレジスタ26が「0」にデクリメントされると、「0」にデクリメントされるタイミングで「0」にリセットされる。
図14は、PORTの構成を示すブロック図である。PORTは、例えば8bitのポートレジスタ71A(PDR(Port data register)0)、ポートレジスタ71B(PDR1)、バスインタフェース部72からなる。バスインタフェース部72は、ポートレジスタ71Aとポートレジスタ71Bを接続するとともにIOバス2と接続されている。バスインタフェース部72を介してポートレジスタ71Aに書き込まれたデータは例えば8bitからなる所定の出力端子に出力される。また、この出力端子とは異なる例えば8bitからなる所定の入力端子に入力されたデータはポートレジスタ71Bに反映され、バスインタフェース部72を介してDMAC20等から読み出すことができる。
本実施の形態3においては、タイマ15がチャネル0〜2を有している。なお、タイマ15のチャネル1とチャネル2は、同様の構成を有するので、ここではタイマ15のチャネル1を例にとって説明する。図15は、実施の形態3に係るタイマの構成を示すブロック図である。図15においては、タイマ15の1つのチャネル(チャネル1)の構成のみを図示し、チャネル0,2の記載を省略している。タイマ15のチャネル1は、例えば16ビットのカウンタ59、分周器51、バスインタフェース部55、リロードレジスタ57、イネーブルレジスタ58からなる。
カウンタ59は、分周器51が生成した信号をカウントする。カウンタ59は、制御レジスタ54によってチャネル1がオンの状態に設定された場合に、分周器51が分周する信号に同期してデクリメントされる。カウンタ59は、カウンタ59が「0」にデクリメントされるタイミング(カウンタアンダーフロー(UF1)の発生)で、DMAC20に転送要求(UF(Under Flow)1)を通知する。カウンタ59がDMAC20に転送要求(UF1)を通知すると、このタイミングでリロードレジスタ57の値がカウンタ59に読み込まれ、カウンタ59のデクリメントが再開される。ここでのカウンタ59が特許請求の範囲に記載の転送要求部に対応する。
タイマ15のチャネル2は、カウンタ59が「0」にデクリメントされるタイミング(カウンタアンダーフロー(UF2)の発生)で、DMAC20に転送要求(UF2)を通知する。
リロードレジスタ57は、カウンタ59がDMAC20に転送要求(UF1)、転送要求(UF2)を通知した際に、カウンタ59にカウントする値を提供するレジスタである。イネーブルレジスタ58は、リロードレジスタ57の値をカウンタ59にコピーするか否かを指定するレジスタである。
つぎに、DMAC20と周辺モジュールの関係を説明する。図16は、実施の形態3に係るDMACのチャネルの機能と特徴を説明するための図である。ここでは、DMAC20のチャネルC4が、転送要求元(タイマ15のチャネル1)の事象(カウンタアンダーフロー(UF1))によって、PORT70のポートレジスタ71A(PDR0)にアクセスし、内蔵RAM10から読み出したデータをPORT70のポートレジスタ71Aへデータ転送する場合(「RAM→REG」)を示している。また、DMAC20のチャネルC4は、内蔵RAM10内の転送領域相対アドレス「0x30」番地から「0x3F」番地までの16バイト(転送データ8bit(1byte)の16個分)の領域をチャネルC4用の写像領域として占有する場合を示している。
また、DMAC20のチャネルC5が、転送要求元(タイマ15のチャネル2)の事象(カウンタアンダーフロー(UF2))によって、PORT70のポートレジスタ71B(PDR1)にアクセスし、PORT70のポートレジスタ71Bの内容を読み出して内蔵RAM10に転送する(REG→RAM)場合を示している。また、DMAC20のチャネルC5は、内蔵RAM10内の転送領域相対アドレス「0x40」番地から「0x4F」番地までの16バイト(転送データ8bitの16個分)の領域をチャネルC5用の写像領域として占有する場合を示している。
また、DMAC20のチャネルC4,C5は、転送のたびに1バイト(1データ分)だけ内蔵RAM10のアドレスが増加し(「RAM:増加」)、周辺モジュール(PORT70)のポートレジスタ71A,71Bは同じアドレスが転送対象(REG:固定)である場合を示している。
本実施の形態3に係るDMAC20は、図4に示す実施の形態2と同様の動作手順を行なうためその説明は省略する。なお、本実施の形態3に係るDMAC20においては、DMAC20の各チャネルC4,C5の初期設定として、チャネル毎に割り込み許可レジスタ23の設定の代わりに、ループレジスタ28の設定を行なう(ステップS120)。例えば、ループレジスタ28として「16」を設定する。
ここで、周辺モジュールから内蔵RAM10へのデータ転送の処理手順について説明する。図17−1および図17−2は、実施の形態3に係るMCU内のデータ転送の処理手順を示すフローチャートである。図17−1では、タイマ15のチャネル1からの転送要求(UF1)に応じて内蔵RAM10のデータをPORT70に転送する場合について説明し、図17−2では、タイマ15のチャネル2からの転送要求(UF2)に応じて、PORT70のデータを内蔵RAM10に転送する場合について説明する。
CPU11においてPORT70へ書き込むデータがある場合、このデータを内蔵RAM10にライトする(ステップS705)。タイマ15のチャネル1において、イネーブルレジスタ58がチャネルオンの状態にセットされると、リロードレジスタ57の値がカウンタ59にコピーされる。タイマ15のチャネル1のカウンタ59が「0」にデクリメントされると(カウンタアンダーフロー(UF1)の発生)(ステップS710)、チャネル1のカウンタ59はDMAC20のチャネルC4に転送要求(UF1)を通知する(ステップS720)。
カウンタ59がDMAC20に転送要求(UF1)を通知すると、このタイミングでリロードレジスタ57の値がカウンタ59に読み込まれ(ステップS730)、カウンタ59のデクリメントが再開される。
DMAC20のチャネルC4は、転送カウントレジスタ26の値を確認する(ステップS740)。転送カウントレジスタ26の値が「0」でなければ(ステップS740、No)、写像領域アドレスレジスタ27に基づいて内蔵RAM10のデータをリードし(ステップS750)、共通制御部30がポートレジスタ71Aに内蔵RAM10のデータを送信(ライト)する(ステップS760)。
写像領域アドレスレジスタ27は、1データの転送を行なうたびに1ずつインクリメントされる。写像領域アドレスレジスタ27は、次に転送要求があった際にアクセスする写像領域のアドレスを、写像領域相対アドレスの先頭からの相対アドレスとして保持する(ステップS770)。
転送カウントレジスタ26は、1回の転送要求に応じて1データの転送を行なうたびにデクリメントされる(ステップS780)。転送カウントレジスタ26の値が「0」になるまで、転送要求(UF1)がDMAC20に送信されると内蔵RAM10のデータをリードし、共通制御部30がポートレジスタ71Aにデータを送信する処理が繰り返される(ステップS705〜S780)。
転送カウントレジスタ26の値が「0」になると(ステップS740、Yes)、ループレジスタ28の値が転送カウントレジスタ26にコピーされる(ステップS790)。これにより、内蔵RAM10のデータをリードし、ポートレジスタ71Aにデータをライトする処理が繰り返される(ステップS705〜S790)。写像領域アドレスレジスタ27は、転送カウントレジスタ26が「0」にデクリメントされるタイミングで「0」にリセットされる。
タイマ15のチャネル2において、イネーブルレジスタ58がチャネルオンの状態にセットされると、リロードレジスタ57の値がカウンタ59にコピーされる。タイマ15のチャネル2のカウンタ59が「0」にデクリメントされると(カウンタアンダーフロー(UF2)の発生)(ステップS810)、チャネル2のカウンタ59はDMAC20のチャネルC5に転送要求(UF2)を通知する(ステップS820)。
カウンタ59がDMAC20に転送要求(UF2)を通知すると、このタイミングでリロードレジスタ57の値がカウンタ59に読み込まれ(ステップS830)、カウンタ59のデクリメントが再開される。
DMAC20のチャネルC5は、転送カウントレジスタ26の値を確認する(ステップS840)。転送カウントレジスタ26の値が「0」でなければ(ステップS840、No)、PORT70のポートレジスタ71Bのデータをリードし(ステップS850)、共通制御部30が内蔵RAM10にポートレジスタ71Bのデータをライトする(ステップS860)。
写像領域アドレスレジスタ27は、1データの転送を行なうたびに1ずつインクリメントされる。写像領域アドレスレジスタ27は、次に転送要求があった際に転送する写像領域のアドレスを、写像領域相対アドレスの先頭からの相対アドレスとして保持する(ステップS870)。
転送カウントレジスタ26は、1回の転送要求に応じて1データの転送を行なうたびにデクリメントされる(ステップS880)。転送カウントレジスタ26の値が「0」になるまで、転送要求(UF2)がDMAC20に送信されるとポートレジスタ71Bのデータをリードし、共通制御部30が内蔵RAM10にポートレジスタ71Aのデータをライトする処理が繰り返される(ステップS810〜S880)。
転送カウントレジスタ26の値が「0」になると(ステップS840、Yes)、ループレジスタ28の値が転送カウントレジスタ26にコピーされる(ステップS890)。これにより、ポートレジスタ71Bのデータをリードし、内蔵RAM10にポートレジスタ71Aのデータをライトする処理が繰り返される(ステップS810〜S890)。写像領域アドレスレジスタ27は、転送カウントレジスタ26が「0」にデクリメントされるタイミングで「0」にリセットされる。この後、CPU11はDMAC20から転送されたデータを所定のタイミングでCPUバス1を介して内蔵RAM10からリードする(ステップS900)。
実施の形態4.
つぎに、図18を用いてこの発明の実施の形態4について説明する。実施の形態4では、DMAC20が従来のDMAC120が備える汎用的な機能を有したチャネルD0,D1をさらに備えている。
図18は、実施の形態4に係るDMACの構成を示す図である。図18の各構成要素のうち図1、図7および図13に示す実施の形態1〜3のDMAC20と同一機能を達成する構成要素については同一番号を付しており、重複する説明は省略する。
本実施の形態4においては、DMAC20が8チャネルで構成される場合について説明する。DMAC20は、チャネルC0〜チャネルC7、共通制御部30、バスインタフェース部40からなる。
チャネルC6はチャネル6に対応し、チャネルC7はチャネル7に対応する。共通制御部30は、チャネルC0〜C7に共通する動作を制御する。バスインタフェース部40は、チャネルC0〜C7と共通制御部30を接続する。
チャネルC6,C7は、実施の形態1の図5で説明したDMAC120が備えるチャネルD0,D1と同様の機能を有している。すなわち、本実施の形態4に係るDMAC20は、従来のDMAC120が備える汎用的な機能を有したチャネルC6(D0),C7(D1)と、実施の形態1〜3で説明した用途に特化したチャネルC0〜C5を含んで構成されている。なお、ここでのチャネルC6,C7が特許請求の範囲に記載の判別転送チャネルに対応する。
なお、本実施の形態4においては、バスインタフェース部40がチャネルC0〜チャネルC7と共通制御部30を接続することとしたが、チャネルC0〜C7と共通制御部30の接続はこの接続に限られず、DMAC20が複数のバスインタフェース部40を備え、一方のバスインタフェース部40がチャネルC0〜C5と共通制御部30接続し、他方のバスインタフェース部40がチャネルC6,C7と共通制御部30を接続する構成としてもよい。
このように実施の形態4によれば、DMAC20をハイブリッドな構成にすることによって、用途に特化したチャネルC0〜C5によるDMA転送と、汎用的なチャネルC6,C7によるDMA転送とを用途に応じて使い分けることが可能となる。したがって、用途に特化してハードウェア規模を削減したチャネルC0〜C5と汎用的な動作の可能なチャネルC6,C7を組み合わせることによって、用途に応じた適切なハードウェア規模のDMAC20を得ることが可能となる。