FL2440驱动添加(2): RTC(Real time clock)

发布者:huanxin最新更新时间:2024-07-24 来源: elecfans关键字:FL2440  RTC 手机看文章 扫描二维码
随时随地手机看文章

一,Linux下的时间分为两种,系统时间与硬件时间(RTC芯片):

1,系统时间就是运行系统能够直接看到的时间;

2,硬件时间就是RTC芯片中的时间,断电任然有电池供电;

 linux系统开机时,会从RTC中读取当前时间,作为系统时间,从此以后系统时间独立tick。意味着,如果你用date命令修改了系统时间,硬件时间是不受影响的,如果此时关机,下次的系统时间还是不对。要想将系统时间保存到硬件时间,可以是用 hwclock 或者clock命令,hwclock就是hardware clock的意思。



因为我的开发板不支持clock命令,所以只讲解hwclock命令:


: hwclock --help
BusyBox v1.20.2 (2014-07-26 20:22:32 CST) multi-call binary.

Usage: hwclock [-r|--show] [-s|--hctosys] [-w|--systohc] [-t|--systz] [-l|--localtime] [-u|--utc] [-f|--rtc FILE]

Query and set hardware clock (RTC)


        -r      Show hardware clock time
        -s      Set system time from hardware clock
        -w      Set hardware clock from system time
        -t      Set in-kernel timezone, correct system time
                if hardware clock is in local time
        -u      Assume hardware clock is kept in UTC
        -l      Assume hardware clock is kept in local time
        -f FILE Use specified device (e.g. /dev/rtc2)




hwclock  –r        show,显示硬件时钟,等价于不加参数的hwclock。
hwclock –s        hctosys,hardware clock to system,将“硬件时钟”RTC的时间写到Linux“系统”时钟里。
hwclock –w        systohc,system to hardware clock,将“系统”时钟写到“硬件时钟”RTC里面


二,内核添加支持RTC(内核linux-3.8)

1,RTC在内核已经有很好的支持,只需要添加内核编译,注册添加即可:

修改arch/arm/mach-s3c24xx/mach-smdk2440.c,添加(添加RTC设备即可,红字体):

static struct platform_device *smdk2440_devices[] __initdata = {
    &s3c_device_ohci,
    &s3c_device_lcd,
    &s3c_device_wdt,
    &s3c_device_i2c0,
    &s3c_device_iis,
    &s3c_device_dm9000,
    &s3c_device_adc,
    &s3c_device_ts,
    &s3c_device_rtc,
};


在arch/arm/plat-samsung/devs.c有s3c_device_rtc定义:

#ifdef CONFIG_PLAT_S3C24XX
static struct resource s3c_rtc_resource[] = {
    [0] = DEFINE_RES_MEM(S3C24XX_PA_RTC, SZ_256),
    [1] = DEFINE_RES_IRQ(IRQ_RTC),
    [2] = DEFINE_RES_IRQ(IRQ_TICK),
};  
    
struct platform_device s3c_device_rtc = {
    .name       = 's3c2410-rtc',
    .id     = -1,
    .num_resources  = ARRAY_SIZE(s3c_rtc_resource),
    .resource   = s3c_rtc_resource,
};  
#endif /* CONFIG_PLAT_S3C24XX */


2,make menuconfig添加配置选项:


DeviceDrivers  --->   

[*] Real Time Clock  ---> 

--- Real Time Clock

[*]  Set system time from RTC on startup and resume

(rtc0)  RTC usedto set the system time

[*]   /sys/class/rtc/rtcN (sysfs)  

[*]   /proc/driver/rtc (procfs for rtcN)

[*]   /dev/rtcN(character devices)


Linux的RTC驱动实现之后,一般是默认的是一个普通的字符型设备,或者一个misc设备,也可以是一个平台设备。如果insmod驱动后或者直接编译进入内核,对应的设备文件一般是/dev/rtc或/dev/rtc0或者 /dev/misc/rtc。而在linux-3.8内核里,制作根文件系统工具busybox-1.20.2,包含hwclock命令定义:



在busybox-1.20.2的libbb/rtc.c有:

 int FAST_FUNCrtc_xopen(const char **default_rtc, int flags)

{

    int rtc;

 

    if(!*default_rtc) {

       *default_rtc = '/dev/rtc';

        rtc =open(*default_rtc, flags);

        if (rtc>= 0)

           return rtc;

        *default_rtc ='/dev/rtc0';

        rtc = open(*default_rtc, flags);

        if (rtc >= 0)

            return rtc;

       *default_rtc = '/dev/misc/rtc';

    }

    returnxopen(*default_rtc, flags);

}


3,编译下载启动:红色字体表示RTC添加ok


[ s3c2440@zhou]# boot

NAND read: device 0 offset 0x100000, size 0x800000

 8388608 bytesread: OK

## Booting kernel from Legacy Image at 30008000 ...

   ImageName:   Linux Kernel

   Created:      2014-08-13   7:55:08 UTC

   ImageType:   ARM Linux Kernel Image(uncompressed)

   DataSize:    3115480 Bytes = 3 MiB

   Load Address:30008000

   EntryPoint:  30008040

   VerifyingChecksum ... OK

   XIP KernelImage ... OK

OK

OS entry point: 30008040

Image entry point=30008040

 

Starting kernel ...

 

NAND device: Manufacturer ID: 0xec, Chip ID: 0xda(Samsung NAND 256MiB 3,3V 8-bit), 256MiB, page size: 2048, OOB size: 64

Scanning device for bad blocks

Bad eraseblock 236 at 0x000001d80000

Bad eraseblock 704 at 0x000005800000

Bad eraseblock 705 at 0x000005820000

Bad eraseblock 717 at 0x0000059a0000

Bad eraseblock 1251 at 0x000009c60000

Bad eraseblock 1631 at 0x00000cbe0000

Bad eraseblock 1771 at 0x00000dd60000

Bad eraseblock 1947 at 0x00000f360000

Creating 9 MTD partitions on 'NAND':

0x000000000000-0x000000100000 : 'mtdblock0_u-Boot1MB '

0x000000100000-0x000001000000 : 'mtdbolck1_kernel15MB'

0x000001000000-0x000002400000 :'mtdbolck2_ramdisk 20MB'

0x000002400000-0x000003800000 : 'mtdblock3_cramfs20MB'

0x000003800000-0x000006000000 : 'mtdblock4_jffs240MB'

0x000006000000-0x000008800000 : 'mtdblock5_yaffs240MB'

0x000008800000-0x00000b000000 : 'mtdblock6_ubifs40MB'

0x00000b000000-0x00000d800000 : 'mtdblock7_apps40MB'

0x00000d800000-0x000010000000 : 'mtdblock8_data40MB'

。。。。。

usbserial: USB Serial support registered for pl2303

mousedev: PS/2 mouse device common for all mice

s3c-rtc s3c2410-rtc: rtc disabled, re-enabling

s3c-rtc s3c2410-rtc: rtc core: registered s3c as rtc0

sdhci: Secure Digital Host Controller Interface driver

sdhci: Copyright(c) Pierre Ossman

。。。。。

UBI: background thread 'ubi_bgt0d' started,PID 472

s3c-rtc s3c2410-rtc: setting system clock to 2024-04-2611:18:22 UTC (1714130302)

ALSA device list:

。。。。。

Freeing init memory: 156K

usb 1-1: New USB device found, idVendor=05e3,idProduct=0606

usb 1-1: New USB device strings: Mfr=1, Product=2,SerialNumber=0

usb 1-1: Product: USB Hub 2.0

hub 1-1:1.0: USB hub found

hub 1-1:1.0: 4 ports detected

dm9000 dm9000 eth0: link down dm9000 dm9000 eth0: linkup, 100Mbps, full-duplex, lpa 0xCDE1

 

Copyright (C) 2014zhouguangfeng

root for passwd: 12345

 

root login: root

Password:


: ls

apps    data     etc      init    linuxrc  my2440   root     sys     usr

bin     dev      info     lib     mnt      proc     sbin    tmp      var

: date                                            //显示当前系统时间

Wed Jan  1 01:04:08 MST 2014

: date -s 2014.8.13-17:51:10    //设置当前系统时间
Wed Aug 13 17:51:10 MDT 2014

: hwclock -r                               //显示当前RTC时间,与系统时间不同
Wed Jan  1 01:05:08 2014  0.000000 seconds
: hwclock -s                               //将RTC时间设置为当前系统时间
: date 
Wed Jan  1 01:05:26 MST 2014
: date -s 2014.8.13-17:51:10   //在设置当前系统时间
Wed Aug 13 17:51:10 MDT 2014
: hwclock -r                              //显示当前RTC时间
Wed Jan  1 01:05:59 2014  0.000000 seconds
: hwclock -w                             //将系统时间写入RTC
: hwclock -r
Wed Aug 13 17:51:25 2014  0.000000 seconds
: ll /dev/rtc0                              // 系统创建设施文件,驱动RTC

crw-rw----    1 root     root      254,   0 Dec 31  1969 /dev/rtc0


关键字:FL2440  RTC 引用地址:FL2440驱动添加(2): RTC(Real time clock)

上一篇:内核移植和文件系统制作(3)Ramdisk简介和常见问题
下一篇:模块在insmod之后无法rmmod问题

推荐阅读最新更新时间:2024-11-12 10:54

【STM32】RTC实时时钟概述、寄存器、库函数(RTC一般步骤)
STM32F1xx官方资料: 《STM32中文参考手册V10》-第16章 实时时钟(RTC) RTC实时时钟 RTC实时时钟简介 实时时钟是一个独立的定时器。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。 RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒后,RTC的设置和时间维持不变。 BKP备份寄存器简介 备份寄存器是42个16位的寄存器,可用来存储84个字节的用户应用程序数据。他们处在备份域里,当Vdd电源被切断,他们仍然由Vbat维持供电。当系统在待机模式下被唤醒,或系统复位或电源复位时,他们
[单片机]
【STM32】<font color='red'>RTC</font>实时时钟概述、寄存器、库函数(<font color='red'>RTC</font>一般步骤)
IMX6ULL裸机-1-RTC定时器
1 引入RTC定时器 RTC定时器被叫做实时时钟(real time clock)。 CPU内部有很多定时器,像看门狗WDT,PWM定时器,高精度定时器Timer等等, 只在“启动”即“通电时”运行,断电时停止。当然,如果时钟不能连续跟踪时间,则必须手动设置。那么当关机后就没办法自动计数统计时间了。 定时器的本质就是计数器,有向上计数,也有向下计数。RTC有一个与主机单独分离的电源,如纽扣电池(备用电池),即使主机电源关闭,它也保持计数定时功能。这也是为什么我们手机关机后时间还能保持准确。再比如以前的老诺基亚手机,拆掉电池就时间不准了,因为rtc电源被切断了,无法在计数,RTC定时器的计数器会被清0,需要手动设置当前时间。 RTC
[单片机]
STM32的RTC配置和起振问题
RTC配置: 1.打开电源管理和备份寄存器时钟。这个在RCC配置中打开。 RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); 2.使能RTC和备份寄存器的访问(复位默认关闭)。 PWR_BackupAccessCmd(ENABLE); 3.检查电池是否断电过(是否RTC初始化过),通过的话直接跳到第4步。 if (BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5) { A. BKP_DeInit();//BKP寄存器全部设为缺省值 B. RCC_LSEConfig(RCC_LS
[单片机]
STM32CubeMX配置RTC——基于(STM32G070+STM32CubeMX+HAL库+RTC
实验目的: 通过STM32CubeMX进行简单配置生成HAL库实现内部晶振RTC。 一、STM32CubeMX配置如下: 1.时钟树配置: 因为板子没有外部RTC晶振,所以只能使用内部32KHz晶振,时钟树配置如下: 2.RTC配置: (1)关于Asynchronous Predivider value 和 Synchronous Predivider value填写多少,请看下面: 因为内部晶振是32KHz,所以毫无疑问应该选择LSI=32KHz即: Asynchronous Predivider value :127 Synchronous Predivider value :249 (2)关于Hou
[单片机]
STM32CubeMX配置<font color='red'>RTC</font>——基于(STM32G070+STM32CubeMX+HAL库+<font color='red'>RTC</font>)
Diodes推出全新低功率实时时钟 (RTC)
Diodes 公司 宣布热门的低功率实时时钟 (RTC),符合汽车规格版本的 PT7C4363BQ 及 PT7C4563BQ (附可调整定时器) 开始供应。这些产品温度范围宽广,适用于汽车产品应用,包括信息娱乐系统、仪表板显示器及车载资通讯终端产品 (T-Box)。 PT7C4363BQ 及 PT7C4563BQ 符合 AEC-Q100 Grade 1 等级规范,温度范围为 -40°C 至 +125°C,通过 PPAP,且以 IATF16949 标准认证的生产设施制造。操作电压范围 1.3V 至 5.5V 十分宽广,增添设计弹性,且备用电流低,在 3.0V 之下仅 400nA,因此这些装置的功耗极低。 这些零件的设计
[汽车电子]
Diodes推出全新低功率实时时钟 (<font color='red'>RTC</font>)
LPC1768 -- RTC实时时钟
RTC是当下设备中比较普遍的一个部件,很多设备都需要查看时间。RTC实时时钟已经在很多的单片机中集成,以前还要专门的时钟芯片,现在Cortex-M3内核都包括了这个部件了。和以前NXP的ARM7内核不同的是,LPC1768的时钟源只有32K时钟源提供,这一点是要注意的,其他和ARM7一致。 RTC其实也就是一个定时,可以理解为秒定时器,RTC寄存器挺多的,不过寄存器结构相对简单,操作起来还是很方便的。 讲解几个重要的寄存器,中断位置寄存器ILR、时钟控制寄存器CCR、计数器增量中断寄存器CIIR、报警屏蔽寄存器AMR 第一个ILR中断位置寄存器 BIT0,当为1时计数器增量模块产生中断。 BIT1,当为1是报警寄存器产生中断
[单片机]
LPC1768 -- <font color='red'>RTC</font>实时时钟
mini2440裸机试炼之—RTC闹钟中断,节拍中断
环境搭建 硬件环境:J-link v8、mini2440、J-link转接板、串口转USB线 软件环境:windows7(32位)、开发板uboot(NandFlash)、J-link驱动(J-Link ARM V4.10i)、SecureCRT、ADS1.2 其中ADS里的AXD设置:加载JlinkRDI.dll+Options- Configure Interface...,在Session File一页中选择“Run Configuration Script”,将该name.txt文本文件作为一个脚本加进来,确定。 name.txt内容 Setmem 0x53000000 0x00000000 3
[单片机]
mini2440裸机试炼之—<font color='red'>RTC</font>闹钟中断,节拍中断
STM32学习笔记之RTC(实时时钟)和BKP(备份寄存器)
RTC: RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,系统复位或从待机模式唤醒后,RTC的设置和时间维持不变。 RCC_BDCR:备份域控制寄存器。其LSEON、LSEBYP、RTCSEL和RTCEN位处于备份域,在复位后处于写保护状态,只有在电源控制寄存器(PWR_CR)中的DBP位置 1 后才能对这些位进行改动;这些位只能由备份域复位清除。 备份域复位:软件复位,RCC_BDCR 寄存器 BDRST位置1产生; 在VDD和VBAT两者掉电的前提下,VDD或VBAT上电将引发备份区域复位。 系统复位后,对后备寄存器和RTC的访问被禁止,执行以下操作将使能对后备寄存器和RTC的访
[单片机]
STM32学习笔记之<font color='red'>RTC</font>(实时时钟)和BKP(备份寄存器)
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved