お世話になっております。
カイロスです。
DMA転送の初期化についてお聞きしたく、質問させていただきました。
外部AD変換データを外部FRAMへ保存する際に、DMAを使用して行おうとしているのですが、
DMAの転送が動作しない(転送回数がデクリメントされない)状況になっておりまして、何か初期化で足りないところがありましたら、ご教授頂きたく思います。
DMAの動作要因は、外部ADからの変換完了要求の割り込みを設定しています。
DMAの処理は以下です。
IEN( ICU, IRQ3 ) = 0; /* 割り込み禁止 */ ICU.DMRSR0 = 3; /* DMAに外部要因としてIRQ3の割り込みを設定 */ DMAC0.DMCNT.BIT.DTE = 0; /* 転送の禁止 */ DMAC0.DMAMD.BIT.DM = 2; /* 転送先アドレスをインクリメント */ DMAC0.DMAMD.BIT.SM = 0; /* 転送元アドレスを固定 */
DMAC0.DMTMD.BIT.DCTG = 1; /* 転送要求に外部割込み端子からの割り込みを設定 */ DMAC0.DMTMD.BIT.SZ = 1; /* データサイズを16bit転送にする。 */ DMAC0.DMTMD.BIT.DTS = 2; /* リピート領域、ブロック領域を設定しない */ DMAC0.DMTMD.BIT.MD = 0; /* ノーマル転送 */
DMAC0.DMSAR = (uint8_t*)E8ADC; /* 転送元アドレス 0x07f00000*/ DMAC0.DMDAR = (uint32_t*)MEM_RDAT; /* 転送先アドレス 0x05f00000 */ DMAC0.DMCRA = MEM_1WAV; /* 転送回数 10240回 */ //DMAC0.DMCRA = 1; /* 転送回数 */
DMAC0.DMCNT.BIT.DTE = 1; /* 転送許可 */
IEN( ICU, IRQ3 ) = 1; /* 割り込み許可 */ DMAC.DMAST.BIT.DMST = 1; /* 動作許可 */
割り込みは、立ち上がりで取っており、割り込み許可後に、割り込みが入っているのは確認ができました。
もしかすると、ハードの面を疑う必要もあるのかな?とも考えています。
以上、よろしくお願い致します。