はじめまして。kstと申します。
SH7269にて、DMAの転送元(SAR7)をグローバル変数の配列、転送先(DAR7)を送信シフトレジスタ(SCFTDR_1)として、DMA転送を使用したUART送信を試みています。
送信自体は成功しているのですが、送信データが全て0となる事象が発生しました。
デバッガ上で、SAR7に指定した配列のアドレスが設定されており、配列に0でない値が入っていることは確認できています。
転送元配列の宣言時に初期値を与えたところ、その値が送信されましたが、その後配列の値を書き換えても、初期値が送信されました。
そのため、現在の値に関わらず変数宣言時の初期値が送られる挙動となっているように思われます。
DMA転送ではROM領域の転送しかできないということでしょうか?
それとも見落としているレジスタ設定があるのでしょうか?
DMAの設定は以下のようにしています。
----------------------------------------------------------------------------------------------------
//DMACのモジュールスタンバイ解除CPG.STBCR2.BIT.MSTP8 = 0;
//DMAC7の転送を停止 DMAC.CHCR7.BIT.DE = 0x0;
//転送元のアドレスを指定DMAC.SAR7.LONG = (unsigned long)&SndData[0];
//転送先のアドレスを指定 DMAC.DAR7.LONG = (unsigned long)&SCIF1.SCFTDR.BYTE;
//転送回数指定DMAC.DMATCR7.LONG = SndSize;
//チャネルコントロールレジスタの設定
DMAC.CHCR7.LONG = 0x00001800;
//転送要因をTXD1に設定 DMAC.DMARS3.BYTE.CH7 = 0x85;
//DMAマスタを有効DMAC.DMAOR.WORD = 0x0001;
//DMAC7の転送を許可 //DMAC.CHCR7.BIT.DE = 0x1;
よろしくお願いいたします。
上手くいったようで、良かったです。
DMA・DTCはCPUとは別の小さなCPUみたいな物でデバッグがし難いんですよね。
自分もつい先日RX231のDTCで、仕様を見落としててハマってました。
ただ、ちゃんと使えばCPUだけでは不可能な性能が達成出来るので、上手く使いたいですね。
自分は3MbpsのUART×2chの送受信を割込制御では取りこぼしていたのですが、DTCを使う事で問題無く出来るようになりました。