SCI 非同期通信設定でのDMACAについて

こんにちは。

RX72N EnvisonKitとスマートコンフィグレータで動作確認してます

以下につてご存じでしたら、お教え願います。

SCIの送信はDMAで、受信はCPU(プログラム)で行う方法は可能か?

スマートコンフィグレータ(V2.12.0)のr_sci_rx(4.40)で以下設定してます。

Use DTC/DMA for Transmit(SCI7) =2

Use DTC/DMA for Receive(SCI7) = 0

上記設定で送信はDMA完了タイミングでのSCI用 SCI_EVT_TEI割り込みが発生し データも相手に

データが送られていること確認しました。

しかし、受信は割り込は発生しますが、SCI_EVT_RXBUF_OVFLで割り込みが発生します。

(SCI_EVT_RX_CHARを期待したのですが)

スマートコンフィグレータが生成したr_sci_rx.cを確認したところ、r_SCI_OpenでQueバッファが

作成されないように思われます。(tx条件のみで tx、rx用queバッファをそれぞれ確保)

確認はSCIのDMA選択すると送信、受信共にDMAで行うことになるのでしょうか?

(別々の転送機能選択は困難と考える?)

既に投稿済みでしたら、併せていお教えください。

個人的な思い:

送信は送る数が確定(概ね)し送るのでDMA機能が便利かと。

受信は1データ単位で割り込みが発生し、CPUが読み出し(Que数処理すれば

良いかと。(固定長ならDMAでもOKですが)

Parents
  • マイコン初心者さん、こんにちは。NoMaYと申します。(home_hobbyさんでしたでしょうか?)

    > SCIの送信はDMAで、受信はCPU(プログラム)で行う方法は可能か?

    RXスマートコンフィグレータで生成したFITモジュールのドキュメントに以下の記載(赤文字行)がありますので、たぶん出来ないだろうと推測されます。初心者向けでは無く上級者向けなりますが、CGコンポーネントなら可能だと思います。(適切な表現かどうか悩ましいですけれども `上級者向け` となりますので、どうしてもスキルとコーディングが増えてしまいますけれども。)

    R01AN1815JJ0440 Rev.4.40 Pages 101 Mar.31.22
    6頁目

    DTC/DMAC サポートを有効にしてSCI を使用する時の注意事項:
    ・ SCI とDTC の使用時:r_bsp_config.h 内にある#define BSP_CFG_HEAP_BYTES には、をSCI FITとDTC FIT によって使用されるヒープサイズの合計よりも大きな値を設定してください。
     o ヒープサイズ= DTC を使用するSCI のチャネル数× (SCI チャネルごとのデータ送信情報ノード(sci_dtc_info_transfer_t)のサイズ)
     o DTC を使用するSCI のチャネル数はSCI_CFG_CHn_TX_DTC_DMACA_ENABLE (1)またはSCI_CFG_CHn_RX_DTC_DMACA_ENABLE (1)の合計値から導き出せます。
    ・ DMAC とSCI を使用する場合、RX23W、RX23E-A、RX230、RX231 で利用可能なDMAC は4チャネルのみです。0~3 いずれかのDMAC チャネルを選択してください(SCI_CFG_CHn_TX_DMACA_CH_NUM およびSCI_CFG_CHn_RX_DMACA_CH_NUM)。
    ・ このモードは、制御機能の一部のコマンドをサポートしていません(SCI_CMD_EN_CTS_IN、SCI_CMD_GENERATE_BREAK、SCI_CMD_ABORT_XFER)。
    ・ DTC/DMAC サポートを有効にしてSCI 機能を使用する前に、DTC/DMAC FIT モジュールをインポートし、DMAC を初期化して、DTC を開く必要があります。
    ・ SCI チャネルをクローズする前にDTC/DMAC FIT モジュールをクローズする必要があります。
    ・ チャネルSCI の設定は、TX とRX で共通にする必要があります(例:DTC がSCI1 TX のデータ転送方法である場合、SCI1 RX のSYNC とASYNC 両方のモードでDTC をデータ転送方法にする必要があります)。
    ・ 選択するDMAC チャネルは、同じSCI チャネルのTX とRX の間で、また、複数のSCI チャネル間で異なっている必要があります(例:SCI0/TX がDMAC0 を使用している場合、SCI0/RX はDMAC0を使用できないので、DMAC1 のような他のDMAC チャネルを使用する必要があります。また、この場合、SCI1/TX はDMAC0 とDMAC1 のどちらも使用できないので、SCI1/TX がDMAC2 を使用し、SCI1/RX がDMAC3 を使用するなど、他のDMAC チャネルを使用する必要があります)。
    ・ DTC/DMAC を使用する場合、SCI FIT はデータの送受信にBYTEQ を使用しません。
    ・ DMAC/DTC を使用する場合、SCI FIT は循環バッファを使用できません。


Reply
  • マイコン初心者さん、こんにちは。NoMaYと申します。(home_hobbyさんでしたでしょうか?)

    > SCIの送信はDMAで、受信はCPU(プログラム)で行う方法は可能か?

    RXスマートコンフィグレータで生成したFITモジュールのドキュメントに以下の記載(赤文字行)がありますので、たぶん出来ないだろうと推測されます。初心者向けでは無く上級者向けなりますが、CGコンポーネントなら可能だと思います。(適切な表現かどうか悩ましいですけれども `上級者向け` となりますので、どうしてもスキルとコーディングが増えてしまいますけれども。)

    R01AN1815JJ0440 Rev.4.40 Pages 101 Mar.31.22
    6頁目

    DTC/DMAC サポートを有効にしてSCI を使用する時の注意事項:
    ・ SCI とDTC の使用時:r_bsp_config.h 内にある#define BSP_CFG_HEAP_BYTES には、をSCI FITとDTC FIT によって使用されるヒープサイズの合計よりも大きな値を設定してください。
     o ヒープサイズ= DTC を使用するSCI のチャネル数× (SCI チャネルごとのデータ送信情報ノード(sci_dtc_info_transfer_t)のサイズ)
     o DTC を使用するSCI のチャネル数はSCI_CFG_CHn_TX_DTC_DMACA_ENABLE (1)またはSCI_CFG_CHn_RX_DTC_DMACA_ENABLE (1)の合計値から導き出せます。
    ・ DMAC とSCI を使用する場合、RX23W、RX23E-A、RX230、RX231 で利用可能なDMAC は4チャネルのみです。0~3 いずれかのDMAC チャネルを選択してください(SCI_CFG_CHn_TX_DMACA_CH_NUM およびSCI_CFG_CHn_RX_DMACA_CH_NUM)。
    ・ このモードは、制御機能の一部のコマンドをサポートしていません(SCI_CMD_EN_CTS_IN、SCI_CMD_GENERATE_BREAK、SCI_CMD_ABORT_XFER)。
    ・ DTC/DMAC サポートを有効にしてSCI 機能を使用する前に、DTC/DMAC FIT モジュールをインポートし、DMAC を初期化して、DTC を開く必要があります。
    ・ SCI チャネルをクローズする前にDTC/DMAC FIT モジュールをクローズする必要があります。
    ・ チャネルSCI の設定は、TX とRX で共通にする必要があります(例:DTC がSCI1 TX のデータ転送方法である場合、SCI1 RX のSYNC とASYNC 両方のモードでDTC をデータ転送方法にする必要があります)。
    ・ 選択するDMAC チャネルは、同じSCI チャネルのTX とRX の間で、また、複数のSCI チャネル間で異なっている必要があります(例:SCI0/TX がDMAC0 を使用している場合、SCI0/RX はDMAC0を使用できないので、DMAC1 のような他のDMAC チャネルを使用する必要があります。また、この場合、SCI1/TX はDMAC0 とDMAC1 のどちらも使用できないので、SCI1/TX がDMAC2 を使用し、SCI1/RX がDMAC3 を使用するなど、他のDMAC チャネルを使用する必要があります)。
    ・ DTC/DMAC を使用する場合、SCI FIT はデータの送受信にBYTEQ を使用しません。
    ・ DMAC/DTC を使用する場合、SCI FIT は循環バッファを使用できません。


Children
No Data