使用HALCG软件配置完成后,CAN中断接收Message box的数据如何区分是哪一个CAN Message box过滤接收的数据?
中断接收代码如下:
void canMessageNotification(canBASE_t *node, uint32 messageBox)
{
/* enter user code between the USER CODE BEGIN and USER CODE END. */
/* USER CODE BEGIN (15) */
if (node == canREG1)
{
while (!canIsRxMessageArrived(canREG1, canMESSAGE_BOX5))
;
canGetData(canREG1, canMESSAGE_BOX5, CAN1_Rx_data); /* copy to RAM */
CAN1_ID_data[0] = canGetID(canREG1, canMESSAGE_BOX5)>>0;
CAN1_ID_data[1] = canGetID(canREG1, canMESSAGE_BOX5)>>8;
CAN1_ID_data[2] = canGetID(canREG1, canMESSAGE_BOX5)>>16;
CAN1_ID_data[3] = canGetID(canREG1, canMESSAGE_BOX5)>>24;
CAN1_Rx_flag=1;
}
/* node 2 - receive complete */
if (node == canREG2)
{
while (!canIsRxMessageArrived(canREG2, canMESSAGE_BOX1)); ///等待CAN2接收数据接收完成
canGetData(canREG2, canMESSAGE_BOX1, rx_ptr); /* copy to RAM */
CAN2_ID_data[1] = canGetID(canREG2, canMESSAGE_BOX1)>>0; //获取帧ID第一个字节
CAN2_ID_data[2] = canGetID(canREG2, canMESSAGE_BOX1)>>8; //获取帧ID第二个字节
CAN2_ID_data[3] = canGetID(canREG2, canMESSAGE_BOX1)>>16; //获取帧ID第三个字节
CAN2_ID_data[4] = canGetID(canREG2, canMESSAGE_BOX1)>>24; //获取帧ID第四个字节
num++;
if (num > 8)
num = 0;
rx_ptr += 8;
CAN2_Rx_flag=1;
}
}
上述代码接收多个过滤器过滤的CAN数据就无法识别了,需要一个获取CAN Message box过滤接收的数据中断响应的函数,来区分哪个CAN Message box进中断。