1 系統(tǒng)硬件設(shè)計
1.1 實時時鐘(RTC)模塊
S3C2440A集成了具有日歷功能的RTC模塊,它可以在系統(tǒng)關(guān)閉的情況下使用備用電池工作,。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)設(shè)置。本文采用UART更改時間和設(shè)置報警時間,,串口通信連接圖如圖2所示,。
1.3 LCD顯示模塊
S3C2440A的LCD控制器的作用是將LCD圖像數(shù)據(jù)從系統(tǒng)存儲器中的視頻緩沖區(qū)傳送到外部LCD驅(qū)動器。LCD控制可以通過編程實現(xiàn)屏幕的不同要求,,比如:水平和垂直像素的數(shù)量,、接口時鐘、刷新率等,。S3C2440A與WXCAT35液晶顯示屏模塊的連接電路如圖3所示,。
圖中LCD控制器接口信號的意義:
VFRAME:LCD控制器與LCD驅(qū)動器之間的幀同步信號,它通知LCD屏新一幀的顯示,LCD控制器在一個完整幀的顯示后發(fā)出VFRAME信號,,開始新一幀顯示,。
VLINE:LCD控制器與LCD驅(qū)動器之間的同步脈沖信號,LCD驅(qū)動器通過它來將水平移位寄存器的內(nèi)容顯示到LCD屏上,。
VCLK:LCD控制器與LCD驅(qū)動器之間的像素時鐘信號,。
VM:LCD驅(qū)動器所使用的交流信號。LCD驅(qū)動器使用VM信號改變用于打開或者關(guān)閉像素的行和列電壓的極性,,從而控制像素點的顯示或熄滅,。
VD0~VD23:LCD像素數(shù)據(jù)輸出端口。
2 軟件設(shè)計
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)讀寫功能的程序如下,。
2.2 更改時間和設(shè)置報警時間
采用S3C2440A的UART,,在PC機上實現(xiàn)對實時時鐘的更改和設(shè)置報警時間,。其通訊協(xié)議為:當從PC機上發(fā)送0xaa時,分別將年,、月,、日、星期,、小時,、分和秒寫到實時時鐘數(shù)據(jù)寄存器中。當S3C2440A接收到數(shù)據(jù)后發(fā)送0xaa以示確認,,調(diào)用前面的寫操作函數(shù),,從而實現(xiàn)對實時時鐘的更改;當從PC機上發(fā)送0xbb時,分別將預置的報警時間ALMYEAR(年),、ALMMON(月),、ALMDATE(日)、ALMHOUR(小時),、ALMMIN(分)和ALMSEC(秒)寫到報警時間數(shù)據(jù)寄存器中,,當S3C2440A接收到數(shù)據(jù)后發(fā)送0xbb以示確認,調(diào)用設(shè)置報警時間設(shè)置函數(shù),,從而實現(xiàn)對報警時間的設(shè)置,。通過設(shè)置報警控制寄存器RTCALM,即可實現(xiàn)報警,,程序流程圖如圖4所示,。
2.3 農(nóng)歷顯示設(shè)計
S3C2440的實時時鐘模塊沒有提供農(nóng)歷的時間信息,因此采用公歷轉(zhuǎn)農(nóng)歷的方式,,實現(xiàn)對農(nóng)歷的顯示,。公歷轉(zhuǎn)換為農(nóng)歷的算法是:首先建立公歷年對應的農(nóng)歷數(shù)據(jù),并將其存放入數(shù)組中,,然后通過查表的方式實現(xiàn)公歷與農(nóng)歷的轉(zhuǎn)換,。
建立公歷年對應的農(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,。
公歷轉(zhuǎn)農(nóng)歷的算法框圖如圖5所示,。
2.4 實時時鐘的顯示
通過調(diào)用字符顯示函數(shù),將讀取的實時時鐘顯示在LCD屏幕上,。本文將要顯示的實時時鐘字符轉(zhuǎn)換成字模,,把所得的字模放在數(shù)組中,讀取實時時鐘寄存器,,調(diào)用字符顯示函數(shù)顯示數(shù)字和漢字,,從而將實時時鐘顯示在LCD屏幕上。最后顯示效果圖如圖6所示,。
3 結(jié)束語
設(shè)計了基于Samsung公司ARM9處理器S3C2440和液晶顯示屏WXCAT35的帶農(nóng)歷實時時鐘顯示電路,。為了能夠?qū)崿F(xiàn)RTC的實時顯示,采用S3C2440A中提供的RTC時間節(jié)拍中斷,,讓它每秒鐘中斷一次,,每次中斷讀取時間,刷新一次實時時鐘,。此外,,在通過UART對RTC進行修改后,采用外部按鍵中斷實現(xiàn)對實時時鐘的更新,,從而完成對時間的修改,。設(shè)計通過軟件形式使得不帶農(nóng)歷實時時鐘芯片能夠?qū)崿F(xiàn)對農(nóng)歷的顯示,增強了芯片的應用范圍,,為在需要農(nóng)歷時鐘作為參考的工作環(huán)境提供了便利,。