各位专家,您好!
根据我链接到的线程,如何同时使用两个中断行?
在我的代码中,CANINT0用于检查传输数据包的TxOk状态,以便我知道我的消息是否成功传输。 我还想在CANINT1的全局中断接收到数据包时获取中断。 但是,当接收到消息对象时,我不会得到任何中断。 如何解决此问题?
下面是我的代码的几个部分:
void CAN_init(void) { //CAN initialization CAN_initModule(CAN_BASE); // Refer to the Driver Library User Guide for information on how to set // tighter timing control. Additionally, consult the device data sheet // for more information about the CAN module clocking. // CAN_setBitRate(CAN_BASE, DEVICE_SYSCLK_FREQ, 100000, 20); // Enable CAN Interrupts CAN_enableInterrupt(CAN_BASE, CAN_INT_IE1|CAN_INT_STATUS); CAN_enableGlobalInterrupt(CAN_BASE, CAN_GLOBAL_INT_CANINT1); // Initialize the transmit message object used for sending CAN messages. // Message Object Parameters: // Message Object ID Number: 1 // Message Identifier: 1 // Message Frame: CAN_MSG_FRAME_STD // Message Type: CAN_MSG_OBJ_TYPE_RX // Message ID Mask: 0 // Message Object Flags: CAN_MSG_OBJ_RX_INT_ENABLE // Message Data Length: 8 Bytes // CAN_setupMessageObject(CAN_BASE, 1, 1, CAN_MSG_FRAME_STD,CAN_MSG_OBJ_TYPE_RX, 0, CAN_MSG_OBJ_RX_INT_ENABLE,8); // Initialize the transmit message object used for sending CAN messages. // Message Object Parameters: // Message Object ID Number: 2 // Message Identifier: 2 // Message Frame: CAN_MSG_FRAME_STD // Message Type: CAN_MSG_OBJ_TYPE_TX // Message ID Mask: 0 // Message Object Flags: CAN_MSG_OBJ_TX_INT_ENABLE // Message Data Length: 8 Bytes // CAN_setupMessageObject(CAN_BASE, 2, 2, CAN_MSG_FRAME_STD,CAN_MSG_OBJ_TYPE_TX, 0, CAN_MSG_OBJ_TX_INT_ENABLE,8); CAN_setInterruptMux(CAN_BASE, 2); <-----------to use CANINT1 for msg obj 1 // // Start CAN module operations // CAN_startModule(CAN_BASE); };
CANINT1是我唯一启用的中断:
// // This registers the interrupt handler in PIE vector table. // Interrupt_register(INT_CANB1, &ISR_can1); // // Enable the CAN-B interrupt signal // Interrupt_enable(INT_CANB1);
我使用以下代码验证传输是否成功:
bool canGetTxOkStatus(void) { uint16_t status; status = CAN_getStatus(CAN_BASE); if ( (status & CAN_STATUS_TXOK) == CAN_STATUS_TXOK) { return true; } else { return false; } }