1 系統(tǒng)硬件設計
1.1 實時時鐘(RTC)模塊
S3C2440A集成了具有日歷功能的RTC模塊,它可以在系統(tǒng)關閉的情況下使用備用電池工作。RTC使用STRB/LDRB ARM操作傳輸二進制編碼的十進制數(shù)(BCD)的8位數(shù)據(jù)給CPU。數(shù)據(jù)包括年、月、日、星期、小時、分鐘、秒的時間信息。此外,RTC模塊還可以實現(xiàn)報警功能。RTC模塊采用32.768 kHz的外部晶體振蕩器,外部晶體振蕩器與S3C2440A的連接如圖1所示。XTIrtc和XTOrtc分別是RTC的32.768 kHz晶體振蕩器輸入和輸出,2個22 pF電容是晶體振蕩器的匹配電容,只有在外部所接電容為匹配電容的情況下,晶體振蕩器頻率才能保證在標稱頻率附近的誤差范圍內。
1.2 通用異步接收傳輸(UART)模塊
S3C2440A的UART提供了3個獨立的異步串行I/O端口,每個端口都可以在中斷模式或者DMA模式下操作。UART使用系統(tǒng)時鐘可以支持最高115.2 kb·s-1的速率。在對UART進行操作時,數(shù)據(jù)接收幀和發(fā)送幀的格式都是可編程的,它包含1個開始位,5~8個數(shù)據(jù)位,1個可選的奇偶位和1或2個停止位,這些都是通過線性控制器(ULCONn)設置。本文采用UART更改時間和設置報警時間,串口通信連接圖如圖2所示。
1.3 LCD顯示模塊
S3C2440A的LCD控制器的作用是將LCD圖像數(shù)據(jù)從系統(tǒng)存儲器中的視頻緩沖區(qū)傳送到外部LCD驅動器。LCD控制可以通過編程實現(xiàn)屏幕的不同要求,比如:水平和垂直像素的數(shù)量、接口時鐘、刷新率等。S3C2440A與WXCAT35液晶顯示屏模塊的連接電路如圖3所示。
圖中LCD控制器接口信號的意義:
VFRAME:LCD控制器與LCD驅動器之間的幀同步信號,它通知LCD屏新一幀的顯示,LCD控制器在一個完整幀的顯示后發(fā)出VFRAME信號,開始新一幀顯示。
VLINE:LCD控制器與LCD驅動器之間的同步脈沖信號,LCD驅動器通過它來將水平移位寄存器的內容顯示到LCD屏上。
VCLK:LCD控制器與LCD驅動器之間的像素時鐘信號。
VM:LCD驅動器所使用的交流信號。LCD驅動器使用VM信號改變用于打開或者關閉像素的行和列電壓的極性,從而控制像素點的顯示或熄滅。
VD0~VD23:LCD像素數(shù)據(jù)輸出端口。
2 軟件設計
2.1 讀寫RTC操作
S3C2440內部集成了RTC模塊,其內部的寄存器 BCDSEC,BCDMIN,BCDHOUR,BCDDAY,BCDDATE,BCDMON和BCDYEAR分別存儲了當前的秒,分,小時,星期,日,月和年,表示時間的數(shù)值都是BCD碼。這些寄存器的內容可讀可寫。在進行讀寫操作時,必須將RTC控制寄存器RTCCON的第0位置1 。實現(xiàn)讀寫功能的程序如下?! ?/p>
2.2 更改時間和設置報警時間
采用S3C2440A的UART,在PC機上實現(xiàn)對實時時鐘的更改和設置報警時間。其通訊協(xié)議為:當從PC機上發(fā)送0xaa時,分別將年、月、日、星期、小時、分和秒寫到實時時鐘數(shù)據(jù)寄存器中。當S3C2440A接收到數(shù)據(jù)后發(fā)送0xaa以示確認,調用前面的寫操作函數(shù),從而實現(xiàn)對實時時鐘的更改;當從PC機上發(fā)送0xbb時,分別將預置的報警時間ALMYEAR(年)、ALMMON(月)、ALMDATE(日)、ALMHOUR(小時)、ALMMIN(分)和ALMSEC(秒)寫到報警時間數(shù)據(jù)寄存器中,當S3C2440A接收到數(shù)據(jù)后發(fā)送0xbb以示確認,調用設置報警時間設置函數(shù),從而實現(xiàn)對報警時間的設置。通過設置報警控制寄存器RTCALM,即可實現(xiàn)報警,程序流程圖如圖4所示。
2.3 農(nóng)歷顯示設計
S3C2440的實時時鐘模塊沒有提供農(nóng)歷的時間信息,因此采用公歷轉農(nóng)歷的方式,實現(xiàn)對農(nóng)歷的顯示。公歷轉換為農(nóng)歷的算法是:首先建立公歷年對應的農(nóng)歷數(shù)據(jù),并將其存放入數(shù)組中,然后通過查表的方式實現(xiàn)公歷與農(nóng)歷的轉換。
建立公歷年對應的農(nóng)歷數(shù)據(jù),每年用3個字節(jié)表示。
公歷年對應的農(nóng)歷數(shù)據(jù)的第1 Byte的高4位表示農(nóng)歷閏年月份,低4位表示農(nóng)歷1~4月的大小,其具體含義如表1所示。第2 Byte表示農(nóng)歷5~12月的大小,其具體含義如表2所示。第3 Byte的最高位表示農(nóng)歷第13個月的大小,第7位和第6位表示春節(jié)所在的公歷月份,低5位表示春節(jié)所在的公歷日期,其具體含義如表3所示。
以2010年為例,農(nóng)歷無閏月,農(nóng)歷1月和3月是大月,2月和4月是小月,故而第1 Byte為00001010(即0x0A);農(nóng)歷的5月、8月、10月和12月是大月,6月、7月、9月和11月是小月,故而第2 Byte為10010101(即0x95);由于2010年的農(nóng)歷沒有閏月,所以也就沒有第13個月,故而第3Byte的第7位為0,2010年春節(jié)所在的公歷2月14日,故而第3 Byte的第6~0位為1001110,即第3 Byte為0x4E。
公歷轉農(nóng)歷的算法框圖如圖5所示。
2.4 實時時鐘的顯示
通過調用字符顯示函數(shù),將讀取的實時時鐘顯示在LCD屏幕上。本文將要顯示的實時時鐘字符轉換成字模,把所得的字模放在數(shù)組中,讀取實時時鐘寄存器,調用字符顯示函數(shù)顯示數(shù)字和漢字,從而將實時時鐘顯示在LCD屏幕上。最后顯示效果圖如圖6所示。
3 結束語
設計了基于Samsung公司ARM9處理器S3C2440和液晶顯示屏WXCAT35的帶農(nóng)歷實時時鐘顯示電路。為了能夠實現(xiàn)RTC的實時顯示,采用S3C2440A中提供的RTC時間節(jié)拍中斷,讓它每秒鐘中斷一次,每次中斷讀取時間,刷新一次實時時鐘。此外,在通過UART對RTC進行修改后,采用外部按鍵中斷實現(xiàn)對實時時鐘的更新,從而完成對時間的修改。設計通過軟件形式使得不帶農(nóng)歷實時時鐘芯片能夠實現(xiàn)對農(nóng)歷的顯示,增強了芯片的應用范圍,為在需要農(nóng)歷時鐘作為參考的工作環(huán)境提供了便利。