ARM嵌入式系統(tǒng)軟件實時時鐘的設計
1 引言
現(xiàn)在的許多設備對實時時鐘都有很高的要求,在片集成的實時時鐘往往只注意到了其使用的方便,而沒有考慮在實際應用中還有很多特殊的要求。本文討論如何使用獨立的外擴實時時鐘,來滿足這些要求。
什么是實時系統(tǒng)?就是系統(tǒng)運行時的反饋信息或者指令,必須在要求的時間內發(fā)出或者返回,否則視為無效。例如,數(shù)據(jù)采集的時候,必須在對應的時間內得到信號,以保證數(shù)據(jù)采集的有效性。那么什么是實時時鐘?就是采用獨立的晶振(或集成),擁有獨立供電系統(tǒng),永不間斷的運行,從而給系統(tǒng)提供可靠的系統(tǒng)時間。
集成的實時時鐘和獨立實時時鐘的比較:
以博創(chuàng)UP-NETARM3000開發(fā)板為例,它使用的是三星公司生產的S3C44B0XARM7處理器,該處理器內部集成了一個實時時鐘,其中的2個中斷源INT_RTC和INT_ADC中斷源在26個中斷源中優(yōu)先級最低。RTC的電壓要求2.5V或3V,但是不支持3.3V。也就是說開發(fā)板上的實時時鐘不能脫離開發(fā)板獨立地運行,同時中斷級別低,電壓范圍窄,精度不可調,不具備通用性。而外擴的獨立實時時鐘電壓范圍寬,使用I2C總線,中斷級別高,同時獨立于開發(fā)板運行,通用性好。特別是精度是可以矯正調節(jié)的,這對實時性來說精度是很重要的指標。
2 ARM處理器
ARM(Advanced RISC Machines)是一類微處理器的通稱[1]。1991年ARM公司成立于英國劍橋,主要出售芯片設計技術的授權。ARM現(xiàn)在已遍及工業(yè)控制,消費類電子產品,通信系統(tǒng),網絡系統(tǒng),無線系統(tǒng)等各類產品市場,基于ARM技術的微處理器應用占據(jù)了32位RISC微處理器75%以上的市場比例,ARM 技術正在逐步滲入到我們生活的各個方面。
3 PCF8563
PCF8563是PHILIPS公司生產的低功耗CMOS實時時鐘/日歷芯片, 芯片最大總線速度為400kbits/s,每次讀寫數(shù)據(jù)后,其內嵌的字地址寄存器會自動產生增量。PCF8563可廣泛應用于移動電話、便攜儀器、傳真機、電池電源等產品中。PCF8563有16個8位寄存器,其中包括:可自動增量的地址寄存器、內置32.768kHz的振蕩器(帶有一個內部集成電容)、分頻器(用于給實時時鐘RTC提供源時鐘)、可編程時鐘輸出、定時器、報警器、掉電檢測器和400kHz的I2C總線接口。所有16個寄存器設計成可尋址的8位并行寄存器,但不是所有位都有用。當一個RTC寄存器被讀時,所有計數(shù)器的內容將被鎖存,因此,在傳送條件下,可以禁止對時鐘/日歷芯片的錯讀。同時它還擁有PHILIPS的優(yōu)良品質,在3V電壓,25攝氏度下,功耗為250nA,非常低。本文選用PCF8563來外擴實時時鐘,其硬件連接示意圖如圖1所示:
圖1 PCF8563與S3C44B0X的連接圖
4 I2C總線
在現(xiàn)代電子系統(tǒng)中,有為數(shù)眾多的IC需要進行相互之間以及與外界的通信。為了提供硬件的效率和簡化電路的設計,PHILIPS開發(fā)了一種用于內部IC控制的簡單的雙向兩線串行總線I2C(Inter IC總線)。I2C總線支持任何一種IC制造工藝。作為一個專利的控制總線,I2C已經成為世界性的工業(yè)標準[2]。
5 uclinux系統(tǒng)[3]
uClinux是微控制器領域中的Linux系統(tǒng)。它通常用于具有很少內存或Flash的嵌入式操作系統(tǒng)。在GNU通用許可證的保證下,運行micro;Clinux操作系統(tǒng)的用戶可以使用幾乎所有的Linux API函數(shù)。它具有體積小、穩(wěn)定、良好的移植性、優(yōu)秀的網絡功能、完備的對各種文件系統(tǒng)的支持,以及豐富的API函數(shù)等優(yōu)點。uClinux除了不能實現(xiàn)fork()外,其余uClinux的API函數(shù)與標準Linux完全相同。
①.uClinux的內核加載方式
uClinux的內核有兩種可選的運行方式:可以在flash上直接運行,也可以加載到內存中運行。Flash運行方式:把內核的可執(zhí)行映象燒寫到flash上,系統(tǒng)啟動時從flash的某個地址開始逐句執(zhí)行。內核加載方式:把內核的壓縮文件存放在flash上,系統(tǒng)啟動時讀取壓縮文件在內存里解壓,然后開始執(zhí)行。
②.uclinux的根(root)文件系統(tǒng)
uClinux系統(tǒng)采用romfs文件系統(tǒng),這種文件系統(tǒng)相對于一般的ext2文件系統(tǒng)要求更少的空間。內核支持romfs文件系統(tǒng)比支持ext2文件系統(tǒng)需要更少的代碼,romfs文件系統(tǒng)相對簡單,建立文件系統(tǒng)超級塊(superblock)需要更少的存儲空間。romfs文件系統(tǒng)不支持動態(tài)擦寫保存,對于系統(tǒng)需要動態(tài)保存的數(shù)據(jù)采用虛擬ram盤的方法進行處理(ram盤將采用ext2文件系統(tǒng))。
6 uclinux在S3C44B0X上的移植[4]
BootLoader引導程序是嵌入式開發(fā)很重要的組成部分。它是CPU 加電后第一個開始運行的代碼,由它最終將操作系統(tǒng)啟動起來并將控制權交給操作系統(tǒng)內核。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命令用于下載內核和根文件系統(tǒng)到內存中,flash命令用來把它們燒到flash中。
評論