Announcements
Community Announcement : Welcome to the NEW Cypress Developer Community.
cancel
Showing results for 
Search instead for 
Did you mean: 

PSoC 4 MCU

seya_3990781
New Contributor II

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

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

0 Likes
1 Solution
NoriakiT_91
Employee

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

View solution in original post

0 Likes
3 Replies
NoriakiT_91
Employee

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

View solution in original post

0 Likes
seya_3990781
New Contributor II

テスト結果:

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

UART動作の関係で、

TxDMA_ChEnable();

にした後、

TxDMA_Trigger();

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

0 Likes