Linux操作系统内核对RTC的编程详解 (2)

Linux内核仅使用RTC芯片的时间与日期寄存器组和控制寄存器组,地址为0x00~0x09之间的10个时间与日期寄存器的定义如下

7.2.2 对RTC寄存器的定义

Linux在include/Linux/mc146818RTC.h这个头文件中定义了RTC各寄存器的含义。

(1)寄存器内部地址索引的定义

Linux内核仅使用RTC芯片的时间与日期寄存器组和控制寄存器组,地址为0x00~0x09之间的10个时间与日期寄存器的定义如下:

#define RTC_SECONDS 0 
#define RTC_SECONDS_ALARM 1 
#define RTC_MINUTES 2 
#define RTC_MINUTES_ALARM 3 
#define RTC_HOURS 4 
#define RTC_HOURS_ALARM 5 
/* RTC_*_alarm is always true if 2 MSBs are set */ 
# define RTC_ALARM_DONT_CARE 0xC0 

#define RTC_DAY_OF_WEEK 6 
#define RTC_DAY_OF_MONTH 7 
#define RTC_MONTH 8 
#define RTC_YEAR 9

四个控制寄存器的地址定义如下:

#define RTC_REG_A 10 
#define RTC_REG_B 11 
#define RTC_REG_C 12 
#define RTC_REG_D 13

(2)各控制寄存器的状态位的详细定义

控制寄存器A(0x0A)主要用于选择RTC芯片的工作频率,因此也称为RTC频率选择寄存器。因此Linux用一个宏别名RTC_FREQ_SELECT来表示控制寄存器A,如下:

#define RTC_FREQ_SELECT RTC_REG_A

RTC频率寄存器中的位被分为三组:①bit[7]表示UIP标志;②bit[6:4]用于除法器的频率选择;③bit[3:0]用于速率选择。它们的定义如下:

# define RTC_UIP 0x80 
# define RTC_DIV_CTL 0x70 
/* Periodic intr. / Square wave rate select. 0=none, 1=32.8kHz,... 15=2Hz */ 
# define RTC_RATE_SELECT 0x0F

正如7.1.1.1节所介绍的那样,bit[6:4]有5中可能的取值,分别为除法器选择不同的工作频率或用于重置除法器,各种可能的取值如下定义所示:

/* divider control: refclock values 4.194 / 1.049 MHz / 32.768 kHz */ 
# define RTC_REF_CLCK_4MHZ 0x00 
# define RTC_REF_CLCK_1MHZ 0x10 
# define RTC_REF_CLCK_32KHZ 0x20 
/* 2 values for divider stage reset, others for "testing purposes only" */ 
# define RTC_DIV_RESET1 0x60 
# define RTC_DIV_RESET2 0x70

寄存器B中的各位用于使能/禁止RTC的各种特性,因此控制寄存器B(0x0B)也称为“控制寄存器”,Linux用宏别名RTC_CONTROL来表示控制寄存器B,它与其中的各标志位的定义如下所示:

#define RTC_CONTROL RTC_REG_B 
# define RTC_SET 0x80 /* disable updates for clock setting */ 
# define RTC_PIE 0x40 /* periodic interrupt enable */ 
# define RTC_AIE 0x20 /* alarm interrupt enable */ 
# define RTC_UIE 0x10 /* update-finished interrupt enable */ 
# define RTC_SQWE 0x08 /* enable square-wave output */ 
# define RTC_DM_BINARY 0x04 /* all time/date values are BCD if clear */ 
# define RTC_24H 0x02 /* 24 hour mode - else hours bit 7 means pm */ 
# define RTC_DST_EN 0x01 /* auto switch DST - works f. USA only */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值