工具/软件:Code Composer Studio
我要设置的 CAN 代码如下所示、我的问题是:
我只想在收到 ID = 2001的消息时触发 g_bRXFlag1、因此我使用 idmask = FFFF、但所发生的情况是每次收到消息时 g_bRXFlag1都是触发器
void setupCAN1()
{ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、120000000); SysPeripheralEnable (SYSCTL_Periph_GPIOB);GPSCL_GPIO1 (GPIOPINB0_Configure);GPCTL_GPIO1 (CANCTL_GPIO_Configure) GPIOPinTypeCAN (GPIO_PORTB_BASE、GPIO_PIN_0 | GPIO_PIN_1); SysCtlPeripheralDisable (SYSCTL_Periph_CAN1); SysCtlPeripheralReset (SYSCTL_Periph_CAN1); SysCtlPeripheralEnable (SYSCTL_Periph_CAN1);CANCtlInbase (CAN1);CANCtlPeripheralEnable) CANBitRateSet (CAN1_base、ui32SysClock、50000); CANIntRegister (CAN1_base、CAN1IntHandler); CANIntEnable (CAN1_base、CAN_INT_MASTER | CAN_INT_ERROR | CAN_INT_STATUS);IntEnable (INT_CAN1); CANEnable (CAN1_base); sCANMessage.ui32MsgID = 0x00002001; sCANMessage.ui32MsgIDMask = 0x0000FFFF; sCANMessage.ui32Flags =(MSG_OBJ_RX_INT_ENABLE | MSG_OBJ_USE_ID_FILTER); sCANMessage.ui32MsgLen = 8; CANMessageSet (CAN1_base、1、&sCANMessage、 MSG_OBJ_TYPE_RX); } void CAN1IntHandler (void) {unsigned long status = CANIntStatus (CAN1_base、CAN_INT_STS_CAUST); //读取中断状态 if (status = CAN_INT_INTID_STATUS) {//控制器状态中断 STATUS = CANStatusGet (CAN1_BASE、CAN_STS_CONTROL); G_bErrFlag = 1; } 否则(status = 1) {// msg 对象1 CANIntClear (CAN1_base、1);//清除中断 G_bRXFlag1 = 1;//设置 Rx 标志 G_bErrFlag = 0;//清除任何错误标志 } 否则 { //永远不会发生 }