RSPIのデータレジスタ(SPDR)は、16bit/32bitでのアクセスしか許可されていません。
8bitのデータを送信する時でも、SPDRへは16bitでライトする必要があります。
これは、DMAC/DTCでは8bit単位でのデータ転送は使えないという事でしょうか?
実際に送信をDMACの転送サイズ8bitで試してみましたが、DMACは確かに転送はしていますがRSPIからデータは送信されません。
DMACの転送サイズを16bitにすればRSPIから送信されますが、送信元データを上位8bitを無駄にした16bit単位で用意する必要があります。
バイト単位の転送が出来ないなんて、とても信じ難いのですがこれが正しい仕様という事でしょうか?
ハードウェアマニュアルからはこれ以上の情報は見つけられないのですが、どなたか8bit単位でRSPIにDMAC/DTCで転送出来た方いませんか?
Windyponさん わわいさんのコメントどおりで8bit転送はあきらめて16bit転送するしかないと思います。 メモリを節約する方法としては、 8bit DMAで準備してあるデータ配列から、ワークのメモリ(16bitの下位アドレス)にいったんコピーして、 DMA完了割り込みでDTC(ワード転送)を起動して、2バイトのワークメモリからSPDRにライトという2段階にすることで対応かと思います。
と思いましたけれども、DMA完了割り込みを1バイトずつ発生させると転送元のアドレスがインクリメントできないので、DMAをあきらめて、DTCのチェーン機能でデータ配列→2バイトのワークメモリ→SPDRにしないといけなさそうですね。
お二方ありがとうございます。既に知られた話題だったんですね。
RX62NでRSPI0での送信にDMAC0を使いたいが起動しない という全く同じ内容の書込もありました。
是非FAQに載せて欲しいですね。載らないでしょうけど。
RSPI+DMAの組合せは以前から使っていたのですが、16bit/32bit単位でキリの良いデータだったので気付きませんでした。
出来ない物はどうしようも無いので、Kirinさんも書いてるDTCチェイン転送の2段階で8bit→16bitで転送しました。
RX631を使っているのですが、最新のRX71Mでもこの仕様は変わってないですね。
RSPIは今ひとつ有効な使い所が分からないシーケンスの機能といい、どこを目指して作ったのか分からない仕様だと思います。