CAN RX continuously using eDMA

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

CAN RX continuously using eDMA

412 次查看
AmanKumbhani
Contributor II

Hi All,

I have a use case where I continuously get data via CAN every 20 milliseconds, and I have to send the data as is via UART. For CAN reception, I did not want the CPU to be checking and reinitializing DMA every 20 milliseconds post completion.

My idea was to set the source of the DMA MUX channel to the CAN FIFO, and use a ping pong buffer to continuously save data in memory. However, the CAN RX EDMA drivers callback aborts DMA transfer everytime the ISR is triggered. Second approach that I tired was to add a periodic timer and enable trigger mode for channel 0 (one I am using for CAN), and every 20 milliseconds when the timer elapses, a DMA request will be generated and if there is a peripheral request from CAN too, data will move from the CAN FIFO to the memory. I tired this approach as well and this ended up into me getting bus errors.

Is there a better way of doing this or an example code for the same? Thank you!

标记 (1)
0 项奖励
回复
1 回复

379 次查看
Omar_Anguiano
NXP TechSupport
NXP TechSupport

Using a timer to trigger DMA for CAN can cause bus errors due to unsynchronized peripheral requests. FlexCAN already supports DMA request generation on FIFO events—use that instead.
To prevent ISR abort, instead, use major loop completion interrupt to switch buffers.

BR,
Omar

0 项奖励
回复
%3CLINGO-SUB%20id%3D%22lingo-sub-2184828%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E4%BD%BF%E7%94%A8%20eDMA%20%E8%BF%9E%E7%BB%AD%20CAN%20RX%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2184828%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E5%A4%A7%E5%AE%B6%E5%A5%BD%EF%BC%8C%3C%2FP%3E%3CP%3E%E5%9C%A8%E6%88%91%E7%9A%84%E4%BD%BF%E7%94%A8%E6%A1%88%E4%BE%8B%E4%B8%AD%EF%BC%8C%E6%88%91%E9%80%9A%E8%BF%87%20CAN%20%E6%AF%8F%2020%20%E6%AF%AB%E7%A7%92%E8%BF%9E%E7%BB%AD%E8%8E%B7%E5%8F%96%E6%95%B0%E6%8D%AE%EF%BC%8C%E5%B9%B6%E9%80%9A%E8%BF%87%20UART%20%E5%8F%91%E9%80%81%E5%8E%9F%E6%A0%B7%E6%95%B0%E6%8D%AE%E3%80%82%E5%AF%B9%E4%BA%8E%20CAN%20%E6%8E%A5%E6%94%B6%EF%BC%8C%E6%88%91%E4%B8%8D%E5%B8%8C%E6%9C%9B%20CPU%20%E5%9C%A8%E5%AE%8C%E6%88%90%E5%90%8E%E6%AF%8F%E9%9A%94%2020%20%E6%AF%AB%E7%A7%92%E6%A3%80%E6%9F%A5%E5%B9%B6%E9%87%8D%E6%96%B0%E5%88%9D%E5%A7%8B%E5%8C%96%E4%B8%80%E6%AC%A1%20DMA%E3%80%82%3C%2FP%3E%3CP%3E%E6%88%91%E7%9A%84%E6%83%B3%E6%B3%95%E6%98%AF%E5%B0%86%20DMA%20MUX%20%E9%80%9A%E9%81%93%E7%9A%84%E6%BA%90%E8%AE%BE%E7%BD%AE%E4%B8%BA%20CAN%20FIFO%EF%BC%8C%E5%B9%B6%E4%BD%BF%E7%94%A8%E4%B9%92%E4%B9%93%E7%BC%93%E5%86%B2%E5%99%A8%E5%9C%A8%E5%86%85%E5%AD%98%E4%B8%AD%E6%8C%81%E7%BB%AD%E4%BF%9D%E5%AD%98%E6%95%B0%E6%8D%AE%E3%80%82%E4%BD%86%E6%98%AF%EF%BC%8C%E6%AF%8F%E6%AC%A1%E8%A7%A6%E5%8F%91%E4%BF%A1%E5%8F%B7%20ISR%20%E6%97%B6%EF%BC%8CCAN%20RX%20EDMA%20%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%E7%9A%84%E5%9B%9E%E8%B0%83%E9%83%BD%E4%BC%9A%E4%B8%AD%E6%AD%A2%20DMA%20%E4%BC%A0%E8%BE%93%E3%80%82%E6%88%91%E5%B0%9D%E8%AF%95%E8%BF%87%E7%9A%84%E7%AC%AC%E4%BA%8C%E7%A7%8D%E6%96%B9%E6%B3%95%E6%98%AF%E6%B7%BB%E5%8A%A0%E4%B8%80%E4%B8%AA%E5%AE%9A%E6%9C%9F%E8%AE%A1%E6%97%B6%E5%99%A8%E5%B9%B6%E4%B8%BA%E9%80%9A%E9%81%93%200%EF%BC%88%E6%88%91%E7%94%A8%E4%BA%8E%20CAN%EF%BC%89%E5%90%AF%E7%94%A8%E8%A7%A6%E5%8F%91%E4%BF%A1%E5%8F%B7%E6%A8%A1%E5%BC%8F%EF%BC%8C%E5%BD%93%E8%AE%A1%E6%97%B6%E5%99%A8%E7%BB%93%E6%9D%9F%E6%97%B6%EF%BC%8C%E6%AF%8F%E9%9A%94%2020%20%E6%AF%AB%E7%A7%92%E5%B0%B1%E4%BC%9A%E7%94%9F%E6%88%90%E4%B8%80%E4%B8%AA%20DMA%20%E8%AF%B7%E6%B1%82%EF%BC%8C%E5%A6%82%E6%9E%9C%E4%B9%9F%E6%9C%89%E6%9D%A5%E8%87%AA%20CAN%20%E7%9A%84%E5%A4%96%E5%9B%B4%E8%AE%BE%E5%A4%87%E8%AF%B7%E6%B1%82%EF%BC%8C%E5%88%99%E6%95%B0%E6%8D%AE%E5%B0%86%E4%BB%8E%20CAN%20FIFO%20%E8%BD%AC%E7%A7%BB%E5%88%B0%E5%AD%98%E5%82%A8%E5%99%A8%E3%80%82%E6%88%91%E4%B9%9F%E5%B0%9D%E8%AF%95%E4%BA%86%E8%BF%99%E7%A7%8D%E6%96%B9%E6%B3%95%EF%BC%8C%E7%BB%93%E6%9E%9C%E6%88%91%E9%81%87%E5%88%B0%E4%BA%86%E6%80%BB%E7%BA%BF%E9%94%99%E8%AF%AF%E3%80%82%3C%2FP%3E%3CP%3E%E6%9C%89%E6%B2%A1%E6%9C%89%E6%9B%B4%E5%A5%BD%E7%9A%84%E6%96%B9%E6%B3%95%E6%88%96%E7%A4%BA%E4%BE%8B%E4%BB%A3%E7%A0%81%EF%BC%9F%E8%B0%A2%E8%B0%A2%EF%BC%81%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2186019%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20CAN%20RX%20continuously%20using%20eDMA%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2186019%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%BF%E7%94%A8%E8%AE%A1%E6%97%B6%E5%99%A8%E8%A7%A6%E5%8F%91%20CAN%20%E7%9A%84%20DMA%20%E5%8F%AF%E8%83%BD%E4%BC%9A%E7%94%B1%E4%BA%8E%E5%A4%96%E8%AE%BE%E8%AF%B7%E6%B1%82%E4%B8%8D%E5%90%8C%E6%AD%A5%E8%80%8C%E5%AF%BC%E8%87%B4%E6%80%BB%E7%BA%BF%E9%94%99%E8%AF%AF%E3%80%82FlexCAN%20%E5%B7%B2%E7%BB%8F%E6%94%AF%E6%8C%81%E5%9C%A8%20FIFO%20%E4%BA%8B%E4%BB%B6%E4%B8%8A%E7%94%9F%E6%88%90%20DMA%20%E8%AF%B7%E6%B1%82%EF%BC%8C%E5%9B%A0%E6%AD%A4%E5%8F%AF%E4%BB%A5%E7%94%A8%E5%AE%83%E6%9D%A5%E4%BB%A3%E6%9B%BF%E3%80%82%3CBR%20%2F%3E%E4%B8%BA%E9%98%B2%E6%AD%A2%20ISR%20%E4%B8%AD%E6%AD%A2%EF%BC%8C%E5%BA%94%E4%BD%BF%E7%94%A8%E4%B8%BB%E8%A6%81%E5%BE%AA%E7%8E%AF%E5%AE%8C%E6%88%90%E4%B8%AD%E6%96%AD%E6%9D%A5%E5%88%87%E6%8D%A2%E7%BC%93%E5%86%B2%E5%8C%BA%E3%80%82%3C%2FP%3E%0A%3CP%3EBR%2C%3CBR%20%2F%3EOmar%3C%2FP%3E%3C%2FLINGO-BODY%3E