ARM嵌入式系统软件实时时钟的设计
1 引言
现在的许多设备对实时时钟都有很高的要求,在片集成的实时时钟往往只注意到了其使用的方便,而没有考虑在实际应用中还有很多特殊的要求。本文讨论如何使用独立的外扩实时时钟,来满足这些要求。
什么是实时系统?就是系统运行时的反馈信息或者指令,必须在要求的时间内发出或者返回,否则视为无效。例如,数据采集的时候,必须在对应的时间内得到信号,以保证数据采集的有效性。那么什么是实时时钟?就是采用独立的晶振(或集成),拥有独立供电系统,永不间断的运行,从而给系统提供可靠的系统时间。
集成的实时时钟和独立实时时钟的比较:
以博创UP-NETARM3000开发板为例,它使用的是三星公司生产的S3C44B0XARM7处理器,该处理器内部集成了一个实时时钟,其中的2个中断源INT_RTC和INT_ADC中断源在26个中断源中优先级最低。RTC的电压要求2.5V或3V,但是不支持3.3V。也就是说开发板上的实时时钟不能脱离开发板独立地运行,同时中断级别低,电压范围窄,精度不可调,不具备通用性。而外扩的独立实时时钟电压范围宽,使用I2C总线,中断级别高,同时独立于开发板运行,通用性好。特别是精度是可以矫正调节的,这对实时性来说精度是很重要的指标。
2 ARM处理器
ARM(Advanced RISC Machines)是一类微处理器的通称[1]。1991年ARM公司成立于英国剑桥,主要出售芯片设计技术的授权。ARM现在已遍及工业控制,消费类电子产品,通信系统,网络系统,无线系统等各类产品市场,基于ARM技术的微处理器应用占据了32位RISC微处理器75%以上的市场比例,ARM 技术正在逐步渗入到我们生活的各个方面。
3 PCF8563
PCF8563是PHILIPS公司生产的低功耗CMOS实时时钟/日历芯片, 芯片最大总线速度为400kbits/s,每次读写数据后,其内嵌的字地址寄存器会自动产生增量。PCF8563可广泛应用于移动电话、便携仪器、传真机、电池电源等产品中。PCF8563有16个8位寄存器,其中包括:可自动增量的地址寄存器、内置32.768kHz的振荡器(带有一个内部集成电容)、分频器(用于给实时时钟RTC提供源时钟)、可编程时钟输出、定时器、报警器、掉电检测器和400kHz的I2C总线接口。所有16个寄存器设计成可寻址的8位并行寄存器,但不是所有位都有用。当一个RTC寄存器被读时,所有计数器的内容将被锁存,因此,在传送条件下,可以禁止对时钟/日历芯片的错读。同时它还拥有PHILIPS的优良品质,在3V电压,25摄氏度下,功耗为250nA,非常低。本文选用PCF8563来外扩实时时钟,其硬件连接示意图如图1所示:
图1 PCF8563与S3C44B0X的连接图
4 I2C总线
在现代电子系统中,有为数众多的IC需要进行相互之间以及与外界的通信。为了提供硬件的效率和简化电路的设计,PHILIPS开发了一种用于内部IC控制的简单的双向两线串行总线I2C(Inter IC总线)。I2C总线支持任何一种IC制造工艺。作为一个专利的控制总线,I2C已经成为世界性的工业标准[2]。
5 uclinux系统[3]
uClinux是微控制器领域中的Linux系统。它通常用于具有很少内存或Flash的嵌入式操作系统。在GNU通用许可证的保证下,运行micro;Clinux操作系统的用户可以使用几乎所有的Linux API函数。它具有体积小、稳定、良好的移植性、优秀的网络功能、完备的对各种文件系统的支持,以及丰富的API函数等优点。uClinux除了不能实现fork()外,其余uClinux的API函数与标准Linux完全相同。
①.uClinux的内核加载方式
uClinux的内核有两种可选的运行方式:可以在flash上直接运行,也可以加载到内存中运行。Flash运行方式:把内核的可执行映象烧写到flash上,系统启动时从flash的某个地址开始逐句执行。内核加载方式:把内核的压缩文件存放在flash上,系统启动时读取压缩文件在内存里解压,然后开始执行。
②.uclinux的根(root)文件系统
uClinux系统采用romfs文件系统,这种文件系统相对于一般的ext2文件系统要求更少的空间。内核支持romfs文件系统比支持ext2文件系统需要更少的代码,romfs文件系统相对简单,建立文件系统超级块(superblock)需要更少的存储空间。romfs文件系统不支持动态擦写保存,对于系统需要动态保存的数据采用虚拟ram盘的方法进行处理(ram盘将采用ext2文件系统)。
6 uclinux在S3C44B0X上的移植[4]
BootLoader引导程序是嵌入式开发很重要的组成部分。它是CPU 加电后第一个开始运行的代码,由它最终将操作系统启动起来并将控制权交给操作系统内核。BLOB(Boot Loader OBject)最初是由Jan-Derk Bakker和Erik Mouw为LART而写的引导代码,由于其良好的移植性和强大的功能被移植到了很多其它机器上。BLOB遵守GNU GPL licence。BLOB功能比较强大,它可以:
①.. 初始化诸如CPU的主频、SDRAM的控制管理、中断、串行口等硬件;
②.. 启动Linux内核并提供一个RAMDISK;
③.. 通过串口下载内核或者RAMDISK到板卡上;
④.. 可以将修改过的新的内核或者RAMDISK写到Flash上;
⑤.. 可以重新自由设定存储中不同的布局;
⑥.. 可以提供一个命令行接口给用户。
Blob常用的命令有:blob、boot、xdownload、flashreload、dump、reblob、status、flash等。xdownload命令用于下载内核和根文件系统到内存中,flash命令用来把它们烧到flash中。
在PC机上建立起uclinux的编译环境,在终端中运行博创开发板自带光盘上的install.sh文件,它将在你的PC机上安装交叉编译环境和一个在44B0X上运行uclinux-2.4.x文件夹和许多有用的文件夹。建立交叉编译环境也可以通过下在通用的gcc编译器来实现,它是一个.sh文件,其运行方法在后面有介绍。实际上就是建立uclinux的库文件的过程。开源的好处就在于这一切都是透明的,不需要你去配置,只要会安装就可以了。
通过串口烧写uclinux内核和根文件系统,这在Windows下使用超级终端。Linux下使用minicom。基本设置是波特率115200,8个数据位,无奇偶校验,停止位1,无数据流控制。
同时要在PC机上建立NFS文件共享服务,本文的共享目录是/root/nfs。进入服务器配置选项,里面有NFS,网络服务器配置等。配置过程时建立要选择共享的目录和访问的IP段。
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于ARM体系的嵌入式系统BSP的程序设计方案(04-11)
- 在Ubuntu上建立Arm Linux 开发环境(04-23)
- 达芬奇数字媒体片上系统的架构和Linux启动过程(06-02)
- SQLite嵌入式数据库系统的研究与实现(02-20)
- 革新2410D开发板试用手记(04-21)