DMAを使用したUART受信について

毎度お世話になっております。

V850ES/JH3-Eを使用しております。

DMA0の転送起動要因としてUARTC3の受信完了割り込み(INTUC3R)を指定しています。

例えば、DMA0の転送回数を5回、5バイトの受信があった場合、最初の1バイトを受信した時点でDMA0が転送を開始し、その後の4バイトで起こる受信割込みは無視される、という認識で正しいでしょうか。

また、このとき無視される受信割込みの割り込み要求フラグ(UC3RIF)は、DMA転送完了割り込み内でクリアする必要があるのでしょうか。

あと、通信速度が遅い場合、UARTC0の受信レジスタが更新されていないのにDMA0がデータの取得に行ってしまう、ということは起こりうるのでしょうか。

毎度質問ばかりで申し訳ありませんが、
以上、よろしくお願いいたします。
Parents
  • すと様
    チョコ様

    返信が遅くなり申し訳ありません。

    「その後の4バイトで起こる受信割込みは無視される」という認識が間違っていたこと、理解できました。
    検証コードも作成して動作していることを確認しているのですが、上記のような認識でしたので疑問に思った次第です。

    また、すと様にご指摘いただいたDMAのバス占有も確認してみました。
    今回の場合のバス占有時間は以下のようになるかと思います。
    9クロック = 2(内蔵RAM) + 1(idle) + (3(UC3RX) + 3(VSWC=0x12で設定したウェイト))
    DMAを使用せず普通に受信完了割り込みを処理する場合のCPU時間と、バス占有時間とを天秤にかけると、今回はDMAを使用したほうが効率が良さそうです。

    お二人の丁寧なご説明に感謝いたします。
    ありがとうございました。
Reply
  • すと様
    チョコ様

    返信が遅くなり申し訳ありません。

    「その後の4バイトで起こる受信割込みは無視される」という認識が間違っていたこと、理解できました。
    検証コードも作成して動作していることを確認しているのですが、上記のような認識でしたので疑問に思った次第です。

    また、すと様にご指摘いただいたDMAのバス占有も確認してみました。
    今回の場合のバス占有時間は以下のようになるかと思います。
    9クロック = 2(内蔵RAM) + 1(idle) + (3(UC3RX) + 3(VSWC=0x12で設定したウェイト))
    DMAを使用せず普通に受信完了割り込みを処理する場合のCPU時間と、バス占有時間とを天秤にかけると、今回はDMAを使用したほうが効率が良さそうです。

    お二人の丁寧なご説明に感謝いたします。
    ありがとうございました。
Children
No Data