/** * \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; } }
int main(void) { uint8_t ucKey; /* Disable watchdog */ wdt_disable(); /* Configure console */ board_cfg_console(); /* Output example information */ printf("\r\n\r\n\r\n"); printf("-- RTC Example " SOFTPACK_VERSION " --\r\n"); printf("-- " BOARD_NAME "\r\n"); printf("-- Compiled: " __DATE__ " " __TIME__ " --\n\r"); // put 25 °C as a default temp, if there is no temprature sensor Temperature = 25; printf("Configure TC.\r\n"); configure_tc(); /* Default RTC configuration */ rtc_set_hour_mode(0); /* 24-hour mode */ struct _time empty_time = {0,0,0}; if (rtc_set_time_alarm(&empty_time)) { printf("\r\n Disable time alarm fail!"); } struct _date empty_date = {0,0,0}; if (rtc_set_date_alarm(&empty_date)) { printf("\r\n Disable date alarm fail!"); } /* Configure RTC interrupts */ rtc_enable_it(RTC_IER_SECEN | RTC_IER_ALREN); aic_set_source_vector(ID_SYSC, sysc_handler); aic_enable(ID_SYSC); /* Refresh display once */ _RefreshDisplay(); new_time.hour = 0; new_time.min = 0; new_time.sec = 30; rtc_set_time_alarm(&new_time); bMenuShown = 0; alarmTriggered = 0; rtc_calibration(Temperature); /* Handle keypresses */ while (1) { ucKey = console_get_char(); /* set time */ if (ucKey == 't') { bState = STATE_SET_TIME; aic_disable(ID_TC0); do { printf("\r\n\r\n Set time(hh:mm:ss): "); } while (get_new_time()); /* if valid input, none of variable for time is 0xff */ if (new_time.hour != 0xFF) { if (rtc_set_time (&new_time)) { printf ("\r\n Time not set, invalid input!\n\r"); } } bState = STATE_MENU; bMenuShown = 0; _RefreshDisplay(); CountDownTimer = 0; aic_enable(ID_TC0); } /* clock calibration */ else if (ucKey == 'p') { rtc_calibration(30); bState = STATE_MENU; bMenuShown = 0; _RefreshDisplay(); } /* set date */ else if (ucKey == 'd') { bState = STATE_SET_DATE; aic_disable(ID_TC0); do { printf("\r\n\r\n Set date(mm/dd/yyyy): "); } while (get_new_date()); /* if valid input, none of variable for date is 0xff(ff) */ if (new_date.year != 0xFFFF) { if (rtc_set_date(&new_date)) { printf ("\r\n Date not set, invalid input!\r\n"); } } /* only 'mm/dd' inputed */ if (new_date.month != 0xFF && new_date.year == 0xFFFF) { printf("\r\n Not Set for no year field!\r\n"); } bState = STATE_MENU; bMenuShown = 0; CountDownTimer = 0; aic_enable(ID_TC0); _RefreshDisplay(); } /* set time alarm */ else if (ucKey == 'i') { bState = STATE_SET_TIME_ALARM; aic_disable(ID_TC0); do { printf("\r\n\r\n Set time alarm(hh:mm:ss): "); } while (get_new_time()); if (new_time.hour != 0xFF) { if (rtc_set_time_alarm(&new_time)) { printf ("\r\n Time alarm not set, invalid input!\r\n"); } else { printf ("\r\n Time alarm is set at %02d:%02d:%02d!", new_time.hour, new_time.min, new_time.sec); } } bState = STATE_MENU; bMenuShown = 0; alarmTriggered = 0; CountDownTimer = 0; aic_enable(ID_TC0); _RefreshDisplay(); } /* set date alarm */ else if (ucKey == 'm') { bState = STATE_SET_DATE_ALARM; aic_disable(ID_TC0); do { printf("\r\n\r\n Set date alarm(mm/dd/): "); } while (get_new_date()); if (new_date.year == 0xFFFF && new_date.month != 0xFF) { if (rtc_set_date_alarm(&new_date)) { printf ("\r\n Date alarm not set, invalid input!\r\n"); } else { printf ("\r\n Date alarm is set on %02d/%02d!", new_date.month, new_date.day); } } bState = STATE_MENU; bMenuShown = 0; alarmTriggered = 0; CountDownTimer = 0; aic_enable(ID_TC0); _RefreshDisplay(); } /* clear trigger flag */ else if (ucKey == 'c') { alarmTriggered = 0; bMenuShown = 0; _RefreshDisplay(); } /* quit */ else if (ucKey == 'q') { break; } } return 0; }