DS1337串列實時時鐘晶片是一種低功耗、全部採用BCD碼的時鐘日曆晶片,它帶有兩個可程式的定時鬧鐘和一個可程式的方波輸出。
基本介紹
- 外文名:DS1337
- 類別:時鐘日曆晶片
- 優點:低功耗
- 套用:POS終端機
引言,引腳功能,地址分配,時鐘日曆,鬧鐘,驅動程式,結束語,
引言
DS1337串列實時時鐘晶片是一種低功耗、全部採用BCD碼的時鐘日曆晶片,它帶有兩個可程式的定時鬧鐘和一個可程式的方波輸出。其地址和數據可通過I2C匯流排串列傳輸,能提供秒、分、時、日、星期、月和年等信息。在月末天數小於31天的情況下,它也能自動調整月份,包括對閏年的校正。時鐘可以以24小時模式工作也可以以12小時模式工作。晶片的工業溫度範圍為-40~+85攝氏度,提供有8引腳的DIP和SOIC封裝。
DS1337實時時鐘晶片
引腳功能
DS1337的引腳排列示意圖如圖1所示。各引腳的功能如下:
VCC,GND:直流電源和接地端,VCC的輸入範圍在1.8~5.5V之間。X1,X2:標準的32.768kHz的石英晶振接入端,內部晶振電路設計要求晶振特定電容負載為6pF。另外,這兩個引腳還可以有其它接法,即:X1腳連線外部振盪信號源,而將X2腳懸空。
圖1
圖1 DS1337引腳示意圖
SCL:串列時鐘輸入,用來在匯流排上同步數據傳輸。
地址分配
DS1337的內部暫存器地址分配方式如圖2所示。在多位元組存取過程中,當地址指針到達0FH,即暫存器空間的最後一個單元時,下一個操作地址將翻卷到00H。在I2C匯流排的開始、停止、或在地址指針增加到00H位置時,當前時間會傳送給一組二級暫存器,在這期間,時鐘照常運轉。這樣就不必在讀取當前時間期間,在主暫存器更新的情況下再次讀取主暫存器中的數據,從而防止發生錯誤。
時鐘日曆
讀取適當的暫存器可以獲得正確的時間和日曆信息。實時時鐘暫存器的地址如表1所列。設定和初始化時間和日曆可通過寫相應的暫存器欄位來實現,暫存器的數據格式以BCD碼錶示。對於不符合邏輯的時間和日期格式數據,寫入時都會導致未定義的操作。
DS1337既可以工作在12小時模式下,也可以工作在24小時模式下。小時暫存器的位6被定義為12小時模式或24小時模式選擇位,該位為1時,選擇12小時模式。在12小時模式時,位5是AM/PM標誌位,該位為1時表示PM。當在24小時模式時,位5是第二個十位(表示20到23小時)。月暫存器的第7位是世紀位,當年暫存器從0到99溢出時,該位發生變化。
鬧鐘
DS1337的地址分配圖
Day/Date暫存器的第6位是DY/DT位。該位為1時,表示該暫存器中位0到位5中的值是一個星期的一天;它為0時,表示該暫存器的位0到位5中的值是一個月中的一天。
EOSC\:振盪器使能位。該位為0,振盪器起振;為1,振盪器停振。剛上電時,該位為0;RS1,RS2:方波輸出頻率選擇位。RS1和RS2共有四種組合,分別對應的方波輸出頻率為1Hz,4.096kHz,8.192kHz,32.768kHz。在剛加電時,方波輸出頻率設定是32.768kHz。
INTCN:中斷控制位。用於控制兩個鬧鐘與中斷輸出腳之間的關係。為1時,兩個鬧鐘在滿足定時條件時,各自有獨立的中斷輸出。為0時,兩個鬧鐘共用一個中斷輸出腳INTA\,而腳SQW/INTB\為方波輸出端。開始上電時,該位為0。
A1IE:鬧鐘1中斷使能位。為1時,允許狀態暫存器的A1F位輸出到腳INTA\。上電時該位為0,此時不能用A1F位初始化INTA\信號。
A2IE:鬧鐘2中斷使能位,該位的作用與A1IE位相同。
DS1337的狀態暫存器各位定義如表4所列,
各位的作用如下:OSF:振盪器停止標誌。該位為1,表示振盪器已停止。有四種情況能產生這樣的結果:一是晶片剛上電,二是Vcc引腳電壓不足,三是EOSC\位為1,四是晶振受到外部影響(如噪聲等)。A1F,A2F:鬧鐘標誌位。為1時,表示鬧鐘設定時間與當前時間匹配,並產生中斷輸出。
驅動程式
對DS1337時鐘信息的設定和讀取,以及對鬧鐘的設定都需要編寫軟體來實現。本系統運行在Linux作業系統下,DS1337作為系統的一個硬體設備,系統對它的操作都是通過Linux作業系統內的驅動程式來完成的。
在Linux系統中,設備分為字元設備和塊設備兩種。DS1337屬於字元設備,用戶模式的程式對這類設備可以像對普通檔案一樣對它進行操作,因而字元設備類的驅動程式至少要實現Open(),Close(),Read()和Write()四個系統調用函式。這四個系統調用函式是核心數據結構file_operations內部各項的其中四項。另外,一個設備驅動程式還和兩個數據結構有關,它們是inode結構和file結構。但直接相關的數據結構是file_operations。編寫一個Linux系統驅動程式並對它進行測試主要有以下步驟:
(1)編寫各個檔案操作函式,即Open(),Close(),Read(),Write()等系統調用函式;
(2)聲明file_operations結構,給結構成員賦值;
(3)編寫初始化函式和清除函式,並用兩個宏module_init和module_exit定義這兩個函式;
(4)創建一個字元設備入口點,即使用mknod/dev/ds1337cxxx0命令來建立設備檔案節點其中,c代表字元設備,如果是塊設備,這個位置應該是b;參數xxx代表該設備的主設備號,0代表該設備的次設備號;
(5)編寫測試應用程式;
(6)使用insmodds1337.o命令載入驅動程式;
(7)運行測試程式對驅動程式進行測試;
(8)使用rmmodds1337.o命令卸載驅動程式;
實際上,在測試過程中,如果發現有問題,還要再修改各個檔案操作函式,然後再從第1步重新開始上面的過程,直到最後形成最終的完善的驅動程式。
DS1337的IC匯流排上的數據傳輸速率在標準模式下是100Kbit,在高速模式下為400Kbit。對於IC匯流排上的START條件和STOP條件以及數據位的傳輸時序,由於在EP9315中沒有更多的硬體控制電路,因此需要編程實現。需要注意的是,在IC匯流排上,數據的變化發生在SCL信號線為低電平的時刻;在SCL信號為高電平時,數據線SDA上的數據信號應該保持穩定。START條件是在SCL信號為高電平時,SDA產生一個由高變低的電平變化,此後開始一個數據傳輸過程。
STOP條件是在SCL信號為高電平時,SDA產生一個由低變高的電平變化,並在之後的幾個時鐘周期匯流排被釋放,變成“閒”狀態。在Linux系統中,可以利用短延時函式udelay(unsignedlongusecs)來實現IC匯流排上的延時功能。具體的驅動程式在此不再給出。