PSoC4200MでメモリからUARTへDMAを用いてFIFOバッファサイズ以上のデータを割り込み処理なしで転送できませんか?

Tip / ログイン to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
seya_3990781
Level 3
Level 3
Welcome! First solution authored 10 replies posted

PSoC4200MでDMAとUARTのレジスタ設定とDMA、UARTのスタートトリガのみでFIFOバッファサイズを超えるデータを転送途中の割り込み処理なしで転送できませんか?

DMAの転送エレメント数を例えば64、DMAトリガをレベルにしてUARTからのDMA接続端子を接続しておけば、UARTとDMA転送を開始させればFIFOレベル以下ではDMA転送要求”1”になり、フルになると”0”になってDMA転送が中断され、UART転送されFIFOレベル以下になるとDMA転送要求が再度”1”になり転送が継続されないのでしょうか?

0 件の賞賛
1 解決策
NoriTan
Employee
Employee
25 sign-ins 5 questions asked 10 sign-ins

Code Example の "CE224406_PSoC4_UART_DMA" が、この例に該当します。

ただし、このプロジェクト例で送信のみに適用したところ、うまく動きませんでした。

    // Initialize DMA

    TxDMA_Init();

    TxDMA_SetDstAddress(DESCR0, (void *)UART_TX_FIFO_WR_PTR);

    CyDmaEnable();

    // Trigger DMA

    TxDMA_SetSrcAddress(DESCR0, (void *)packet);

    TxDMA_SetNumDataElements(DESCR0, sizeof packet);

    TxDMA_ValidateDescriptor(DESCR0);

    TxDMA_ChEnable();

このように、CyDmaEnable() の呼び出しが別途必要です。

プロジェクト例では、 RxDMA_Start((void *)UART_RX_FIFO_RD_PTR, (void *)uartBuffer0); の内部で呼び出されているために、 TxDMA 側では省略されていました。

Regards,

Noriaki

元の投稿で解決策を見る

0 件の賞賛
3 返答(返信)
NoriTan
Employee
Employee
25 sign-ins 5 questions asked 10 sign-ins

Code Example の "CE224406_PSoC4_UART_DMA" が、この例に該当します。

ただし、このプロジェクト例で送信のみに適用したところ、うまく動きませんでした。

    // Initialize DMA

    TxDMA_Init();

    TxDMA_SetDstAddress(DESCR0, (void *)UART_TX_FIFO_WR_PTR);

    CyDmaEnable();

    // Trigger DMA

    TxDMA_SetSrcAddress(DESCR0, (void *)packet);

    TxDMA_SetNumDataElements(DESCR0, sizeof packet);

    TxDMA_ValidateDescriptor(DESCR0);

    TxDMA_ChEnable();

このように、CyDmaEnable() の呼び出しが別途必要です。

プロジェクト例では、 RxDMA_Start((void *)UART_RX_FIFO_RD_PTR, (void *)uartBuffer0); の内部で呼び出されているために、 TxDMA 側では省略されていました。

Regards,

Noriaki

0 件の賞賛

テスト結果:

アドバイスありがとうございました。

UART動作の関係で、

TxDMA_ChEnable();

にした後、

TxDMA_Trigger();

を追記したらうまくいきました。

0 件の賞賛