/*! ** Copyright 2019 NXP ** @file main.c ** @brief ** Main module. ** This module contains user's application code. */ /*! ** @addtogroup main_module main module documentation ** @{ */ /* MODULE main */ /* Including necessary configuration files. */ #include "Mcal.h" #include "Clock_Ip.h" #include "FlexCAN_Ip.h" #include "IntCtrl_Ip.h" #include "Siul2_Port_Ip.h" #include "Siul2_Dio_Ip.h" #define MSG_ID 0xC0FFEEu #define RX_MB_IDX 1U #define TX_MB_IDX 0U volatile int exit_code = 0; /* User includes */ uint8 dummyData[8] = {1,2,3,4,5,6,7}; Flexcan_Ip_DataInfoType tx_info = { .msg_id_type = FLEXCAN_MSG_ID_STD, .data_length = 8u, .is_polling = TRUE, .is_remote = FALSE }; Flexcan_Ip_DataInfoType rx_info = { .msg_id_type = FLEXCAN_MSG_ID_STD, .data_length = 8u, .is_polling = TRUE, .is_remote = FALSE }; /*! \brief The main function for the project. \details The startup initialization sequence is the following: * - startup asm routine * - main() */ extern void CAN0_ORED_0_31_MB_IRQHandler(void); void setupCan() { uint8 sendData[8]={0,0,0,0,0,0,0,0}; /* Filling of the frame's payload for transmission */ //Siul2_Dio_Ip_WritePin(PTB_L_HALF, 12, 0U); Siul2_Dio_Ip_WritePin(PTC_H_HALF, 4, 0U); FlexCAN_Ip_Init(INST_FLEXCAN_0, &FlexCAN_State0, &FlexCAN_Config0); FlexCAN_Ip_SetStartMode(INST_FLEXCAN_0); tx_info.msg_id_type = FLEXCAN_MSG_ID_STD; tx_info.data_length=8; FlexCAN_Ip_SendBlocking(INST_FLEXCAN_0, TX_MB_IDX, &tx_info, 0x555, sendData, 1000); uint32_t ID_Stinger = 0x18DA00F1; uint32_t PAYLOAD_FEC[2]; uint8_t COMMAND_BYTE_FEC = 0x10; uint8_t DLC_FEC = 6; uint8_t Filter_Element_Index_0 = 0; uint8_t Filter_Element_Type = 1; uint8_t Extended_Filter_Config = 3; /* Both TWL and BBL */ uint32_t ID_TX = 0xC0FFEE; /* Formation of the payload */ uint32_t Filter_Element_Contents = (Extended_Filter_Config << 29) | ID_TX ; PAYLOAD_FEC[0] = (COMMAND_BYTE_FEC << 24) | (Filter_Element_Index_0 << 16) | (Filter_Element_Type << 15) | (Filter_Element_Contents >> 16); PAYLOAD_FEC[1] = (Filter_Element_Contents & 0xFFFF) << 16; tx_info.msg_id_type = FLEXCAN_MSG_ID_EXT; tx_info.data_length=DLC_FEC; sendData[3]=(PAYLOAD_FEC[0] & 0x000000FF); sendData[2]=(PAYLOAD_FEC[0] & 0x0000FF00) >> 8; sendData[1]=(PAYLOAD_FEC[0] & 0x00FF0000) >> 16; sendData[0]=(PAYLOAD_FEC[0] & 0xFF000000) >> 24; sendData[7]=(PAYLOAD_FEC[1] & 0x000000FF); sendData[6]=(PAYLOAD_FEC[1] & 0x0000FF00) >> 8; sendData[5]=(PAYLOAD_FEC[1] & 0x00FF0000) >> 16; sendData[4]=(PAYLOAD_FEC[1] & 0xFF000000) >> 24; FlexCAN_Ip_SendBlocking(INST_FLEXCAN_0, TX_MB_IDX, &tx_info, ID_Stinger, sendData, 1000); PAYLOAD_FEC[0] = 0x71020304; PAYLOAD_FEC[1] = 0x05060708; sendData[3]=(PAYLOAD_FEC[0] & 0x000000FF); sendData[2]=(PAYLOAD_FEC[0] & 0x0000FF00) >> 8; sendData[1]=(PAYLOAD_FEC[0] & 0x00FF0000) >> 16; sendData[0]=(PAYLOAD_FEC[0] & 0xFF000000) >> 24; sendData[7]=(PAYLOAD_FEC[1] & 0x000000FF); sendData[6]=(PAYLOAD_FEC[1] & 0x0000FF00) >> 8; sendData[5]=(PAYLOAD_FEC[1] & 0x00FF0000) >> 16; sendData[4]=(PAYLOAD_FEC[1] & 0xFF000000) >> 24; tx_info.data_length=8; FlexCAN_Ip_SendBlocking(INST_FLEXCAN_0, TX_MB_IDX, &tx_info, ID_Stinger, sendData, 1000); //Siul2_Dio_Ip_WritePin(PTB_L_HALF, 12, 1U); Siul2_Dio_Ip_WritePin(PTC_H_HALF, 4, 1U); FlexCAN_Ip_ConfigRxMb(INST_FLEXCAN_0, RX_MB_IDX, &rx_info, MSG_ID); rx_info.is_polling = FALSE; } int main(void) { uint8_t byte_0 = 0; Siul2_Port_Ip_Init(NUM_OF_CONFIGURED_PINS0, g_pin_mux_InitConfigArr0); /* Write your code here */ Clock_Ip_Init(&Mcu_aClockConfigPB[0]); IntCtrl_Ip_EnableIrq(FlexCAN0_1_IRQn); IntCtrl_Ip_InstallHandler(FlexCAN0_1_IRQn, CAN0_ORED_0_31_MB_IRQHandler, NULL_PTR); Flexcan_Ip_MsgBuffType rxData; setupCan(); tx_info.is_polling = FALSE; FlexCAN_Ip_Send(INST_FLEXCAN_0, TX_MB_IDX, &tx_info, MSG_ID, (uint8 *)&dummyData); while(1) { //FlexCAN_Ip_Send(INST_FLEXCAN_0, TX_MB_IDX, &rx_info, MSG_ID, (uint8 *)&dummyData); // check if previous transfer is finished, if yes send new message if(FLEXCAN_STATUS_BUSY!=FlexCAN_Ip_GetTransferStatus(INST_FLEXCAN_0, TX_MB_IDX)) { dummyData[0]=byte_0++; FlexCAN_Ip_Send(INST_FLEXCAN_0, TX_MB_IDX, &tx_info, MSG_ID, (uint8 *)&dummyData); } //FlexCAN_Ip_Send(INST_FLEXCAN_0, TX_MB_IDX, &tx_info, MSG_ID, (uint8 *)&dummyData); //Flexcan_Ip_StatusType status = FlexCAN_Ip_GetTransferStatus(INST_FLEXCAN_0, TX_MB_IDX); int ii; for(ii=0;ii<50000;ii++); //FlexCAN_Ip_Receive(INST_FLEXCAN_0, RX_MB_IDX, &rxData, TRUE); } { FlexCAN_Ip_MainFunctionRead(INST_FLEXCAN_0, RX_MB_IDX); } FlexCAN_Ip_SetStopMode(INST_FLEXCAN_0); FlexCAN_Ip_Deinit(INST_FLEXCAN_0); return 0; } /* END main */ /*! ** @} */