かふぇルネに投稿しました。
ルネサス製品で開発していると遭遇するDTCとDMAC。
DMACはほとんどのマイコンに搭載されていますね。ダイレクトメモリアクセスコントローラの略でDMACです。
DMACの特徴はその名の通り、メモリに直接アクセスできることです。
通常、メモリにアクセスするにはCPUを通して行います。これはデータやコマンドを流すバスの制御をCPUが行っているからです。しかし、DMACで転送をおこなうとバスの使用優先順位がDMACの方が高いため、通常のメモリ転送制御より高速に転送できるようになります。
ではDTCの方ですが、こちらはデータトランスファコントローラの略でDTCです。
データを転送するという意味ではDMACと同じですが、下記の点で異なります。
- バス優先順位
- 起動時間
例としてRX631を取り上げると、バス優先順位は高いほうから「EDMAC」>「DMAC」>「DTC」>「CPU」となっています(EDMACは外部バス専用のDMAC、外付けRAMやROMに対して使用される)。データは必ずバスを通りますから、優先順位の高い方が転送速度として優れていることになります。
また、DMACは転送中にバス使用権を保有し続けますが、DTCは転送制御に必要な情報を読み書きする時にバス使用権を保有しますが、データ転送時には解放してしまいます(通常のバス調停に基づきます)。DTCの場合、タイミングによってはデータ転送を待たされるケースもある、ということです。
DMACは専用レジスタを保有しているため高速起動できますが、DTCはRAM上の任意の位置に設置するため起動要求から完了するまでに時間がかがります(あくまでDMACに対して時間がかかるという意味です)。DMACは3サイクル程度ですが、DTCは初回起動では15サイクル(転送モードによる)もかかります。
ではDTCは使えないか?というとそうことではありません。DTCのメリットとして以下が挙げられます。
- 転送本数の制限がない
- 割込みより高速
DMACは専用レジスタを設けているため、DMAC転送に利用できる要因は4本までです。しかし、DTCはRAM上に任意に配置できることから、起動要因の数だけ転送本数を持つ事が可能です。
データ転送を割込みで行うのとDTCで行うのとで比較した場合、転送要求から転送完了までの時間はDTCの方が高速です。割込みは汎用レジスタの退避・復旧作業が必要なため、DTCよりは遅くなってしまいます。つまり、DMACで転送するほど重要度は高くないが、そこそこ高速にデータ転送したい場合には最適です。
RX631に搭載されるDTC(DTCa)は転送情報スキップという機能が搭載されており、こちらが作用すると実行サイクルを大幅に低減する事も可能です。転送情報をスキップするには「同一起動要因であること」「前回転送で転送カウンタが0になっていないこと」「前回転送がチェーン転送ではないこと」が条件です。
概要をかいつまんでいるので、伝わりにくい箇所があると思いますが、要は仕様を把握した上で適切な機能を選択することが重要です。
ではこのケースではどれが適切か…そのような相談は個別にお申し込みくだされば対応させていただきます。