为什么 S32K3 RTD 不支持传统 Rx FIFO 的 DMA 批处理(主要循环> 1),而增强型 Rx FIFO 支持?
我使用的是带 Rx FIFO + DMA 的 S32K358 FlexCAN。在增强型 Rx FIFO 中,RTD 将 DMA 配置为小循环 = 80 字节,并允许通过 u32numofmbTransferbyDMA(N 帧)进行批处理,因此 DMA_COMPLETE 会在 N 帧之后触发。对于传统 Rx FIFO,因此 DMA_COMPLETE 发生在每个帧,没有批处理选项。
配置:S32K358,RTD 6.0.0、传统 Rx FIFO + DMA 与增强型 Rx FIFO + DMA。
你好@saikiranG
传统 FIFO 是 K3 上保留的 K1 功能。
该传统 FIFO 的报文深度为 6,因此只能接收传统 CAN 2.0 报文,不能接收 CAN FD 报文。
这也与增强型 FIFO 功能互斥;如果启用了传统 FIFO,则无法启用增强型 FIFO。
演示供您参考:
你好@saikiranG
传统 FIFO 不支持水印配置(增强型 FIFO 支持水印配置)。
对于传统 FIFO,只要当前 FIFO 中有一个帧,就会产生 DMA 中断请求。
”
当至少有一个帧可从 FIFO 读取时,IFLAG1[BUF5I](传统 RX FIFO 中可用的帧)被置位。同时产生一个 DMA 请求。收到请求后,DMA 控制器即可读取信息(将传统 FIFO 的输出作为信息缓冲区访问)。
”