S32k344 legacy fifo with DMA and without interrupt

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

S32k344 legacy fifo with DMA and without interrupt

361 次查看
sbidkar
Contributor I

int main(void)

{

uint32_t * pu32CANFIFO1_RegAddress = (uint32_t *)(IP_CAN_0_BASE + 0x80);

uint32_t * pu32FIFO_Data = &FlaxCAN_u16DMA_FifoBuffers[0];

 

//FLEXCAN_Type * const psFlexCANBase = IP_CAN_0;

/* Write your code here */

// 1. Init Clock, Resource Manager, Pin mux (Siul2_Port_Ip_Init), etc.

Clock_Ip_Init(&Clock_Ip_aClockConfig[0]);

Siul2_Port_Ip_Init(NUM_OF_CONFIGURED_PINS_PortContainer_0_BOARD_InitPeripherals, g_pin_mux_InitConfigArr_PortContainer_0_BOARD_InitPeripherals);

 

Dma_Ip_Init(&Dma_Ip_Sa_xDmaInitPB);

Rm_Init(&Rm_Config);

 

// 2. Install and enable DMA interrupt and FlexCAN interrupt

// IntCtrl_Ip_InstallHandler(DMATCD0_IRQn, Dma0_Ch0_IRQHandler, NULL_PTR);

// IntCtrl_Ip_EnableIrq(DMATCD0_IRQn);

// IntCtrl_Ip_InstallHandler(FlexCAN0_1_IRQn, CAN0_ORED_0_31_MB_IRQHandler,NULL_PTR);

// IntCtrl_Ip_EnableIrq(FlexCAN0_1_IRQn);

 

// 3. Init DMA

//Dma_Ip_Init(&Dma_Ip_xDmaInitPB);

 

 

Dma_Ip_LogicChannelTransferListType asDmaCh1TransferList[2] =

{

{DMA_IP_CH_SET_SOURCE_ADDRESS, (uint32_t)pu32CANFIFO1_RegAddress},

{DMA_IP_CH_SET_DESTINATION_ADDRESS, (uint32_t)pu32FIFO_Data}// (uint32_t)P1OS_Cpu_ConvertLocalAddress(&pu32FIFO_Data[0])}

};

 

Dma_Ip_SetLogicChannelTransferList(SA_DMA_LOGIC_CH_0, asDmaCh1TransferList, 2);

Dma_Ip_SetLogicChannelCommand(SA_DMA_LOGIC_CH_0 , DMA_IP_CH_SET_HARDWARE_REQUEST);

 

// 4. Init FlexCAN0

FlexCAN_Ip_Init(INST_FLEXCAN_0, &FlexCAN_State0, &FlexCAN_Config0);

 

// 5. Configure Rx FIFO (legacy)

FlexCAN_Ip_SetRxMaskType_Privileged(INST_FLEXCAN_0,FLEXCAN_RX_MASK_INDIVIDUAL);

FlexCAN_Ip_ConfigRxFifo_Privileged(INST_FLEXCAN_0,FLEXCAN_RX_FIFO_ID_FORMAT_A , &CAN0_FIFO_IdFilterTable[0]);

// Configure individual mask for first filter (accept range 0x50–0x5F)

FlexCAN_Ip_SetRxIndividualMask(INST_FLEXCAN_0, 0, 0x7F0<<19); // mask for first ID in Filter table 0x50 to 0x5F

 

// Optional: MB-based receive setup

// FlexCAN_Ip_ConfigRxMb(INST_FLEXCAN_0, RX_MB_IDX, &rx_info, 0x20u); // uncomment for MB

 

// 6. Start FlexCAN controller

FlexCAN_Ip_SetStartMode(INST_FLEXCAN_0);

 

// 7. Send an initial dummy TX message via MB

FlexCAN_Ip_Send(INST_FLEXCAN_0, TX_MB_IDX, &tx_info, TX_MSG_ID, dummyData);

 

// Read Rx FIFO (initial read)---->DMA has transferred data from RxFIFO to rxFifoData

FlexCAN_Ip_RxFifo(INST_FLEXCAN_0, &rxFifoData);

 

// Read Rx MB (initial read)

// FlexCAN_Ip_Receive(INST_FLEXCAN_0, RX_MB_IDX, &rxData, FALSE); // uncomment for MB receive

while (1) {

 

}

}

 

the code is working with interrupt but not without interrupt
source and destination address are configured
please suggest better solution

0 项奖励
回复
1 回复

311 次查看
PetrS
NXP TechSupport
NXP TechSupport

Hi,

RTD driver is written in that way.  FlexCAN_Ip_RxFifo configs DMA channel to perform single read from RXFIFO and clear request. DMA interrupt should be enabled, which calls DMA_Can_Callback0 (for CAN0 instance)->FlexCAN_CompleteRxMessageFifoData, that check for DMA error, do some bit manipulation on data buffer and finally calls FlexCAN callback to notify user about the result. In this callback you can call FlexCAN_Ip_RxFifo to reenable DMA channel again.
If you wont to have different behavior, you can modify driver, which is not recommended, or do own implementation.

BR, Petr

0 项奖励
回复
%3CLINGO-SUB%20id%3D%22lingo-sub-2204123%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ES32k344%20%E4%BC%A0%E7%BB%9F%20fifo%EF%BC%8C%E5%B8%A6%20DMA%EF%BC%8C%E4%B8%8D%E5%B8%A6%E4%B8%AD%E6%96%AD%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2204123%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3Eint%20main(void)%3C%2FP%3E%3CP%3E%7B%3C%2FP%3E%3CP%3Euint32_t%20*%20pu32CANFIFO1_RegAddress%20%3D%20(uint32_t%20*)(IP_CAN_0_BASE%20%2B%200x80)%EF%BC%9B%3C%2FP%3E%3CP%3Euint32_t%20*%20pu32FIFO_Data%20%3D%26amp%3BFlaxCAN_u16DMA_FifoBuffers%5B0%5D%EF%BC%9B%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%2F%2FFLEXCAN_Type%20*%20const%20psFlexCANBase%20%3D%20IP_CAN_0%EF%BC%9B%3C%2FP%3E%3CP%3E%2F*%20%E5%9C%A8%E6%AD%A4%E5%A4%84%E7%BC%96%E5%86%99%E4%BB%A3%E7%A0%81%20*%2F%3C%2FP%3E%3CP%3E%2F%2F%201.%20%E5%88%9D%E5%A7%8B%E5%8C%96%E6%97%B6%E9%92%9F%E3%80%81%E8%B5%84%E6%BA%90%E7%AE%A1%E7%90%86%E5%99%A8%E3%80%81%E5%BC%95%E8%84%9A%E5%A4%8D%E7%94%A8%E5%99%A8%EF%BC%88Siul2_Port_Ip_Init%EF%BC%89%E7%AD%89%E3%80%82%3C%2FP%3E%3CP%3EClock_Ip_Init(%26amp%3BClock_Ip_aClockConfig%5B0%5D)%EF%BC%9B%3C%2FP%3E%3CP%3ESiul2_Port_Ip_Init(NUM_OF_CONFIGURED_PINS_PortContainer_0_BOARD_InitPeripherals%2C%20g_pin_mux_InitConfigArr_PortContainer_0_BOARD_InitPeripherals)%EF%BC%9B%3C%2FP%3E%3CBR%20%2F%3E%3CP%3EDma_Ip_Init(%26amp%3BDma_Ip_Sa_xDmaInitPB)%EF%BC%9B%3C%2FP%3E%3CP%3ERm_Init(%26amp%3BRm_Config)%EF%BC%9B%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%2F%2F%202.%20%E5%AE%89%E8%A3%85%E5%B9%B6%E5%90%AF%E7%94%A8%20DMA%20%E4%B8%AD%E6%96%AD%E5%92%8C%20FlexCAN%20%E4%B8%AD%E6%96%AD%3C%2FP%3E%3CP%3E%2F%2F%20IntCtrl_Ip_InstallHandler(DMATCD0_IRQn%2C%20Dma0_Ch0_IRQHandler%2C%20NULL_PTR)%EF%BC%9B%3C%2FP%3E%3CP%3E%2F%2F%20IntCtrl_Ip_EnableIrq(DMATCD0_IRQn)%EF%BC%9B%3C%2FP%3E%3CP%3E%2F%2F%20IntCtrl_Ip_InstallHandler(FlexCAN0_1_IRQn%2C%20CAN0_ORED_0_31_MB_IRQHandler%2CNULL_PTR)%EF%BC%9B%3C%2FP%3E%3CP%3E%2F%2F%20IntCtrl_Ip_EnableIrq(FlexCAN0_1_IRQn)%EF%BC%9B%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%2F%2F%203.%20%E5%90%AF%E5%8A%A8%20DMA%3C%2FP%3E%3CP%3E%2F%2FDma_Ip_Init(%26amp%3BDma_Ip_xDmaInitPB)%EF%BC%9B%3C%2FP%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%3CP%3EDma_Ip_LogicChannelTransferListType%20asDmaCh1TransferList%5B2%5D%20%3D%3C%2FP%3E%3CP%3E%7B%3C%2FP%3E%3CP%3E%7BDMA_IP_CH_SET_SOURCE_ADDRESS%EF%BC%8C(uint32_t)pu32CANFIFO1_RegAddress%7D%E3%80%81%3C%2FP%3E%3CP%3E%7BDMA_IP_CH_SET_DESTINATION_ADDRESS%2C%20(uint32_t)pu32FIFO_Data%7D%2F%2F%20(uint32_t)P1OS_Cpu_ConvertLocalAddress(%26amp%3Bpu32FIFO_Data%5B0%5D)%7D%7D%3C%2FP%3E%3CP%3E%7D%3B%3C%2FP%3E%3CBR%20%2F%3E%3CP%3EDma_Ip_SetLogicChannelTransferList(SA_DMA_LOGIC_CH_0%2C%20asDmaCh1TransferList%2C%202)%EF%BC%9B%3C%2FP%3E%3CP%3EDma_Ip_SetLogicChannelCommand(SA_DMA_LOGIC_CH_0%20%2C%20DMA_IP_CH_SET_HARDWARE_REQUEST)%EF%BC%9B%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%2F%2F%204.%20%E5%90%AF%E5%8A%A8%20FlexCAN0%3C%2FP%3E%3CP%3EFlexCAN_Ip_Init(INST_FLEXCAN_0%2C%26amp%3BFlexCAN_State0%2C%26amp%3BFlexCAN_Config0)%EF%BC%9B%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%2F%2F%205.%E9%85%8D%E7%BD%AE%20Rx%20FIFO%EF%BC%88%E4%BC%A0%E7%BB%9F%EF%BC%89%3C%2FP%3E%3CP%3EFlexCAN_Ip_SetRxMaskType_Privileged(INST_FLEXCAN_0%2CFLEXCAN_RX_MASK_INDIVIDUAL)%EF%BC%9B%3C%2FP%3E%3CP%3EFlexCAN_Ip_ConfigRxFifo_Privileged(INST_FLEXCAN_0%2CFLEXCAN_RX_FIFO_ID_FORMAT_A%20%2C%26amp%3BCAN0_FIFO_IdFilterTable%5B0%5D)%EF%BC%9B%3C%2FP%3E%3CP%3E%2F%2F%20%E4%B8%BA%E7%AC%AC%E4%B8%80%E4%B8%AA%E8%BF%87%E6%BB%A4%E5%99%A8%E9%85%8D%E7%BD%AE%E5%8D%95%E7%8B%AC%E7%9A%84%E6%8E%A9%E7%A0%81%EF%BC%88%E6%8E%A5%E5%8F%97%E8%8C%83%E5%9B%B4%200x50-0x5F%EF%BC%89%3C%2FP%3E%3CP%3EFlexCAN_Ip_SetRxIndividualMask(INST_FLEXCAN_0%2C%200%2C%200x7F0%26lt%3B%26lt%3B%2019)%3B%20%2F%2F%20%E6%BB%A4%E6%B3%A2%E5%99%A8%E8%A1%A8%E4%B8%AD%E7%AC%AC%E4%B8%80%E4%B8%AA%20ID%20%E7%9A%84%E6%8E%A9%E7%A0%81%200x50%20%E8%87%B3%200x5F%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%2F%2F%E5%8F%AF%E9%80%89%E7%9A%84%EF%BC%9A%E5%9F%BA%E4%BA%8E%20MB%20%E7%9A%84%E6%8E%A5%E6%94%B6%E8%AE%BE%E7%BD%AE%3C%2FP%3E%3CP%3E%2F%2F%20FlexCAN_Ip_ConfigRxMb(INST_FLEXCAN_0%2C%20RX_MB_IDX%2C%26amp%3Brx_info%2C%200x20u)%3B%20%2F%2F%20%E4%B8%BA%20MB%20%E5%8F%96%E6%B6%88%E6%B3%A8%E9%87%8A%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%2F%2F%206.%20%E5%90%AF%E5%8A%A8%20FlexCAN%20%E6%8E%A7%E5%88%B6%E5%99%A8%3C%2FP%3E%3CP%3EFlexCAN_Ip_SetStartMode(INST_FLEXCAN_0)%EF%BC%9B%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%2F%2F%207.%E9%80%9A%E8%BF%87%20MB%20%E5%8F%91%E9%80%81%E5%88%9D%E5%A7%8B%E8%99%9A%E6%8B%9F%20TX%20%E6%8A%A5%E6%96%87%3C%2FP%3E%3CP%3EFlexCAN_Ip_Send(INST_FLEXCAN_0%2C%20TX_MB_IDX%2C%26amp%3Btx_info%2C%20TX_MSG_ID%2C%20dummyData)%EF%BC%9B%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%2F%2F%20%E8%AF%BB%E5%8F%96%20Rx%20FIFO%EF%BC%88%E5%88%9D%E5%A7%8B%E8%AF%BB%E5%8F%96%EF%BC%89----%26gt%3BDMA%20%E5%B7%B2%E5%B0%86%E6%95%B0%E6%8D%AE%E4%BB%8E%20RxFIFO%20%E4%BC%A0%E8%BE%93%E5%88%B0%20rxFifoData%3C%2FP%3E%3CP%3EFlexCAN_Ip_RxFifo(INST_FLEXCAN_0%2C%26amp%3BrxFifoData)%EF%BC%9B%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%2F%2F%20%E8%AF%BB%E5%8F%96%20Rx%20MB%EF%BC%88%E5%88%9D%E5%A7%8B%E8%AF%BB%E5%8F%96%EF%BC%89%3C%2FP%3E%3CP%3E%2F%2F%20FlexCAN_Ip_Receive(INST_FLEXCAN_0%2C%20RX_MB_IDX%2C%26amp%3BrxData%2C%20FALSE)%3B%20%2F%2F%20%E5%8F%96%E6%B6%88%E5%AF%B9%20MB%20%E6%8E%A5%E6%94%B6%E7%9A%84%E6%B3%A8%E9%87%8A%3C%2FP%3E%3CP%3E%E5%BD%93%20(1)%20%7B%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%7D%3C%2FP%3E%3CP%3E%7D%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%E4%BB%A3%E7%A0%81%E5%9C%A8%E6%9C%89%E4%B8%AD%E6%96%AD%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E5%B7%A5%E4%BD%9C%EF%BC%8C%E4%BD%86%E5%9C%A8%E6%B2%A1%E6%9C%89%E4%B8%AD%E6%96%AD%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E5%B7%A5%E4%BD%9C%3CBR%20%2F%3E%E6%BA%90%E5%9C%B0%E5%9D%80%E5%92%8C%E7%9B%AE%E6%A0%87%E5%9C%B0%E5%9D%80%E7%9A%84%E9%85%8D%E7%BD%AE%3CBR%20%2F%3E%EF%BC%8C%E8%AF%B7%E6%8F%90%E5%87%BA%E6%9B%B4%E5%A5%BD%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%E3%80%82%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2204444%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20S32k344%20legacy%20fifo%20with%20DMA%20and%20without%20interrupt%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2204444%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E6%82%A8%E5%A5%BD%EF%BC%8C%3C%2FP%3E%0A%3CP%3ERTD%20%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%E5%B0%B1%E6%98%AF%E8%BF%99%E6%A0%B7%E7%BC%96%E5%86%99%E7%9A%84%E3%80%82%20FlexCAN_Ip_RxFifo%20%E9%85%8D%E7%BD%AE%20DMA%20%E9%80%9A%E9%81%93%EF%BC%8C%E4%BB%A5%E4%BE%BF%E4%BB%8E%20RXFIFO%20%E6%89%A7%E8%A1%8C%E5%8D%95%E6%AC%A1%E8%AF%BB%E5%8F%96%E5%92%8C%E6%B8%85%E9%99%A4%E8%AF%B7%E6%B1%82%E3%80%82%E5%BA%94%E5%90%AF%E7%94%A8%20DMA%20%E4%B8%AD%E6%96%AD%EF%BC%8C%E8%B0%83%E7%94%A8%20DMA_Can_Callback0%EF%BC%88%E9%92%88%E5%AF%B9%20CAN0%20%E5%AE%9E%E4%BE%8B%EF%BC%89-%26gt%3BFlexCAN_CompleteRxMessageFifoData%EF%BC%8C%E6%A3%80%E6%9F%A5%20DMA%20%E6%98%AF%E5%90%A6%E5%87%BA%E9%94%99%EF%BC%8C%E5%AF%B9%E6%95%B0%E6%8D%AE%E7%BC%93%E5%86%B2%E5%8C%BA%E8%BF%9B%E8%A1%8C%E4%B8%80%E4%BA%9B%E4%BD%8D%E6%93%8D%E4%BD%9C%EF%BC%8C%E6%9C%80%E5%90%8E%E8%B0%83%E7%94%A8%20FlexCAN%20%E5%9B%9E%E8%B0%83%E5%B0%86%E7%BB%93%E6%9E%9C%E9%80%9A%E7%9F%A5%E7%94%A8%E6%88%B7%E3%80%82%E5%9C%A8%E6%AD%A4%E5%9B%9E%E8%B0%83%E4%B8%AD%EF%BC%8C%E6%82%A8%E5%8F%AF%E4%BB%A5%E8%B0%83%E7%94%A8%20FlexCAN_Ip_RxFifo%20%E5%86%8D%E6%AC%A1%E5%90%AF%E7%94%A8%20DMA%20%E9%80%9A%E9%81%93%E3%80%82%3CBR%20%2F%3E%E5%A6%82%E6%9E%9C%E6%82%A8%E5%B8%8C%E6%9C%9B%E6%9C%89%E4%B8%8D%E5%90%8C%E7%9A%84%E8%A1%8C%E4%B8%BA%EF%BC%8C%E5%8F%AF%E4%BB%A5%E4%BF%AE%E6%94%B9%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%EF%BC%88%E4%B8%8D%E5%BB%BA%E8%AE%AE%E8%BF%99%E6%A0%B7%E5%81%9A%EF%BC%89%EF%BC%8C%E6%88%96%E8%80%85%E8%87%AA%E5%B7%B1%E5%AE%9E%E7%8E%B0%E3%80%82%3C%2FP%3E%0A%3CP%3EBR%2C%20Petr%3C%2FP%3E%3C%2FLINGO-BODY%3E