#S32K388 Enhanced RX FIFO + eDMA: Continuous Circular Buffer Reception Without CPU Interrupts

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

#S32K388 Enhanced RX FIFO + eDMA: Continuous Circular Buffer Reception Without CPU Interrupts

42件の閲覧回数
zhangyu5454
Contributor III

Hi NXP Support,

I am using an S32K388 with the FlexCAN Enhanced RX FIFO and RTD. I would like to implement a continuous DMA-based CAN reception without any CPU interrupt.

My requirements are:

  • MCU: S32K388

  • CAN: Classical CAN, CAN FD disabled

  • CAN payload: 8 bytes

  • FlexCAN Enhanced RX FIFO enabled

  • DMA reception enabled

  • I need to receive CAN messages with any CAN ID, without filtering.

  • I want DMA to automatically transfer every received CAN frame into a RAM software ring buffer.

  • I do not want a FlexCAN RX interrupt.

  • I also do not want a DMA major-loop-complete interrupt.

  • DMA should continue running automatically without the CPU having to call FlexCAN_Ip_RxFifo() again.

  • Ideally, each received FIFO element should trigger a DMA transfer immediately, so I do not want to wait for a large FIFO watermark.

I checked the RTD source code. In FlexCAN_StartRxMessageEnhancedFifoData(), I found that the driver configures DMA approximately as follows:

Source address              = Enhanced RX FIFO output
Source transfer size        = 4 bytes
Source offset               = 4 bytes
Destination transfer size   = 4 bytes
Destination offset          = 4 bytes
Minor loop size             = 80 bytes
Major loop count            = num_enhanced_watermark
EnMajorInt                  = TRUE
DisAutoHwRequest            = TRUE

I understand that the current RTD implementation performs a finite DMA transfer and then stops, requiring FlexCAN_Ip_RxFifo() to be called again.

My question is:

Is it possible on S32K388 to configure the eDMA TCD so that the FlexCAN Enhanced RX FIFO DMA request continuously transfers received FIFO elements into a circular RAM buffer, without any CPU interrupt or software re-arming?

In particular, can Destination Modulo and/or another eDMA TCD feature be used to implement this continuous ring buffer?

If this is possible, could you please provide an example configuration or point me to an NXP example/reference implementation?

I am willing to modify the RTD FlexCAN driver or configure the eDMA TCD directly if necessary.

Thanks!

タグ(1)
0 件の賞賛
返信
1 返信

10件の閲覧回数
Julián_AragónM
NXP TechSupport
NXP TechSupport

Hello @zhangyu5454,

The driver is written in a way that requires FlexCAN_Ip_RxFifo() to be called in order to re-arm reception inside the FLEXCAN_EVENT_DMA_COMPLETE event.

It should be possible to have a continuous transfer from DMA to buffer; however, you will need to modify the RTDs or create your own driver. Unfortunately, this is out of our support scope, and if done, verification and functionality should be tested by you.

You would have to set TCDn_CSR[D_REQ] = 0 (DisAutoHwRequest = FALSE) & TCDn_CSR[INTMAJOR] in order to keep the channel armed and disable interrupts, as well as configure your circular data queue. You can refer to S32K3's DMA Training Presentation, under S32K3 Product Page and 'Secure Files'.

Best regards,
Julián

0 件の賞賛
返信
%3CLINGO-SUB%20id%3D%22lingo-sub-2411682%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%23S32K388%20%E6%8B%A1%E5%BC%B5RX%20FIFO%20%2B%20eDMA%3A%20CPU%E5%89%B2%E3%82%8A%E8%BE%BC%E3%81%BF%E3%81%AA%E3%81%97%E3%81%A7%E9%80%A3%E7%B6%9A%E5%BE%AA%E7%92%B0%E3%83%90%E3%83%83%E3%83%95%E3%82%A1%E5%8F%97%E4%BF%A1%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2411682%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3ENXP%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E3%81%AE%E7%9A%86%E3%81%95%E3%82%93%E3%80%81%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%82%3C%2FP%3E%3CP%3E%E7%A7%81%E3%81%AF%3CSTRONG%3EFlexCAN%20Enhanced%20RX%20FIFO%3C%2FSTRONG%3E%E3%81%A8RTD%E3%82%92%E6%90%AD%E8%BC%89%E3%81%97%E3%81%9F%3CSTRONG%3ES32K388%3C%2FSTRONG%3E%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%3CSTRONG%3ECPU%E5%89%B2%E3%82%8A%E8%BE%BC%E3%81%BF%E3%81%AA%E3%81%97%E3%81%A7%E9%80%A3%E7%B6%9A%E7%9A%84%E3%81%AADMA%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AECAN%E5%8F%97%E4%BF%A1%3C%2FSTRONG%3E%E3%82%92%E5%AE%9F%E7%8F%BE%E3%81%97%E3%81%9F%E3%81%84%E3%81%A8%E8%80%83%E3%81%88%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%3CP%3E%E7%A7%81%E3%81%AE%E8%A6%81%E6%9C%9B%E3%81%AF%E4%BB%A5%E4%B8%8B%E3%81%AE%E9%80%9A%E3%82%8A%E3%81%A7%E3%81%99%E3%80%82%3C%2FP%3E%3CUL%3E%3CLI%3E%3CP%3EMCU%3A%20%3CSTRONG%3ES32K388%3C%2FSTRONG%3E%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3ECAN%3A%20%3CSTRONG%3E%E3%82%AF%E3%83%A9%E3%82%B7%E3%83%83%E3%82%AF%E3%82%AD%E3%83%A3%E3%83%B3%3C%2FSTRONG%3E%E3%80%81CAN%20FD%E7%84%A1%E5%8A%B9%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3ECAN%E3%83%9A%E3%82%A4%E3%83%AD%E3%83%BC%E3%83%89%3A%20%3CSTRONG%3E8%E3%83%90%E3%82%A4%E3%83%88%3C%2FSTRONG%3E%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3EFlexCAN%E6%8B%A1%E5%BC%B5RX%20FIFO%E5%AF%BE%E5%BF%9C%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3EDMA%E5%8F%97%E4%BF%A1%E3%81%8C%E6%9C%89%E5%8A%B9%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3E%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF%E3%83%BC%E3%81%AA%E3%81%97%E3%81%A7%20%3CSTRONG%3E%E3%80%81%E3%81%A9%E3%81%AECAN%20ID%3C%2FSTRONG%3E%E3%81%A7%E3%82%82CAN%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E5%8F%97%E3%81%91%E5%8F%96%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3EDMA%E3%81%8C%E5%8F%97%E4%BF%A1%E3%81%97%E3%81%9F%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AECAN%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%82%92%E8%87%AA%E5%8B%95%E7%9A%84%E3%81%AB%20%3CSTRONG%3ERAM%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AE%E3%83%AA%E3%83%B3%E3%82%B0%E3%83%90%E3%83%83%E3%83%95%E3%82%A1%3C%2FSTRONG%3E%E3%81%AB%E8%BB%A2%E9%80%81%E3%81%97%E3%81%9F%E3%81%84%E3%81%AE%E3%81%A7%E3%81%99%E3%80%82%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3EFlexCAN%E3%81%AE%E5%8F%97%E4%BF%A1%E5%89%B2%E3%82%8A%E8%BE%BC%E3%81%BF%E3%81%AF%E4%B8%8D%E8%A6%81%E3%81%A7%E3%81%99%E3%80%82%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3EDMA%E3%81%AE%E3%83%A1%E3%82%B8%E3%83%A3%E3%83%BC%E3%83%AB%E3%83%BC%E3%83%97%E5%AE%8C%E4%BA%86%E5%89%B2%E3%82%8A%E8%BE%BC%E3%81%BF%E3%82%82%E4%B8%8D%E8%A6%81%E3%81%A7%E3%81%99%E3%80%82%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3EDMA%E3%81%AF%E3%80%81CPU%E3%81%8CFlexCAN_Ip_RxFifo()%E3%82%92%E5%86%8D%E5%BA%A6%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99%E3%81%93%E3%81%A8%E3%81%AA%E3%81%8F%E3%80%81%E8%87%AA%E5%8B%95%E7%9A%84%E3%81%AB%E5%AE%9F%E8%A1%8C%E3%82%92%E7%B6%99%E7%B6%9A%E3%81%99%E3%82%8B%E3%81%AF%E3%81%9A%E3%81%A7%E3%81%99%E3%80%82%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3E%E7%90%86%E6%83%B3%E7%9A%84%E3%81%AB%E3%81%AF%E3%80%81%E5%8F%97%E4%BF%A1%E3%81%97%E3%81%9F%E5%90%84FIFO%E8%A6%81%E7%B4%A0%E3%81%8C%E5%8D%B3%E5%BA%A7%E3%81%ABDMA%E8%BB%A2%E9%80%81%E3%82%92%E5%BC%95%E3%81%8D%E8%B5%B7%E3%81%93%E3%81%99%E3%81%B9%E3%81%8D%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%E5%A4%A7%E3%81%8D%E3%81%AAFIFO%E3%82%A6%E3%82%A9%E3%83%BC%E3%82%BF%E3%83%BC%E3%83%9E%E3%83%BC%E3%82%AF%E3%82%92%E5%BE%85%E3%81%A1%E3%81%9F%E3%81%8F%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%3C%2FP%3E%3C%2FLI%3E%3C%2FUL%3E%3CP%3ERTD%E3%81%AE%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82FlexCAN_StartRxMessageEnhancedFifoData()%E3%81%A7%E3%80%81%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%81%8CDMA%E3%82%92%E6%AC%A1%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%82%8F%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%3C%2FP%3E%3CPRE%20translate%3D%22no%22%3ESource%20address%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%20Enhanced%20RX%20FIFO%20output%0ASource%20transfer%20size%20%20%20%20%20%20%20%20%3D%204%20bytes%0ASource%20offset%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%204%20bytes%0ADestination%20transfer%20size%20%20%20%3D%204%20bytes%0ADestination%20offset%20%20%20%20%20%20%20%20%20%20%3D%204%20bytes%0AMinor%20loop%20size%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%2080%20bytes%0AMajor%20loop%20count%20%20%20%20%20%20%20%20%20%20%20%20%3D%20num_enhanced_watermark%0AEnMajorInt%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%20TRUE%0ADisAutoHwRequest%20%20%20%20%20%20%20%20%20%20%20%20%3D%20TRUE%3C%2FPRE%3E%3CP%3E%E7%8F%BE%E5%9C%A8%E3%81%AERTD%E5%AE%9F%E8%A3%85%E3%81%A7%E3%81%AF%E3%80%81%E6%9C%89%E9%99%90%E3%81%AEDMA%E8%BB%A2%E9%80%81%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%9F%E5%BE%8C%E3%80%81%E5%81%9C%E6%AD%A2%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81FlexCAN_Ip_RxFifo()%E3%82%92%E5%86%8D%E5%BA%A6%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8B%E3%81%A8%E7%90%86%E8%A7%A3%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%3CP%3E%E7%A7%81%E3%81%AE%E8%B3%AA%E5%95%8F%E3%81%AF%E6%AC%A1%E3%81%AE%E3%81%A8%E3%81%8A%E3%82%8A%E3%81%A7%E3%81%99%E3%80%82%3C%2FP%3E%3CP%3E%3CSTRONG%3ES32K388%E4%B8%8A%E3%81%A7%E3%80%81eDMA%20TCD%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%A6%E3%80%81FlexCAN%20Enhanced%20RX%20FIFO%20DMA%E8%A6%81%E6%B1%82%E3%81%8C%E3%80%81CPU%E5%89%B2%E3%82%8A%E8%BE%BC%E3%81%BF%E3%82%84%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AE%E5%86%8D%E6%AD%A6%E8%A3%85%E3%81%AA%E3%81%97%E3%81%AB%E3%80%81%E5%8F%97%E4%BF%A1%E3%81%97%E3%81%9FFIFO%E8%A6%81%E7%B4%A0%E3%82%92%E5%86%86%E5%BD%A2RAM%E3%83%90%E3%83%83%E3%83%95%E3%82%A1%E3%81%AB%E7%B6%99%E7%B6%9A%E7%9A%84%E3%81%AB%E8%BB%A2%E9%80%81%E3%81%99%E3%82%8B%E8%A8%AD%E5%AE%9A%E3%81%AF%E5%8F%AF%E8%83%BD%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B%3F%3C%2FSTRONG%3E%3C%2FP%3E%3CP%3E%E7%89%B9%E3%81%AB%E3%80%81%20%3CSTRONG%3EDestination%20Modulo%3C%2FSTRONG%3E%20%E3%82%84%E4%BB%96%E3%81%AEeDMA%20TCD%E6%A9%9F%E8%83%BD%E3%82%92%E4%BD%BF%E3%81%88%E3%81%B0%E3%80%81%E3%81%93%E3%81%AE%E9%80%A3%E7%B6%9A%E3%83%AA%E3%83%B3%E3%82%B0%E3%83%90%E3%83%83%E3%83%95%E3%82%A1%E3%82%92%E5%AE%9F%E8%A3%85%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%81%8B%3F%3C%2FP%3E%3CP%3E%E3%82%82%E3%81%97%E5%8F%AF%E8%83%BD%E3%81%A7%E3%81%82%E3%82%8C%E3%81%B0%E3%80%81%E5%85%B7%E4%BD%93%E7%9A%84%E3%81%AA%E6%A7%8B%E6%88%90%E3%82%92%E6%95%99%E3%81%88%E3%81%A6%E3%81%84%E3%81%9F%E3%81%A0%E3%81%91%E3%82%8B%E3%81%8B%E3%80%81NXP%E3%81%AE%E4%BE%8B%E3%82%84%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9%E5%AE%9F%E8%A3%85%E3%82%92%E6%95%99%E3%81%88%E3%81%A6%E3%81%84%E3%81%9F%E3%81%A0%E3%81%91%E3%81%BE%E3%81%9B%E3%82%93%E3%81%8B%3F%3C%2FP%3E%3CP%3E%E5%BF%85%E8%A6%81%E3%81%AB%E5%BF%9C%E3%81%98%E3%81%A6RTD%20FlexCAN%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%83%BC%E3%82%92%E4%BF%AE%E6%AD%A3%E3%81%97%E3%81%9F%E3%82%8A%E3%80%81eDMA%20TCD%E3%82%92%E7%9B%B4%E6%8E%A5%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%82%82%E5%8F%AF%E8%83%BD%E3%81%A7%E3%81%99%E3%80%82%3C%2FP%3E%3CP%3E%E3%82%88%E3%82%8D%E3%81%97%E3%81%8F%E3%81%8A%E9%A1%98%E3%81%84%E3%81%97%E3%81%BE%E3%81%99%EF%BC%81%3C%2FP%3E%3C%2FLINGO-BODY%3E