关于S32K312 CAN使用Enhanced Fifo启用DMA应用

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

关于S32K312 CAN使用Enhanced Fifo启用DMA应用

711 次查看
GallopingSnail
Contributor I

在使用这个Enhanced Fifo时启用了DMA,按照如下做初始化

IntCtrl_Ip_EnableIrq(FlexCAN0_1_IRQn);
IntCtrl_Ip_InstallHandler(FlexCAN0_1_IRQn, CAN0_ORED_0_31_MB_IRQHandler, NULL_PTR);
IntCtrl_Ip_EnableIrq(DMATCD0_IRQn);
IntCtrl_Ip_InstallHandler(DMATCD0_IRQn, Dma0_Ch0_IRQHandler, NULL_PTR);

Dma_Ip_Init(&Dma_Ip_xDmaInitPB);

FlexCAN_Ip_Init(INST_FLEXCAN_0, &FlexCAN_State0, &FlexCAN_Config0);

FlexCAN_Ip_ConfigEnhancedRxFifo_Privileged(INST_FLEXCAN_0,&CAN_EnhancedFIFo_FilterTable[0]);

FlexCAN_Ip_SetStartMode(INST_FLEXCAN_0);

FlexCAN_Ip_RxFifo(INST_FLEXCAN_0,&FifoRXData1);

在第一次中断时void Can0_MB_RXTX_Callback(uint8 instance, Flexcan_Ip_EventType eventType,
uint32 buffIdx, const Flexcan_Ip_StateType * flexcanState)
{

switch(eventType)
{

case FLEXCAN_EVENT_DMA_COMPLETE:

FlexCAN_Ip_RxFifo(INST_FLEXCAN_0,&FifoRXData1);

break;

default:

break;

}

在我的FifoRXData1缓存中能够正确得缓存接收到得帧,而后续发送得数据进入中断则 buff里面得数据并未得到更新。

0 项奖励
回复
3 回复数

683 次查看
PetrS
NXP TechSupport
NXP TechSupport

Hi,

if you get into an DMA interrupt/event for each received message but your buffer is not updated, then this can be caused by data cache. Be sure your buffer is placed in non cacheable area if cache enabled. You can try to use below
__attribute__(( aligned(32) )) Flexcan_Ip_MsgBuffType FifoRXData1 __attribute__ ((section (".mcal_bss_no_cacheable")));

BR, Petr

0 项奖励
回复

640 次查看
GallopingSnail
Contributor I
若是需要使用高速的缓存 该怎么操作配置Cache
0 项奖励
回复

641 次查看
GallopingSnail
Contributor I

0 项奖励
回复