/** * \brief Default interrupt handler for CAN0 */ void CAN0_Handler(void) { uint32_t ul_status; /* Save the state of the can0_mailbox object */ save_can_object(&can0_mailbox, &temp_mailbox_C0); ul_status = can_get_status(CAN0); if (ul_status & GLOBAL_MAILBOX_MASK) { for (uint8_t i = 0; i < CANMB_NUMBER; i++) { ul_status = can_mailbox_get_status(CAN0, i); if ((ul_status & CAN_MSR_MRDY) == CAN_MSR_MRDY) { can0_mailbox.ul_mb_idx = i; can0_mailbox.ul_status = ul_status; can_mailbox_read(CAN0, &can0_mailbox); g_ul_recv_status = 1; // Decode CAN Message decode_can_msg(&can0_mailbox, CAN0); //assert(g_ul_recv_status); ***implement assert here. /* Restore the can0 mailbox object */ restore_can_object(&can0_mailbox, &temp_mailbox_C0); break; } } } }
/** * \brief Default interrupt handler for CAN 1. */ void CAN1_Handler(void) { uint32_t ul_status; /* Save the state of the can1_mailbox object */ save_can_object(&can1_mailbox, &temp_mailbox_C1); //Doesn't erase the CAN message. ul_status = can_get_status(CAN1); if (ul_status & GLOBAL_MAILBOX_MASK) { for (uint8_t i = 0; i < CANMB_NUMBER; i++) { ul_status = can_mailbox_get_status(CAN1, i); if ((ul_status & CAN_MSR_MRDY) == CAN_MSR_MRDY) { can1_mailbox.ul_mb_idx = i; can1_mailbox.ul_status = ul_status; can_mailbox_read(CAN1, &can1_mailbox); /* Decode CAN Message */ decode_can_msg(&can1_mailbox, CAN1); /*assert(g_ul_recv_status); ***Implement assert here.*/ /* Restore the can0 mailbox object */ restore_can_object(&can1_mailbox, &temp_mailbox_C1); break; } } } }
/** * \brief Default interrupt handler for CAN 1. */ void CAN1_Handler(void) { uint32_t ul_status; ul_status = can_get_status(CAN1); if (ul_status & GLOBAL_MAILBOX_MASK) { for (uint8_t i = 0; i < CANMB_NUMBER; i++) { ul_status = can_mailbox_get_status(CAN1, i); if ((ul_status & CAN_MSR_MRDY) == CAN_MSR_MRDY) { can1_mailbox.ul_mb_idx = i; can1_mailbox.ul_status = ul_status; can_mailbox_read(CAN1, &can1_mailbox); g_ul_recv_status = 1; break; } } } }
int main (void) { /* Initializations */ sysclk_init(); board_init(); pio_set(BUZ_PIO, BUZ_PIN); delay_ms(50); pio_clear(BUZ_PIO, BUZ_PIN); delay_ms(50); pio_set(BUZ_PIO, BUZ_PIN); delay_ms(50); pio_clear(BUZ_PIO, BUZ_PIN); pio_set(ULED3_PIO, ULED3_PIN); delay_ms(100); pio_set(MAIN1_CONTACTOR_PIO, MAIN1_CONTACTOR_PIN); delay_ms(100); pio_clear(MAIN1_CONTACTOR_PIO, MAIN1_CONTACTOR_PIN); delay_ms(100); pio_set(ASTR_CONTACTOR_PIO, ASTR_CONTACTOR_PIN); delay_ms(100); pio_clear(ASTR_CONTACTOR_PIO, ASTR_CONTACTOR_PIN); delay_ms(100); pio_set(BSTR_CONTACTOR_PIO, BSTR_CONTACTOR_PIN); delay_ms(100); pio_clear(BSTR_CONTACTOR_PIO, BSTR_CONTACTOR_PIN); delay_ms(100); pio_set(PCRG_CONTACTOR_PIO, PCRG_CONTACTOR_PIN); delay_ms(100); pio_clear(PCRG_CONTACTOR_PIO, PCRG_CONTACTOR_PIN); delay_ms(100); pio_set(MAIN2_CONTACTOR_PIO, MAIN2_CONTACTOR_PIN); delay_ms(100); pio_clear(MAIN2_CONTACTOR_PIO, MAIN2_CONTACTOR_PIN); pio_clear(ULED3_PIO, ULED3_PIN); can_mb_conf_t rlec_can_mailbox; can_mb_conf_t v_can_mailbox; /* Application */ while(1) { pio_clear(ULED3_PIO, ULED3_PIN); pio_set(ULED2_PIO, ULED2_PIN); usart_putchar(CONSOLE_USART, 's'); v_can_mailbox.ul_mb_idx = 0; v_can_mailbox.uc_obj_type = CAN_MB_TX_MODE; v_can_mailbox.uc_tx_prio = 15; // previously 15 v_can_mailbox.uc_id_ver = 0; v_can_mailbox.ul_id_msk = 0; can_mailbox_init(V_CAN, &v_can_mailbox); v_can_mailbox.ul_id = CAN_MID_MIDvA(0x07); v_can_mailbox.ul_datal = 0x12345678; v_can_mailbox.ul_datah = 0x87654321; v_can_mailbox.uc_length = 8; can_mailbox_write(V_CAN, &v_can_mailbox); can_global_send_transfer_cmd(V_CAN, CAN_TCR_MB0); pio_clear(ULED2_PIO, ULED2_PIN); while (!(can_mailbox_get_status(CAN0, 0) & CAN_MSR_MRDY)) { pio_set(ULED3_PIO, ULED3_PIN); } } }