static void rtc_reset(void) { struct rtc_date dt; struct rtc_time tm; RTC_ALRM_DIS(); // Set date and time dt.ten_cent = 0; dt.cent = 0; dt.ten_yr = 0; dt.yr = 0; dt.ten_mth = 0; dt.mth = 0; dt.ten_day = 0; dt.day = 0; tm.dow = 0; tm.ten_hr = 0; tm.hr = 0; tm.ten_min = 0; tm.min = 0; tm.ten_sec = 0; tm.sec = 0; tm.sos = 0; rtc_set_date(&dt); rtc_set_time(&tm); }
static int rtc_sub_alarm_test(u32 f_time, u32 f_date) { volatile int hit; int result = 0; rtc_reset(); printf("RTC Time = W%d %d%d:%d%d:%d%d:%d\n", tm.dow, tm.ten_hr, tm.hr, \ tm.ten_min, tm.min, tm.ten_sec, tm.sec, tm.sos); printf("RTC Date = C%d%d %d%d/%d%d/%d%d\n", dt.ten_cent, dt.cent, dt.ten_yr, dt.yr, \ dt.ten_mth, dt.mth, dt.ten_day, dt.day); printf("Alarm Time = W%d %d%d:%d%d:%d%d:%d\n", tm_a.dow, tm_a.ten_hr, tm_a.hr, \ tm_a.ten_min, tm_a.min, tm_a.ten_sec, tm_a.sec, tm_a.sos); printf("Alarm Date = C%d%d %d%d/%d%d/%d%d\n", dt_a.ten_cent, dt_a.cent, dt_a.ten_yr, dt_a.yr, \ dt_a.ten_mth, dt_a.mth, dt_a.ten_day, dt_a.day); printf("Alarm Time on: "); if (f_time & SOCLE_RTC_TALRM_CSOS) printf("\"Sixteen of Second\" "); if (f_time & SOCLE_RTC_TALRM_CS) printf("\"Second\" "); if (f_time & SOCLE_RTC_TALRM_CM) printf("\"Minute\" "); if (f_time & SOCLE_RTC_TALRM_CH) printf("\"Hour\" "); if (f_time & SOCLE_RTC_TALRM_CDOW) printf("\"Day of Week\""); printf("\n"); printf("Alarm Date on: "); if (f_date & SOCLE_RTC_DALRM_CD) printf("\"Day\" "); if (f_date & SOCLE_RTC_DALRM_CM) printf("\"Month\" "); if (f_date & SOCLE_RTC_DALRM_CY) printf("\"Year\" "); if (f_date & SOCLE_RTC_DALRM_CC) printf("\"Century\""); printf("\n"); rtc_set_time_alarm(&tm_a, f_time); rtc_set_date_alarm(&dt_a, f_date); hit = 0; rtc_set_date(&dt); rtc_set_time(&tm); printf("alarm after 15 second...\n"); return result; }
static void rtc_set_date_from_host(RTCState *s) { struct tm tm; int val; /* set the CMOS date */ qemu_get_timedate(&tm, 0); rtc_set_date(s, &tm); val = to_bcd(s, (tm.tm_year / 100) + 19); rtc_set_memory(s, REG_IBM_CENTURY_BYTE, val); rtc_set_memory(s, REG_IBM_PS2_CENTURY_BYTE, val); }
static void rtc_set_date_from_host(ISADevice *dev) { RTCState *s = DO_UPCAST(RTCState, dev, dev); struct tm tm; int val; /* set the CMOS date */ qemu_get_timedate(&tm, 0); rtc_set_date(dev, &tm); val = rtc_to_bcd(s, (tm.tm_year / 100) + 19); rtc_set_memory(dev, REG_IBM_CENTURY_BYTE, val); rtc_set_memory(dev, REG_IBM_PS2_CENTURY_BYTE, val); }
extern int rtc_set_date_test(int autotest) { rtc_date_t date; printf("Please input the RTC date, ex: on 21st centry, 06/05/23\n"); printf("Set Date = 21:06:05:23, Your Date = "); scanf("%1d%1d:%1d%1d:%1d%1d:%1d%1d", &date.ten_cent, &date.cent, &date.ten_yr, &date.yr, \ &date.ten_mth, &date.mth, &date.ten_day, &date.day); PDEBUG("Input Date = %d%d:%d%d:%d%d:%d%d\n", date.ten_cent, date.cent, date.ten_yr, date.yr, \ date.ten_mth, date.mth, date.ten_day, date.day); rtc_set_date(&date); return 0; }
/** * \brief Configure RTC for test * \Set alarm ewery second */ void configure_rtc (void) { uint32_t status; struct _time MTU = {00, 00, 00}; struct _time MTA = {18, 30, 00}; struct _date MDT = {2015, 06, 01, 1}; rtc_set_hour_mode(0); // mode 24h status = rtc_set_time(&MTU); status |= rtc_set_date(&MDT); status |= rtc_set_time_alarm(&MTA); status |= rtc_set_time_event (RTC_CR_TIMEVSEL_MINUTE); rtc_disable_it (RTC_IER_ACKEN | RTC_IER_ALREN | RTC_IER_SECEN | RTC_IER_TIMEN | RTC_IER_CALEN); rtc_enable_it (RTC_IER_SECEN); aic_set_source_vector(ID_SYSC, rtc_irq_handler); aic_enable(ID_SYSC); }
int main(void) { i2c_init(I2C_CLOCK_SELECT(SCL_CLOCK,F_CPU)); initRTC(0,0); uart_config_default_stdio(); uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); sei(); Date date; Timestamp ts; date.year = 1988; date.month = 12; date.day = 13; date.hours = 6; date.minutes = 13; date.seconds = 57; printf("\n\nSetting clock to %d:%d:%d on %d/%d/%d\n",date.hours,date.minutes,date.seconds,date.month,date.day,date.year); rtc_set_date(&date); rtc_get_date(&date); printf("The time is now %d:%d:%d on %d/%d/%d\n",date.hours,date.minutes,date.seconds,date.month,date.day,date.year); rtc_setCounting(1); printf("Kindly type a key to view the updated time.\n"); while(1) { fgetc(stdin); rtc_get_date(&date); printf("The time is now %d:%d:%d on %d/%d/%d",date.hours,date.minutes,date.seconds,date.month,date.day,date.year); rtc_date_to_timestamp(&date,&ts); printf(" (%ld)\n",ts); } return 0; }
extern int auto_poweroff_alarm_test(int autotest) { int count_down_s = 5; rtc_reset(); // Set alarm date and alarm time // alarm date = C21 06/12/31 dt_a.ten_cent = 2; dt_a.cent = 1; dt_a.ten_yr = 0; dt_a.yr = 6; dt_a.ten_mth = 1; dt_a.mth = 2; dt_a.ten_day = 3; dt_a.day = 1; rtc_set_date_alarm(&dt_a, SOCLE_RTC_DALRM_CD | SOCLE_RTC_DALRM_CM | SOCLE_RTC_DALRM_CY | SOCLE_RTC_DALRM_CC); // alarm time = Wed 17:58:1count_down_s.10 tm_a.dow = 3; tm_a.ten_hr = 1; tm_a.hr = 7; tm_a.ten_min = 5; tm_a.min = 8; tm_a.ten_sec = 1; tm_a.sec = count_down_s; tm_a.sos = 10; rtc_set_time_alarm(&tm_a, SOCLE_RTC_TALRM_CSOS | SOCLE_RTC_TALRM_CS | SOCLE_RTC_TALRM_CM | SOCLE_RTC_TALRM_CH | SOCLE_RTC_TALRM_CDOW); // Set date and time // date = C21 06/12/31 dt.ten_cent = 2; dt.cent = 1; dt.ten_yr = 0; dt.yr = 6; dt.ten_mth = 1; dt.mth = 2; dt.ten_day = 3; dt.day = 1; rtc_set_date(&dt); // time = Wed 17:58:10.2 tm.dow = 3; tm.ten_hr = 1; tm.hr = 7; tm.ten_min = 5; tm.min = 8; tm.ten_sec = 1; tm.sec = 0; tm.sos = 2; rtc_set_time(&tm); printf("Count down %d seconds...\n", count_down_s); printf("Sleeping...\n"); EN_RTC_ALARM_POWER_ON(); ENTER_RTC_POWER_OFF_MODE(); return 0; }
static int rtc_sub_alarm_test(u32_t f_time, u32_t f_date) { volatile int hit; int result = 0; rtc_reset(); printf("RTC Time = W%d %d%d:%d%d:%d%d:%d\n", tm.dow, tm.ten_hr, tm.hr, \ tm.ten_min, tm.min, tm.ten_sec, tm.sec, tm.sos); printf("RTC Date = C%d%d %d%d/%d%d/%d%d\n", dt.ten_cent, dt.cent, dt.ten_yr, dt.yr, \ dt.ten_mth, dt.mth, dt.ten_day, dt.day); printf("Alarm Time = W%d %d%d:%d%d:%d%d:%d\n", tm_a.dow, tm_a.ten_hr, tm_a.hr, \ tm_a.ten_min, tm_a.min, tm_a.ten_sec, tm_a.sec, tm_a.sos); printf("Alarm Date = C%d%d %d%d/%d%d/%d%d\n", dt_a.ten_cent, dt_a.cent, dt_a.ten_yr, dt_a.yr, \ dt_a.ten_mth, dt_a.mth, dt_a.ten_day, dt_a.day); printf("Alarm Time on: "); if (f_time & SOCLE_RTC_TALRM_CSOS) printf("\"Sixteen of Second\" "); if (f_time & SOCLE_RTC_TALRM_CS) printf("\"Second\" "); if (f_time & SOCLE_RTC_TALRM_CM) printf("\"Minute\" "); if (f_time & SOCLE_RTC_TALRM_CH) printf("\"Hour\" "); if (f_time & SOCLE_RTC_TALRM_CDOW) printf("\"Day of Week\""); printf("\n"); printf("Alarm Date on: "); if (f_date & SOCLE_RTC_DALRM_CD) printf("\"Day\" "); if (f_date & SOCLE_RTC_DALRM_CM) printf("\"Month\" "); if (f_date & SOCLE_RTC_DALRM_CY) printf("\"Year\" "); if (f_date & SOCLE_RTC_DALRM_CC) printf("\"Century\""); printf("\n"); rtc_set_time_alarm(&tm_a, f_time); rtc_set_date_alarm(&dt_a, f_date); hit = 0; // enable interrupt request_irq(RTC_INT, rtc_isr_alarm_hit, (void *)&hit); rtc_set_date(&dt); rtc_set_time(&tm); printf("Waiting for the alarm...\n"); if (socle_wait_for_int(&hit, 10)) { printf("Timeout!!\n"); result = -1; } // disable interrupt free_irq(RTC_INT); return result; }
//---------------------------------------------------------------------------------- // ham thay doi trang thai void change_state() { //unsigned long temp; //dang o trang thai binh thuong set_flag=0 va nhan duoc nut bam if(set_flag==0) { if(!SET_BTN) //neu button set duoc bam-->chuyen sang trang thai set thoi gian { Speaker = 1; delay_ms(100); Speaker = 0; delay_ms(100); put_date_info(); put_time_info(); while(!SET_BTN) //cho den khi set button duoc nha? { // neu giu nut bam qua lau dua ra canh bao\ // sau thoi gian 5s //error_BTN(temp); } //temp=0; set_flag=1; //bao hieu dang la che do set time set_val=1; //tang bien set_val de move blink den vi tri tuong ung lcd_blink_on(); //bat blinking //dua contro den vi tri set gia tri giay lcd_blink_move(); //dua con tro toi vi tri tuong ung } // neu khong duoc an nut thi chi hien thi thoi gian thuc /* else { //delay_ms(5); //if(state_settime) //{ //set_val=0; //set_flag=0; delay_ms(100); button_menu=0; lcd_gotoxy(0,0); lcd_puts("Setup thoi gian "); lcd_gotoxy(0,1); lcd_puts(" "); //Speaker=1; //} //state_settime=0; }*/ } //dang o trang thai set time set_flag=1 if(set_flag==1) { while(!UP_BTN) //neu bam button add------ { //cho toi khi tha nut bam time_change(1); //goi ham add time Speaker = 1; delay_ms(150); Speaker = 0; delay_ms(150); } while(!DOWN_BTN) //neu bam nut sub-------- { //cho toi khi tha nut bam time_change(-1); //goi ham tru thoi gian Speaker = 1; delay_ms(150); Speaker = 0; delay_ms(150); } if(SET_BTN==0) //neu bam nut set--------- { Speaker = 1; delay_ms(150); Speaker = 0; delay_ms(150); while(!SET_BTN) //cho den khi tha nut bam { //error_BTN(temp); } //temp=0; set_val++; if(set_val==9) set_val=1; if(set_val!=8) { lcd_gotoxy(13,0); lcd_puts(" "); lcd_blink_on() ; lcd_blink_move(); //dua con tro toi vi tri tiep theo } else { lcd_blink_off() ; lcd_gotoxy(13,0); lcd_puts("OK"); rtc_set_time(hour,minute,second); rtc_set_date(day,date,month,year); } } //else if(ok_BTN==0) //neu bam nut ok--------- // if(OK_BTN==0) // { // Speaker = 1; // delay_ms(150); // Speaker = 0; // delay_ms(150); // while(!OK_BTN) //cho toi khi tha nut bam // { // //error_BTN(temp); // } // //temp=0; // lcd_blink_off(); // set_val=0; // set_flag=0; // button_menu=1; // rtc_set_time(hour,minute,second); // rtc_set_date(day,date,month,year); // } } }
void settime() { rtc_set_time(t.hour,t.min,t.sec); rtc_set_date(t.dow,t.date,t.month,t.year); }
/** * \brief Application entry point for RTC example. * * \return Unused (ANSI-C compatibility). */ int main(void) { uint8_t uc_key; /* Initialize the SAM system */ sysclk_init(); board_init(); /* Initialize the console uart */ configure_console(); /* Output example information */ puts(STRING_HEADER); /* Default RTC configuration, 24-hour mode */ rtc_set_hour_mode(RTC, 0); /* Configure RTC interrupts */ NVIC_DisableIRQ(RTC_IRQn); NVIC_ClearPendingIRQ(RTC_IRQn); NVIC_SetPriority(RTC_IRQn, 0); NVIC_EnableIRQ(RTC_IRQn); rtc_enable_interrupt(RTC, RTC_IER_SECEN | RTC_IER_ALREN); /* Refresh display once */ refresh_display(); /* Handle keypresses */ while (1) { while (uart_read(CONSOLE_UART, &uc_key)); /* Set time */ if (uc_key == 't') { gs_ul_state = STATE_SET_TIME; do { puts("\n\r\n\r Set time(hh:mm:ss): "); } while (get_new_time()); /* If valid input, none of the variables for time is 0xff. */ if (gs_ul_new_hour != 0xFFFFFFFF && (gs_uc_rtc_time[2] == ':') && (gs_uc_rtc_time[5] == ':')) { if (rtc_set_time(RTC, gs_ul_new_hour, gs_ul_new_minute, gs_ul_new_second)) { puts("\n\r Time not set, invalid input!\r"); } } else { gs_uc_rtc_time[2] = ':'; gs_uc_rtc_time[5] = ':'; puts("\n\r Time not set, invalid input!\r"); } gs_ul_state = STATE_MENU; gs_ul_menu_shown = 0; refresh_display(); } /* Set date */ if (uc_key == 'd') { gs_ul_state = STATE_SET_DATE; do { puts("\n\r\n\r Set date(mm/dd/yyyy): "); } while (get_new_date()); /* If valid input, none of the variables for date is 0xff(ff). */ if (gs_ul_new_year != 0xFFFFFFFF && (gs_uc_date[2] == '/') && (gs_uc_date[5] == '/')) { if (rtc_set_date(RTC, gs_ul_new_year, gs_ul_new_month, gs_ul_new_day, gs_ul_new_week)) { puts("\n\r Date not set, invalid input!\r"); } } else { gs_uc_date[2] = '/'; gs_uc_date[5] = '/'; puts("\n\r Time not set, invalid input!\r"); } /* Only 'mm/dd' is input. */ if (gs_ul_new_month != 0xFFFFFFFF && gs_ul_new_year == 0xFFFFFFFF) { puts("\n\r Not Set for no year field!\r"); } gs_ul_state = STATE_MENU; gs_ul_menu_shown = 0; refresh_display(); } /* Set time alarm */ if (uc_key == 'i') { gs_ul_state = STATE_SET_TIME_ALARM; rtc_clear_date_alarm(RTC); do { puts("\n\r\n\r Set time alarm(hh:mm:ss): "); } while (get_new_time()); if (gs_ul_new_hour != 0xFFFFFFFF && (gs_uc_rtc_time[2] == ':') && (gs_uc_rtc_time[5] == ':')) { if (rtc_set_time_alarm(RTC, 1, gs_ul_new_hour, 1, gs_ul_new_minute, 1, gs_ul_new_second)) { puts("\n\r Time alarm not set, invalid input!\r"); } else { printf("\n\r Time alarm is set at %02u:%02u:%02u!", (unsigned int)gs_ul_new_hour, (unsigned int)gs_ul_new_minute, (unsigned int)gs_ul_new_second); } } else { gs_uc_rtc_time[2] = ':'; gs_uc_rtc_time[5] = ':'; puts("\n\r Time not set, invalid input!\r"); } gs_ul_state = STATE_MENU; gs_ul_menu_shown = 0; gs_ul_alarm_triggered = 0; refresh_display(); } /* Set date alarm */ if (uc_key == 'm') { gs_ul_state = STATE_SET_DATE_ALARM; rtc_clear_time_alarm(RTC); do { puts("\n\r\n\r Set date alarm(mm/dd/yyyy): "); } while (get_new_date()); if (gs_ul_new_year != 0xFFFFFFFF && (gs_uc_date[2] == '/') && (gs_uc_date[5] == '/')) { if (rtc_set_date_alarm(RTC, 1, gs_ul_new_month, 1, gs_ul_new_day)) { puts("\n\r Date alarm not set, invalid input!\r"); } else { printf("\n\r Date alarm is set on %02u/%02u/%4u!", (unsigned int)gs_ul_new_month, (unsigned int)gs_ul_new_day, (unsigned int)gs_ul_new_year); } } else { gs_uc_date[2] = '/'; gs_uc_date[5] = '/'; puts("\n\r Date alarm not set, invalid input!\r"); } gs_ul_state = STATE_MENU; gs_ul_menu_shown = 0; gs_ul_alarm_triggered = 0; refresh_display(); } #if ((SAM3S8) || (SAM3SD8) || (SAM4S) || (SAM4C) || (SAM4CP) || (SAM4CM)) /* Generate Waveform */ if (uc_key == 'w') { gs_ul_state = STATE_WAVEFORM; puts("\n\rMenu:\n\r" " 0 - No Waveform\n\r" " 1 - 1 Hz square wave\n\r" " 2 - 32 Hz square wave\n\r" " 3 - 64 Hz square wave\n\r" " 4 - 512 Hz square wave\n\r" " 5 - Toggles when alarm flag rise\n\r" " 6 - Copy of the alarm flag\n\r" " 7 - Duty cycle programmable pulse\n\r" " 8 - Quit\r"); while (1) { while (uart_read(CONSOLE_UART, &uc_key)); if ((uc_key >= '0') && (uc_key <= '7')) { rtc_set_waveform(RTC, 0, char_to_digit(uc_key)); } if (uc_key == '8') { gs_ul_state = STATE_MENU; gs_ul_menu_shown = 0; refresh_display(); break; } } } #endif /* Clear trigger flag */ if (uc_key == 'c') { gs_ul_alarm_triggered = 0; gs_ul_menu_shown = 0; refresh_display(); } } }
/** \brief Main function. Execution starts here. */ int main(void) { uint8_t uc_result; /* Initialize the sleep manager */ sleepmgr_init(); membag_init(); sysclk_init(); init_specific_board(); /* Initialize the console uart */ configure_console(); /* Output demo infomation. */ printf("-- SAM Toolkit Demo Example --\n\r"); printf("-- %s\n\r", BOARD_NAME); printf("-- Compiled: %s %s --\n\r", __DATE__, __TIME__); /* Configure systick for 1 ms. */ puts("Configure system tick to get 1ms tick period.\r"); if (SysTick_Config(sysclk_get_cpu_hz() / 1000)) { puts("Systick configuration error\r"); while (1) { } } /* Initialize gfx module */ gfx_init(); win_init(); /* Initialize FatFS and bitmap draw interface */ demo_draw_bmpfile_init(); /* Initialize touchscreen without calibration */ rtouch_init(LCD_WIDTH, LCD_HEIGHT); rtouch_enable(); rtouch_set_event_handler(event_handler); /* Initialize demo parameters */ demo_parameters_initialize(); while (g_demo_parameters.calib_points[0].raw.x == 0) { uc_result = rtouch_calibrate(); if (uc_result == 0) { demo_set_special_mode_status(DEMO_LCD_CALIBRATE_MODE, 0); puts("Calibration successful !\r"); break; } else { puts("Calibration failed; error delta is too big ! Please retry calibration procedure...\r"); } } /* Re-caculate the calibration data */ rtouch_compute_calibration( (rtouch_calibration_point_t *)&g_demo_parameters.calib_points[0]); /* Setup root window */ setup_gui_root_window(); gfx_draw_bitmap(&win_startup_bmp, 0, 40); /* Set backlight by the data read from demo parameters */ aat31xx_set_backlight(g_demo_parameters.backlight); /* Default RTC configuration, 24-hour mode */ rtc_set_hour_mode(RTC, 0); rtc_set_time(RTC, g_demo_parameters.hour, g_demo_parameters.minute, g_demo_parameters.second); rtc_set_date( RTC, g_demo_parameters.year, g_demo_parameters.month, g_demo_parameters.day, 1 ); /* Create a semaphore to manage the memories data transfer */ vSemaphoreCreateBinary(main_trans_semphr); /* Turn on main widget */ app_widget_main_on(true); /* Initialize QTouch */ demo_qt_init(); /* Start USB stack to authorize VBus monitoring */ udc_start(); if (!udc_include_vbus_monitoring()) { /* VBUS monitoring is not available on this product * thereby VBUS has to be considered as present */ main_vbus_action(true); } /* Create task to window task */ if (xTaskCreate(task_win, "WIN", TASK_WIN_STACK_SIZE, NULL, TASK_WIN_STACK_PRIORITY, NULL) != pdPASS) { printf("Failed to create test led task\r\n"); } /* Create task to usb mass storage task */ if (xTaskCreate(task_usb, "USB", TASK_USB_STACK_SIZE, NULL, TASK_USB_STACK_PRIORITY, NULL) != pdPASS) { printf("Failed to create test led task\r\n"); } /* Start the scheduler. */ vTaskStartScheduler(); /* Will only get here if there was insufficient memory to create the * idle task. */ return 0; }
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; }