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電容是晶體振蕩器的匹配電容,,只有在外部所接電容為匹配電容的情況下,,晶體振蕩器頻率才能保證在標稱頻率附近的誤差范圍內(nèi)。
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驅動器通過它來將水平移位寄存器的內(nèi)容顯示到LCD屏上,。
VCLK:LCD控制器與LCD驅動器之間的像素時鐘信號,。
VM:LCD驅動器所使用的交流信號。LCD驅動器使用VM信號改變用于打開或者關閉像素的行和列電壓的極性,,從而控制像素點的顯示或熄滅,。
VD0~VD23:LCD像素數(shù)據(jù)輸出端口。
2 軟件設計
2.1 讀寫RTC操作
S3C2440內(nèi)部集成了RTC模塊,,其內(nèi)部的寄存器 BCDSEC,,BCDMIN,BCDHOUR,,BCDDAY,,BCDDATE,BCDMON和BCDYEAR分別存儲了當前的秒,,分,,小時,星期,,日,,月和年,表示時間的數(shù)值都是BCD碼。這些寄存器的內(nèi)容可讀可寫,。在進行讀寫操作時,,必須將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)境提供了便利,。