/*----------------------------------------------------------------------------*/
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);
    }
}
Example #2
0
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);
}
Example #3
0
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;
}
Example #4
0
/*----------------------------------------------------------------------------*/
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;
}
Example #5
0
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();
}
Example #7
0
/*----------------------------------------------------------------------------*/
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;
}