/** * Configure USART to work @ 115200 */ static void _configure_usart(void) { Usart* usart = usart_desc.addr; uint32_t id = get_usart_id_from_addr(usart); /* Driver initialize */ xdmad_initialize(0); usartd_configure(&usart_desc); pio_configure(usart_pins, ARRAY_SIZE(usart_pins)); usart_enable_it(usart, US_IER_RXRDY); aic_set_source_vector(id, usart_irq_handler); aic_enable(id); }
/** * \brief Init Usart COM2 master. */ static void _init_com_master (void) { uint32_t id = get_usart_id_from_addr(lin_desc2.addr); /* Configure Pios usart*/ pio_configure(&pins_com2[0], ARRAY_SIZE(pins_com2)); /* Init LIN MASTER data Node 0 */ lin_init(&lin_desc2, LIN_MASTER_NODE_NUM); /* Configure interrupts */ usart_enable_it(lin_desc2.addr, US_IER_LINTC); aic_set_source_vector(id, _com2_master_handler); }
/** * \brief Init Usart COM3 slave. */ static void _init_com_slave (void) { uint32_t id = get_usart_id_from_addr(lin_desc3.addr); /* Configure Pios usart*/ pio_configure(&pins_com3[0], ARRAY_SIZE(pins_com3)); /* Init LIN SLAVE data Node 0 */ lin_init(&lin_desc3, LIN_SLAVE_NODE_NUM); /* Configure interrupts */ usart_enable_it(lin_desc3.addr, US_IER_LINID); aic_set_source_vector(id, _com3_slave_handler); aic_enable(id); }
/** * \brief Button event. */ static void _process_button_evt(void) { uint32_t id = get_usart_id_from_addr(lin_desc2.addr); switch (key) { case 'P': case 'p': /* No interrupt on Master */ aic_disable(id); /* Configure lin_descriptor MASTER */ lin_msg_master.id = LIN_FRAME_ID_12; lin_msg_master.dlc = sizeof(lin_data_master); lin_msg_master.lin_cmd = PUBLISH; lin_register_descriptor(LIN_MASTER_NODE_NUM, 0, &lin_msg_master); /* Configure lin_descriptor SLAVE */ lin_msg_slave.id = LIN_FRAME_ID_12; lin_msg_slave.dlc = sizeof(lin_data_slave); lin_msg_slave.lin_cmd = SUBSCRIBE; lin_msg_slave.pfnct = lin_slave_task_ID12, lin_register_descriptor(LIN_SLAVE_NODE_NUM, 0, &lin_msg_slave); memcpy(&lin_data_master, "12345678", sizeof(lin_data_master)); break; case 'S': case 's': /* Configure lin_descriptor MASTER */ lin_msg_master.id = LIN_FRAME_ID_15; lin_msg_master.dlc = sizeof(lin_data_master); lin_msg_master.lin_cmd = SUBSCRIBE; lin_register_descriptor(LIN_MASTER_NODE_NUM, 1, &lin_msg_master); /* Configure lin_descriptor SLAVE */ lin_msg_slave.id = LIN_FRAME_ID_15; lin_msg_slave.dlc = sizeof(lin_data_slave); lin_msg_slave.lin_cmd = PUBLISH; lin_register_descriptor(LIN_SLAVE_NODE_NUM, 1, &lin_msg_slave); /* Interrupt Master, wait transfert complete */ aic_enable(id); memcpy(&lin_data_slave, "87654321", sizeof(lin_data_slave)); break; default: aic_disable(id); lin_msg_master.lin_cmd = IGNORE; lin_msg_slave.lin_cmd = IGNORE; break; } }