2024年4月28日发(作者:)
首先rtc是实时时钟,linux中他的作用主要有两个:
①、时间日期维持功能:
主要是由RTC实时时钟控制寄存器 RTCCON进行功能的使能控制,由节拍时间
计数寄存器TICNT来产生节拍时间中断来实现实时操作系统功能相关的时间和
实时同步。其中对时间日期的操作实际上是对BCD码操作,而BCD码则是由一
系列的寄存器组成(BCD秒寄存器BCDSEC、BCD分寄存器BCDMIN、BCD小
时寄存器 BCDHOUR、BCD日期寄存器BCDDATE、BCD日寄存器BCDDAY、
BCD月寄存器BCDMON、BCD年寄存器BCDYEAR)。
②、报警功能:
主要由RTC报警控制寄存器RTCALM进行功能使能控制,并产生报警中断。报
警时间日期的设置也是对一系列的寄存器进行操作(报警秒数据寄存器ALMSEC、
报警分钟数据寄存器ALMMIN、报警小时数据寄存器ALMHOUR、报警日期数
据寄存器ALMDATE、报警月数据寄存器 ALMMON、报警年数据寄存器
ALMYEAR)。
static struct resource s3c_rtc_resource[] = {
[0] = {
.start = S3C24XX_PA_RTC,
.end = S3C24XX_PA_RTC + 0xff,
.flags = IORESOURCE_MEM,
},
#if !defined (CONFIG_CPU_S3C6400) && !defined (CONFIG_CPU_S3C6410)
[1] = {
.start = IRQ_RTC,
.end = IRQ_RTC,
.flags = IORESOURCE_IRQ,
},
[2] = {
.start = IRQ_TICK,
.end = IRQ_TICK,
.flags = IORESOURCE_IRQ
}
#else
[1] = {
.start = IRQ_RTC_ALARM,
.end = IRQ_RTC_ALARM,
.flags = IORESOURCE_IRQ,
},
[2] = {
.start = IRQ_RTC_TIC,
.end = IRQ_RTC_TIC,
.flags = IORESOURCE_IRQ
}
#endif
};
struct platform_device s3c_device_rtc = {
.name = "s3c2410-rtc",
.id = -1,
.num_resources = ARRAY_SIZE(s3c_rtc_resource),
.resource = s3c_rtc_resource,
};
EXPORT_SYMBOL(s3c_device_rtc);
以上是相应的设备资源,他也是platform设备,在板子启动的时候注册到系统中。
下面是相应的设备驱动:
static struct platform_driver s3c2410_rtcdrv = {
.probe = s3c_rtc_probe,
.remove = s3c_rtc_remove,
.suspend = s3c_rtc_suspend,
.resume = s3c_rtc_resume,
.driver = {
.name = "s3c2410-rtc",
.owner = THIS_MODULE,
},
};
static char __initdata banner[] = "S3C24XX RTC, (c) 2004,2006 Simtec
Electronicsn";
static int __init s3c_rtc_init(void)
{
printk(banner);
MSG(INFO,("lzf-%s-%sn",__FUNCTION__,__FILE__));
return platform_driver_register(&s3c2410_rtcdrv);
}
static void __exit s3c_rtc_exit(void)
{
MSG(INFO,("lzf-%s-%sn",__FUNCTION__,__FILE__));
platform_driver_unregister(&s3c2410_rtcdrv);
}
module_init(s3c_rtc_init);
module_exit(s3c_rtc_exit);
MODULE_DESCRIPTION("Samsung S3C RTC Driver");


发布评论