/**
 * \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;
			}
		}
	}
}
Esempio n. 3
0
/**
 * \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;
			}
		}
	}
}
Esempio n. 4
0
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);
		}
	}
}