RX62NでRSPI0での送信にDMAC0を使いたいが起動しない

件名の通りなのですが、

・RSPI0を送信専用で使う

・送信データエンプティ割り込みでDMAC0を使って送信データをレジスタに転送したい

 

というものです。

DMAC0を使わず、送信データエンプティ割り込みを使って割り込み処理で送信レジスタに書き込んで連続

送信することはできています。

DMAC0をハードウェアマニュアルを見ながら設定したのですが、DMAC0が起動しません。

設定としては、

・ソースアドレス(インクリメントする)

・デスティネーションアドレス(&RSPI0.SPDR.WORD.Hで固定)

・起動の要因(ICU.DMRSR0 = 46;SPTI0(RSPI0 送信バッファエンプティ割り込み)

が主かと思います。

DMAC0を使わない方法ではうまく行っているので、RSPI0の使い方は間違っていないようです。

RSPIの送信データエンプティは、送信をしてない時は常にエンプティフラグが1なので、DMAC0を

動かそうとしても0->1の変化がないから起動しないのかなぁ...など考えてます。

RSPIとDMACの組み合わせで使うのは初めてでちょっと戸惑ってます。

 

ご存知の方がいらっしゃいましたがご教示ください。

Parents
  • 解決しました。なかなか興味深い理由でした。言われてみればそうですが...

    まず情報が足りませんでしたが、

    ・RSPIで転送するデータは8bit

    です。これが原因でした。
    RSPIでは8bitのデータを転送することはできますが、転送データ用のレジスタはWORDアクセス
    しなくてはなりません。
    DMACでの転送サイズを8bitにしてましたが、8bitでRSPIのデータ転送レジスタにライトしてもダメなんですね。
    RSPIの割り込みが発生しないのはこれが原因のようです。

    16bitでDMA転送すればRSPIのデータが出てきました!!
    そのため、

    ・RSPIの転送は16bit
    ・DMACの転送も16bit

    にしないとダメでした。
    これに合わせて転送するデータの並びを変えたりしないといけませんでしたが、ソフトを介在しないで
    転送できるので、データの並びを変えて16bit転送することにしました。
    8bitでRSPI転送する時はそのままDMACを使えないということのようです。
Reply
  • 解決しました。なかなか興味深い理由でした。言われてみればそうですが...

    まず情報が足りませんでしたが、

    ・RSPIで転送するデータは8bit

    です。これが原因でした。
    RSPIでは8bitのデータを転送することはできますが、転送データ用のレジスタはWORDアクセス
    しなくてはなりません。
    DMACでの転送サイズを8bitにしてましたが、8bitでRSPIのデータ転送レジスタにライトしてもダメなんですね。
    RSPIの割り込みが発生しないのはこれが原因のようです。

    16bitでDMA転送すればRSPIのデータが出てきました!!
    そのため、

    ・RSPIの転送は16bit
    ・DMACの転送も16bit

    にしないとダメでした。
    これに合わせて転送するデータの並びを変えたりしないといけませんでしたが、ソフトを介在しないで
    転送できるので、データの並びを変えて16bit転送することにしました。
    8bitでRSPI転送する時はそのままDMACを使えないということのようです。
Children
No Data