void Test_TestMaskFilter() { int32_t i32id=0; STR_CANMSG_T tMsg; printf("Use Messge Object No.1 to send ID=0x700 ~0x70F\n"); printf("Enter any key to send\n "); GetChar(); while(1) { /* Send a 11-bits message */ tMsg.FrameType= DATA_FRAME; tMsg.IdType = CAN_STD_ID; tMsg.Id = 0x700 + i32id; tMsg.DLC = 0; if(CAN_SetTxMsgObj(MSG(1),&tMsg) < 0) /* Call CAN_SetTxMsgObj() only Confiugre Msg RAM */ { printf("Set Tx Msg Object failed\n"); return; } CAN_SetTxRqst(MSG(1)); i32id++; if(i32id>=0x10) break; SYS_SysTickDelay(100000); } printf("Transfer Done\n"); }
void CAN_Com_LoopBack_IRQ(void) { /* initialize the interrupt controller */ VIC_Config(CAN_ITLine, VIC_IRQ, Priority_1); /* initialize the CAN at a standard bitrate, interrupts enabled */ CAN_InitStructure.CAN_ConfigParameters=CAN_CR_IE; CAN_InitStructure.CAN_Bitrate=CAN_BITRATE_100K; CAN_Init(&CAN_InitStructure); /* switch into Loopback+Silent mode (self-test) */ CAN_EnterTestMode(CAN_TESTR_LBACK | CAN_TESTR_SILENT); /* configure the message objects */ CAN_InvalidateAllMsgObj(); CAN_SetTxMsgObj(CAN_TX_MSGOBJ, CAN_EXT_ID); CAN_SetRxMsgObj(CAN_RX_MSGOBJ, CAN_EXT_ID, 0, CAN_LAST_EXT_ID, TRUE); /* enable global interrupt */ VIC_ITCmd(CAN_ITLine, ENABLE); /* Send the pre-defined frame */ CAN_SendMessage(CAN_TX_MSGOBJ, &TxCanMsg[2]); /* wait until end of transmission */ CAN_WaitEndOfTx(); /* reception and release are done in the interrupt handler */ /* delay to add when the reception occurs */ delay(0x7FF); /* Test Received Msg */ if((RxCanMsg.IdType == CAN_EXT_ID)&&(RxCanMsg.Id == 0x12345678)&&(RxCanMsg.Dlc == 8) &&(RxCanMsg.Data[0]==0x10)&&(RxCanMsg.Data[1]==0x11)&&(RxCanMsg.Data[2]==0x12)&&(RxCanMsg.Data[3]==0x13) &&(RxCanMsg.Data[4]==0x14)&&(RxCanMsg.Data[5]==0x15)&&(RxCanMsg.Data[6]==0x16)&&(RxCanMsg.Data[7]==0x17)){ /*Received Msg OK*/ LED_ON(LD3); } else { /*Received Msg KO*/ LED_ON(LD4); } /* switch back into Normal mode */ CAN_LeaveTestMode(); /* disable interrupts globally */ VIC_ITCmd(CAN_ITLine, DISABLE); }
void CAN_Com_LoopBack(void) { /* initialize the CAN at a standard bitrate, interrupts disabled */ CAN_InitStructure.CAN_ConfigParameters=0x0; CAN_InitStructure.CAN_Bitrate=CAN_BITRATE_1M; CAN_Init(&CAN_InitStructure); /* switch into Loopback+Silent mode (self-test) */ CAN_EnterTestMode(CAN_TESTR_LBACK | CAN_TESTR_SILENT); /* configure the message objects */ CAN_InvalidateAllMsgObj(); CAN_SetTxMsgObj(CAN_TX_MSGOBJ, CAN_STD_ID); CAN_SetRxMsgObj(CAN_RX_MSGOBJ, CAN_STD_ID, 0, CAN_LAST_STD_ID, TRUE); /* Send the pre-defined answer */ CAN_SendMessage(CAN_TX_MSGOBJ, &TxCanMsg[1]); /* wait until end of transmission */ CAN_WaitEndOfTx(); /* wait for reception of a data frame */ while (!CAN_ReceiveMessage(CAN_RX_MSGOBJ, FALSE, &RxCanMsg)) { /*Add Timer*/ } /* Test Received Msg */ if((RxCanMsg.IdType == CAN_STD_ID)&&(RxCanMsg.Id == 0x321)&&(RxCanMsg.Dlc == 4) &&(RxCanMsg.Data[0]==0xAA)&&(RxCanMsg.Data[1]==0x55)&&(RxCanMsg.Data[2]==0xAA)&&(RxCanMsg.Data[3]==0x55)){ /*Received Msg OK*/ LED_ON(LD2); } else { /*Received Msg KO*/ LED_ON(LD4); } /* release the message objects */ CAN_ReleaseTxMessage(CAN_TX_MSGOBJ); CAN_ReleaseRxMessage(CAN_RX_MSGOBJ); /* switch back into Normal mode */ CAN_LeaveTestMode(); }
/*----------------------------------------------------------------------------*/ void Test_NormalMode_Tx() { STR_CANMSG_T tMsg; /* Send a 11-bits message */ tMsg.FrameType= DATA_FRAME; tMsg.IdType = CAN_STD_ID; tMsg.Id = 0x7FF; tMsg.DLC = 2; tMsg.Data[0] = 7; tMsg.Data[1] = 0xFF; if(CAN_SetTxMsgObj(MSG(0),&tMsg) < 0) /* Call CAN_SetTxMsgObj() only Confiugre Msg RAM */ { printf("Set Tx Msg Object failed\n"); return; } CAN_SetTxRqst(MSG(0)); /* Call CAN_SetTxRqst() requeset to send the Msg in the RAM */ printf("MSG(0).Send STD_ID:0x7FF, Data[07,FF]done\n"); if(CAN_SetTxMsgObj(MSG(1),&tMsg) < 0) { printf("Set Tx Msg Object failed\n"); return; } /* Send a 29-bits message */ tMsg.FrameType= DATA_FRAME; tMsg.IdType = CAN_EXT_ID; tMsg.Id = 0x12345; tMsg.DLC = 3; tMsg.Data[0] = 1; tMsg.Data[1] = 0x23; tMsg.Data[2] = 0x45; if(CAN_SetTxMsgObj(MSG(1),&tMsg) < 0) { printf("Set Tx Msg Object failed\n"); return; } CAN_SetTxRqst(MSG(1)); printf("MSG(1).Send EXT:0x12345 ,Data[01,23,45]done\n"); /* Send a data message */ tMsg.FrameType= DATA_FRAME; tMsg.IdType = CAN_EXT_ID; tMsg.Id = 0x7FF01; tMsg.DLC = 4; tMsg.Data[0] = 0xA1; tMsg.Data[1] = 0xB2; tMsg.Data[2] = 0xC3; tMsg.Data[3] = 0xD4; if(CAN_SetTxMsgObj(MSG(3),&tMsg) < 0) { printf("Set Tx Msg Object failed\n"); return; } CAN_SetTxRqst(MSG(3)); printf("MSG(3).Send EXT:0x7FF01 ,Data[A1,B2,C3,D4]done\n"); SYS_SysTickDelay(1000000); //Delay one second to wait INT printf("Trasmit Done!\nCheck the receive host received data\n"); }