嵌入式Linux中RTC的操作说明

2019-07-12 17:40发布

一、RTC的作用

对于手机、PDA的嵌入式平台的关机闹钟都使用RTC实现,RTC是一个硬件。 RTC中存储两个时间,一个是普通的滴答时间,另一个是提醒时间,RTC犹如一个滴答计时器,当RTC中时钟到达指定的提醒时间的时候,就会发出中断,让系统开机,从而达到关机闹钟的功能。 在Linux中,当系统启动之后,会启动一个叫atd的deamon进程,用于操作rtc。 atd中会用while循环不停的查询/var/spool/at/xxx.pid和/var/spool/at/trigger两个管道是否有数据,如果有则重新设置RTC的滴答时间或是提醒时间(/var/spool/at/xxx.pid是以提醒的时间的UTC的秒数来命名的;而/var/spool/at/trigger中有数据"w"表示需要将系统当前时间写到RTC中)。当设置一个提醒时间到RTC之后,会使用select监听/var/spool/at/xxx.pid和/var/spool/at/trigger两个管道及rtc提醒时间的中断消息。  

二、RTC的接口

RTC硬件对应的设备文件是/dev/rtc。 下面省略了open和close接口

2.1、Read

RTC设备的读操作主要是返回目前RTC的中断情况的一个状态值(代码中用rtc_irq_status标识),这个值是一个unsigned long类型的数据,该数据的定义如下: 其他bit8bit 中断次数 中断类型 下面的宏定义了中断的类型: #define     RTC_IRQF            0x80 #define     RTC_PF              0x40 #define     RTC_AF              0x20 #define     RTC_UF              0x10 RTC_PF标识periodic interrupt flag RTC_AF标识alarm interrupt flag RTC_UF标识update interrupt flag 没有中断产生的时候,RTC没有数据可读。

Ioctl

RTC misc driver实现的ioctl命令包括: 命令 解释 RTC_AIE_OFF 关闭alarm中断 RTC_AIE_ON 打开alarm中断 RTC_PIE_ON 打开周期性中断 RTC_PIE_OFF 关闭周期性中断 RTC_UIE_ON 打开update类型的中断 RTC_UIE_OFF 关闭update类型的中断 RTC_ALM_READ 读取alarm的时间 RTC_ALM_SET 设定alarm的时间 RTC_RD_TIME 读取当前的RTC时间 RTC_SET_TIME 设定当前的RTC时间 RTC_IRQP_READ 读取当前周期性中断的频率 RTC_IRQP_SET 设定当前周期性中断的频率  

2.3、/dev/rtc设备操作的要求

1)同时只能有一个进程打开/dev/rtc设备进行操作; 2)对RTCAlarm之后,不能关闭设备号,否则设置的Alarm无效,必须在Alarm中断到达之后关闭才有效       说明:上面是分析Qtopia得出的结论,如果有分析不清楚或是表达不得当的地方,请多多指教!