- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
PSoC4200MでDMAとUARTのレジスタ設定とDMA、UARTのスタートトリガのみでFIFOバッファサイズを超えるデータを転送途中の割り込み処理なしで転送できませんか?
DMAの転送エレメント数を例えば64、DMAトリガをレベルにしてUARTからのDMA接続端子を接続しておけば、UARTとDMA転送を開始させればFIFOレベル以下ではDMA転送要求”1”になり、フルになると”0”になってDMA転送が中断され、UART転送されFIFOレベル以下になるとDMA転送要求が再度”1”になり転送が継続されないのでしょうか?
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
有り難うございます。
早速試してみます。
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
テスト結果:
アドバイスありがとうございました。
UART動作の関係で、
TxDMA_ChEnable();
にした後、
TxDMA_Trigger();
を追記したらうまくいきました。