Hi Petr
Thanks for sharing the detailed information.
I am using RX message buffers i.e. 10,11 & 12 and trying to install callback but i am not understanding where my code is going wrong? I am not getting execution in the callback.I am using LPtimer for setting sendFrame flag, which is working fine.
I have attached all the related files for reference.
#define TX_MAILBOX (1UL)
#define TX_MSG_ID (1UL)
#define RX_MAILBOX (0UL)
#define RX_MAILBOX10 (10UL) // MB10
#define RX_MAILBOX11 (11UL) // MB11
#define RX_MAILBOX12 (12UL) // MB12
#define VCU_HMI_CAN_TX_PCKT_1 0x18FD3DF9
#define HMI_VCU_CAN_RX_PCKT_1 0x18EF3D2D
#define HMI_VCU_CAN_RX_PCKT_2 0x18EE3D2D
#define HMI_VCU_CAN_RX_PCKT_3 0x18ED3D2D
void lptmrISR(void)
{
/* Clear compare flag */
LPTMR_DRV_ClearCompareFlag(INST_LPTMR1);
sendFrame = true;
}
void LP_Periodic_Timer_init(void)
{
LPTMR_DRV_Init(INST_LPTMR1, &lpTmr1_config0, false);
/* Install IRQ handler for LPTMR interrupt */
INT_SYS_InstallHandler(LPTMR0_IRQn, &lptmrISR, (isr_t *)0);
/* Enable IRQ for LPTMR */
INT_SYS_EnableIRQ(LPTMR0_IRQn);
/* Start LPTMR counter */
LPTMR_DRV_StartCounter(INST_LPTMR1);
}
void Can_init(void)
{
CAN_Init(&can_pal1_instance, &can_pal1_Config0);
can_buff_config_t buffCfg = {
//.enableFD = true,
.enableFD = false,
//.enableBRS = true,
.enableBRS = false,
.fdPadding = 0U,
.idType = CAN_MSG_ID_EXT,
.isRemote = false
};
/* Configure RX buffer with index RX_MAILBOX */
// Message Buffer10(MB10) configured for HMI_VCU_CAN_RX_PCKT_1 ID i.e 0x18EF3D2D
CAN_ConfigRxBuff(&can_pal1_instance, RX_MAILBOX10, &buffCfg, HMI_VCU_CAN_RX_PCKT_1);
// Message Buffer11(MB11) configured for HMI_VCU_CAN_RX_PCKT_2 ID i.e 0x18EE3D2D
CAN_ConfigRxBuff(&can_pal1_instance, RX_MAILBOX11, &buffCfg, HMI_VCU_CAN_RX_PCKT_2);
// Message Buffer12(MB12) configured for HMI_VCU_CAN_RX_PCKT_3 ID i.e 0x18ED3D2D
CAN_ConfigRxBuff(&can_pal1_instance, RX_MAILBOX12, &buffCfg, HMI_VCU_CAN_RX_PCKT_3);
//Generaic Buffer..no specific mailbox selected for any id
// CAN_ConfigRxBuff(&can_pal1_instance, RX_MAILBOX, &buffCfg, NULL);
// CAN_ConfigTxBuff(&can_pal1_instance, TX_MAILBOX, &buffCfg);
CAN_InstallEventCallback(&can_pal1_instance, (can_callback_t)CAN_0_Rx_Callback, NULL);
}
void CAN_0_Rx_Callback(uint8_t instance, can_event_t eventType, uint32_t buffIdx, void *driverState)
{
can_event_t salim= eventType;
}
//Main Function
int main(void)
{
/* Do the initializations required for this application */
BoardInit();
GPIOInit();
Can_init();
LP_Periodic_Timer_init();
while(1)
{
if (sendFrame==true)
{
CAN_ConfigTxBuff(&can_pal1_instance, TX_MAILBOX, &buffCfg);
// Prepare message to be sent
can_message_t message = {
.cs = 0U,
.id = VCU_HMI_CAN_TX_PCKT_1,
.data = { 0x58, 0x64, 0x01, 0x02 },
.length = 8U
};
// Send the information via CAN
CAN_Send(&can_pal1_instance, TX_MAILBOX, &message);
/* Wait until the previous FlexCAN transmit is completed */
while(CAN_GetTransferStatus(&can_pal1_instance, TX_MAILBOX) == STATUS_BUSY);
PINS_DRV_TogglePins(GPIO_PORT, (1 << LED0));
sendFrame = false;
}// End of if loop
// Define receive buffer
can_message_t recvMsg;
// Start receiving data in RX_MAILBOX.
CAN_Receive(&can_pal1_instance, RX_MAILBOX10, &recvMsg);
PINS_DRV_TogglePins(GPIO_PORT, (1 << LED1));
}// End of infinite loop