void CAN2_Demo_Interrupt(void) { CAN_InitTypeDef CAN2Init; CAN2Init.CAN_Mask = CAN_CR_IE; CAN2Init.CAN_Bitrate = CAN_BITRATE_125K;
// initialize the interrupt controller EIC_IRQChannelConfig(CAN2_IRQChannel, ENABLE); EIC_IRQChannelPriorityConfig(CAN2_IRQChannel, 1); EIC_IRQCmd(ENABLE);
// initialize the CAN at a standard bitrate, interrupts enabled CAN_Init(CAN2, &CAN2Init);
// switch into Loopback+Silent mode (self-test) CAN_EnterTestMode(CAN2, CAN_TESTR_LBACK | CAN_TESTR_SILENT);
// configure the message objects CAN_InvalidateAllMsgObj(CAN2); CAN_SetTxMsgObj(CAN2, CAN2_TX_MSGOBJ, CAN_EXT_ID); CAN_SetRxMsgObj(CAN2, CAN2_RX_MSGOBJ, CAN_EXT_ID, 0, CAN_LAST_EXT_ID, TRUE);
// send a pre-defined data frame (void)CAN_SendMessage(CAN2, CAN2_TX_MSGOBJ, &TxCan2Msg[1]);
// reception and release are done in the interrupt handler
wait();
GPIO_BitWrite(GPIO4,LD13,Bit_SET);//LED13
// switch back into Normal mode CAN_LeaveTestMode(CAN2);
// disable interrupts globally EIC_IRQCmd(DISABLE); }
|