Hi Alexandru,
1、I use FLEXCAN_DRV_Receive in main like that:
int main(void)
{flexcan_msgbuff_t canData;
......
while(1)
{
if(FLEXCAN_DRV_Receive(INST_CANCOM1, 0, &canData) == STATUS_SUCCESS)
{
PINS_DRV_TogglePins(PTE, (1 << 11));
}
}
}
This is OK.
2、If I use FLEXCAN_DRV_Receive like that:
{flexcan_msgbuff_t canData;
......
while(1)
{
if(CANIF_Recv() > 0)
{
PINS_DRV_TogglePins(PTE, (1 << 11));
}
}
}
And CANIF_Recv is defined in another C file:
UINT16 CANIF_Recv(void)
{
flexcan_msgbuff_t stCanData;
UINT8 i;
if(FLEXCAN_DRV_Receive(0, 0, &stCanData) == STATUS_SUCCESS)
{
return 1;
}
else
{
return 0;
}
When S32K146 received can frame, software will enter DefaultISR.
I also supply my can initial code as follow:
flexcan_data_info_t dataInfo =
{
.data_length = 8U,
.enable_brs = 0,
.fd_enable = 0,
.fd_padding = 0U
};
FLEXCAN_DRV_Init(INST_CANCOM1, &canCom1_State, &canCom1_InitConfig0);
dataInfo.msg_id_type = FLEXCAN_MSG_ID_STD;
FLEXCAN_DRV_ConfigRxMb(0, 0, &dataInfo, 1);
FLEXCAN_DRV_SetRxMbGlobalMask(INST_CANCOM1, FLEXCAN_MSG_ID_STD, 0);
FLEXCAN_DRV_Receive(INST_CANCOM1, 0, &canData);
The SDK Version is S32K146_SDK_gcc0.8.6.