/*----------------------------------------------------------------------------*/ void check_alm(void) { u8 rtc_reg; rtc_reg = read_rtc_reg(); if (rtc_reg & BIT(7)) { alm_flag = 1; put_msg_lifo(INFO_ALM_BELL); } }
void sys_init(void) { #if defined(UART_ENABLE) uart_init(); deg_str("power on\n"); #endif SYS_POWER_OFF(); core_power_on(); OTP_CLK_DIV2(); DECODER_DIV2(); SYSTEM_CLK_DIV4(); #if (NO_DISP != monitor) init_display(); #endif sd_speed_init(0,100); //#if SDMMC_CMD_MODE // sd_chk_ctl(SET_SD_H_CHK); //#endif init_port_sd(); //kv_init(); ///按键音初始化函数 #if RTC_ENABLE rtc_init(); //RTC初始化,检测是否闹钟开机 //{ //work_mode = RTC_MODE; //} #else { u8 rtc_reg = read_rtc_reg(); if (rtc_reg & BIT(7)) //检测是否掉电 { rtc_reg &= ~BIT(7); //清零PDFLAG write_rtc_reg(rtc_reg); #if USE_RTC_RAM reset_rtc_ram(); #endif } } #endif SYS_POWER_OFF(); key_init(); bsp_init(); SYS_POWER_OFF(); //interrupt_init(15, rtcisr); interrupt_init(3, timer3isr); interrupt_init(0, timer0isr); #if defined(BLUE_TOOTH_UART_FUNC) interrupt_init(7, uart_isr); #endif enable_interrupt(); /// flashled(3); }
void arch_rtc_init(struct c_os_time *time) { rtc_format = read_rtc_reg(0xB); time->second = read_rtc_reg(0); time->minute = read_rtc_reg(2); time->hour = read_rtc_reg(4); //Should be Weekday, doesn't work correctly time->weekday = read_rtc_reg(6); time->day = read_rtc_reg(7); time->month = read_rtc_reg(8); time->year = read_rtc_reg(9); time->century = read_rtc_reg(0x32); //XXX: Is this right? if(time->hour == 0) time->hour = 12; if(time->hour > 12) time->hour -= 12; }
/*----------------------------------------------------------------------------*/ void sys_init(void) { #ifdef UART_ENABLE uartInit(); printf("power up \r\n"); #endif #if RTC_ENABLE if (init_rtc()) { work_mode = SYS_RTC; } #else { u8 rtc_reg; rtc_reg=read_rtc_reg(); //printf("RTC reg:%02bx\n",rtc_reg); if (rtc_reg & BIT(6)) ///<RTC是否完全掉电 { #if (MEMORY_STYLE == USE_RTCRAM) reset_rtc_ram(); #endif rtc_reg &= ~(BIT(6)); //清零PDGLG write_rtc_reg(rtc_reg); } } #endif P0IE_init(); keyInit(); timer1Init(); timer3Init(); #ifdef USE_USB_SD_DECODE_FUNC #ifndef NO_SD_DECODE_FUNC sd_speed_init(1,100); init_port_sd(); #endif #endif #if SDMMC_CMD_MODE sd_chk_ctl(SET_SD_H_CHK); #endif DACCON0 |= 0x05; //打开DSP EA = 1; }
void read_rtc(struct rtc_date_time *dt) { int last_second; int last_minute; int last_hour; int last_day; int last_month; int last_year; int last_century; int registerB; if (!dt) { return; } /* * Note: This uses the "read registers until you get the same values twice in a row" technique * to avoid getting dodgy/inconsistent values due to rtc updates */ // Make sure an update isn't in progress wait_update(); dt->second = read_rtc_reg(0x00); dt->minute = read_rtc_reg(0x02); dt->hour = read_rtc_reg(0x04); dt->day = read_rtc_reg(0x07); dt->month = read_rtc_reg(0x08); dt->year = read_rtc_reg(0x09); if (century_reg) { dt->century = read_rtc_reg(century_reg); } do { last_second = dt->second; last_minute = dt->minute; last_hour = dt->hour; last_day = dt->day; last_month = dt->month; last_year = dt->year; last_century = dt->century; // Make sure an update isn't in progress wait_update(); dt->second = read_rtc_reg(0x00); dt->minute = read_rtc_reg(0x02); dt->hour = read_rtc_reg(0x04); dt->day = read_rtc_reg(0x07); dt->month = read_rtc_reg(0x08); dt->year = read_rtc_reg(0x09); if (century_reg) { dt->century = read_rtc_reg(century_reg); } } while ( (last_second == dt->second) && (last_minute == dt->minute) && (last_hour == dt->hour) && (last_day == dt->day) && (last_month == dt->month) && (last_year == dt->year) && (last_century == dt->century) ); registerB = read_rtc_reg(0x0B); // Convert BCD to binary values if necessary if (!(registerB & 0x04)) { dt->second = (dt->second & 0x0F) + ((dt->second / 16) * 10); dt->minute = (dt->minute & 0x0F) + ((dt->minute / 16) * 10); dt->hour = ((dt->hour & 0x0F) + (((dt->hour & 0x70) / 16) * 10)) | (dt->hour & 0x80); dt->day = (dt->day & 0x0F) + ((dt->day / 16) * 10); dt->month = (dt->month & 0x0F) + ((dt->month / 16) * 10); dt->year = (dt->year & 0x0F) + ((dt->year / 16) * 10); if(century_reg) { dt->century = (dt->century & 0x0F) + ((dt->century / 16) * 10); } } // Convert 12 hour clock to 24 hour clock if necessary if (!(registerB & 0x02) && (dt->hour & 0x80)) { dt->hour = ((dt->hour & 0x7F) + 12) % 24; } // Calculate the full (4-digit) year if(century_reg) { dt->year += dt->century * 100; } else { if (dt->year > 80 && dt->year < 100) { dt->century = 20; dt->year += 1900; } else { dt->century = 21; dt->year += 2000; } //year += (CURRENT_YEAR / 100) * 100; //if (year < CURRENT_YEAR) year += 100; } }
void sys_init(void) { #if 0 uart_init(); deg_str("AC309N-C\n"); #endif core_power_on(); OTP_CLK_DIV2(); DECODER_DIV2(); sys_clk_div(4);//SYSTEM_CLK_DIV4(); set_vol_tab_ptr(analog_vol_tab, digital_vol_tab); #if (NO_DISP != monitor) init_display(); #endif sd_speed_init(0,100); //#if SDMMC_CMD_MODE // sd_chk_ctl(SET_SD_H_CHK); //#endif init_port_sd(); kv_init(); ///按键音初始化函数 #if RTC_ENABLE if (rtc_init()) //RTC初始化,检测是否闹钟开机 { work_mode = RTC_MODE; } #else { u8 rtc_reg = read_rtc_reg(); if (rtc_reg & BIT(7)) //检测是否掉电 { rtc_reg &= ~(BIT(7)); //清零PDFLAG write_rtc_reg(rtc_reg); #if USE_RTC_RAM #if RTC_ENABLE reset_rtc_ram(); #else { u8 i; for (i = 0; i < 64; i++) { write_rtc_ram(i, 0); } } #endif ///<RTC_ENABLE #endif ///<USE_RTC_RAM } } #endif key_init(); bsp_init(); #if ECHO_ENABLE dec_analog_vol_sel(1); echo_ptr = (REVERB_CTL _xdata *)get_echo_var_ptr(1); encode_msg = (ENCODE_MSG _xdata *)get_encode_msg_ptr(); app_echo.strong = 150; app_echo.deep = 40; #else dec_analog_vol_sel(0); get_echo_var_ptr(0);///<传参0,不适用混响功能 #endif interrupt_init(15, rtcisr); interrupt_init(3, timer3isr); interrupt_init(0, timer0isr); enable_interrupt(); }
/*----------------------------------------------------------------------------*/ void sys_init(void) { #ifdef UART_ENABLE uartInit(); printf("power up \r\n"); #endif #if RTC_ENABLE if (init_rtc()) { work_mode = SYS_RTC; } #else { u8 rtc_reg; rtc_reg=read_rtc_reg(); //printf("RTC reg:%02bx\n",rtc_reg); if (rtc_reg & BIT(6)) ///<RTC是否完全掉电 { #if (MEMORY_STYLE == USE_RTCRAM) reset_rtc_ram(); #endif rtc_reg &= ~(BIT(6)); //清零PDGLG write_rtc_reg(rtc_reg); } } #endif set_brightness_all_on(); P0IE_init(); keyInit(); timer1Init(); timer3Init(); #ifdef USE_USB_SD_DECODE_FUNC #ifndef NO_SD_DECODE_FUNC sd_speed_init(1,100); init_port_sd(); #endif #endif #if SDMMC_CMD_MODE sd_chk_ctl(SET_SD_H_CHK); #endif #ifdef USE_POWER_KEY sys_power_up(); #endif DACCON0 |= 0x05; //打开DSP EA = 1; #ifdef USE_POWER_KEY sys_power_up(); #endif work_mode = read_info(MEM_SYSMODE); #ifdef CUSTOMED_POWER_ON_AT_RADIO_MODE work_mode = SYS_FMREV; #endif if (work_mode == SYS_MP3DECODE_USB){ #ifdef REMOVE_USE_MODE work_mode = SYS_FMREV; Disp_Con(DISP_TUNER); return; #endif Disp_Con(DISP_SCAN_DISK); } else if ((work_mode == SYS_FMREV) #ifdef AM_RADIO_FUNC ||(work_mode == SYS_AMREV) #endif ){ #ifdef AM_RADIO_FUNC if(work_mode == SYS_AMREV){ cur_sw_fm_band = MW_MODE; } else #endif { cur_sw_fm_band = FM_MODE; } Disp_Con(DISP_TUNER); } else if (work_mode == SYS_MCU_CD){ Disp_Con(DISP_SCAN_TOC); } else if (work_mode == SYS_AUX){ Disp_Con(DISP_AUX); } #if defined(USE_BLUE_TOOTH_FUNC) else if (work_mode == SYS_BLUE_TOOTH){ Disp_Con(DISP_BT); } #endif CD_PWR_GPIO_CTRL_INIT(); CD_PWR_GPIO_OFF(); //TUNER_PWR_GPIO_CTRL_INIT(); //TUNER_PWR_GPIO_OFF(); AUX_GPIO_CTRL_INIT(); AUX_PWR_GPIO_OFF(); BT_GPIO_CTRL_INIT(); BT_PWR_GPIO_OFF(); }
bool init_rtc(void) { u8 rtc_con; bool alm_wkup; curr_alm.hour = read_info(MEM_ALM_HOUR); curr_alm.minutes = read_info(MEM_ALM_MIN); if (curr_alm.hour > 23) { #ifdef USE_RTC_ALM_CUSTOM_INIT curr_alm.hour = 0; #else curr_alm.hour = 12; #endif } if (curr_alm.minutes > 59) { curr_alm.minutes = 0; } alm_sw = 0; rtc_con=read_rtc_reg(); //读出IRTCON = 0x05;32KHz enable,32KHz output alm_wkup = 0; //printf("%u\n",(u16)rtc_con); if (rtc_con & BIT(6)) ///<RTC是否完全掉电 { #ifdef UART_ENABLE_RTC sys_printf("sys_init from completely power off"); #endif send_rtc_sec(0); } else { #ifdef UART_ENABLE_RTC sys_printf("sys_init from NOT completely power off"); #endif if (rtc_con & (1<<1)) ///<RTC是否开闹钟 { alm_sw = 1; } if (rtc_con & BIT(7)) ///<闹钟唤醒 { #ifdef PWR_OFF_WAKEUP_FUNC #if defined(PWR_CTRL_WKUP) wkup_pin_ctrl(1); #else power_ctl(1); #endif #endif alm_wkup=1; alm_flag = 1; } } get_curr_date(); chk_date_err(); fond_alm_clk(); rtc_con &= ~BIT(6); //清零PDGLG write_rtc_reg(rtc_con); return alm_wkup; }