✎
编程开发网
首页
C语言
C++
面试
Linux
函数
Windows
数据库
下载
搜索
当前位置:
首页
->
基础
->
c++编程基础
S3C2440 裸机时钟RTC (二)
2014-11-23 23:33:56
·
作者:
·
浏览:
11
标签:
S3C2440
裸机
时钟
RTC
>month = rBCDMON; p_date->day = rBCDDATE; p_date->week_day = rBCDDAY; //读取日期时间 p_date->hour = rBCDHOUR; p_date->minute = rBCDMIN; p_date->second = rBCDSEC; rRTCCON=0x00; //RTC读写禁止,BCD时钟、计数器、无复位 } /******************************** * * TICK中断初始化 * *********************************/ void RTC_tickIRQ_Init(U8 tick) { ClearPending(BIT_TICK); //清除标志位 EnableIrq(BIT_TICK); //使能中断源 pISR_TICK=(unsigned)RTC_tickHandler; //中断函数入口地址 rRTCCON=0x00; rTICNT=(tick&0x7f)|0x80; //使能中断 } /******************************** * * 设置闹钟日期、 时间及其闹钟唤醒模式 * *********************************/ void RTC_alarm_setdate(date *p_date,U8 mode) { rRTCCON = 0x01; rALMYEAR = p_date->year; rALMMON = p_date->month; rALMDATE = p_date->day; rALMHOUR = p_date->hour; rALMMIN = p_date->minute; rALMSEC = p_date->second; rRTCALM = mode; //RTC闹钟控制寄存器 rRTCCON = 0x00; ClearPending(BIT_RTC); //清除标志位 EnableIrq(BIT_RTC); //open RTC alarm INTERRUPT pISR_RTC = (unsigned)RTC_alarmHandler; } void Main(void) { SelectFclk(2); //设置系统时钟 400M ChangeClockDivider(2, 1); //设置分频 1:4:8 CalcBusClk(); //计算总线频率 rGPHCON &=~((3<<4)|(3<<6)); rGPHCON |=(2<<4)|(2<<6); //GPH2--TXD[0];GPH3--RXD[0] rGPHUP=0x00; //使能上拉功能 Uart_Init(0,115200); Uart_Select(0); rGPBCON &=~((3<<10)|(3<<12)|(3<<14)|(3<<16)); //对GPBCON[10:17]清零 rGPBCON |=((1<<10)|(1<<12)|(1<<14)|(1<<16)); //设置GPB5~8为输出 rGPBUP &=~((1<<5)|(1<<6)|(1<<7)|(1<<8)); //设置GPB5~8的上拉功能 rGPBDAT |=(1<<5)|(1<<6)|(1<<7)|(1<<8); //关闭LED Beep_Stop(); //蜂鸣器停止发声,蜂鸣器用作闹钟声 C_date.year = 0x12; C_date.month = 0x05; C_date.day = 0x09; C_date.week_day = 0x03; //设置当前日期时间 C_date.hour = 0x12; C_date.minute = 0x00; C_date.second = 0x10; RTC_setdate(&C_date); C_date.second=0x20; RTC_alarm_setdate(&C_date,0x41);//0x41表示使能RTC闹钟,以及使能秒时钟闹钟 RTC_tickIRQ_Init(127); // 设置1秒钟tick一次 Uart_Printf("\n ---实时时钟测试程序---\n"); while(Uart_GetKey()!= ESC_KEY) { LED1_OFF; RTC_getdate(&C_date); if(alarmflag) { alarmflag=0; Uart_Printf("\nRTC ALARM %02x:%02x:%02x \n",C_date.hour,C_date.minute,C_date.second); Beep_Freq_Set(1000); delay(5); Beep_Stop(); } } } /******************************** * * TICK中断 * *********************************/ void __irq RTC_tickHandler(void) { ClearPending(BIT_TICK); LED1_ON; //刷新LED1 Delay(500); RTC_getdate(&C_date); Uart_Printf("RTC TIME: %04x-%02x-%02x %s %02x:%02x:%02x\n", C_date.year,C_date.month,C_date.day,week_num[C_date.week_day], C_date.hour, C_date.minute, C_date.second ); } /******************************** * * TICK中断 * *********************************/ void __irq RTC_alarmHandler(void) { alarmflag = 1; ClearPending(BIT_RTC); }
首页
上一页
1
2
下一页
尾页
2
/2/2