登錄 注冊
購物車0
TOP
Imgs 行業(yè)資訊

0

【紫光同創(chuàng)國產(chǎn)FPGA教程】【第二十二章】RTC時間實驗

2021-03-10 18:13:39

1.實驗簡介
實驗通過閱讀DS1302芯片手冊,了解DS1302操作時序和相關(guān)寄存器,然后設(shè)計程序?qū)S1302RTC時間通過串口發(fā)送到PC,通過串口調(diào)試助手可以看到時間信息。
2.實驗原理
RTC(Real-TimeClock)實時時鐘為系統(tǒng)提供一個可靠的時間,并且在斷電的情況下,RTC實時時鐘也可以通過電池供電,一直運行下去。RTC通過類SPI總線向FPGA傳送8位數(shù)據(jù)(BCD碼)。數(shù)據(jù)包括秒,分,小時,日期,天,月和年。在本實驗中我們將讀取RTC的時,分,秒的數(shù)據(jù)通過串口發(fā)送到PC。
2.1硬件介紹
開發(fā)板上RTC設(shè)計采用DALLAS公司的低功耗實時時鐘芯片DS1302,DS1302的VCC2為主電源,VCC1為后備電源。在主電源關(guān)閉的情況下,也可以通過電池保持時鐘的連續(xù)運行。DS1302外接32.768kHz晶振為RTC電路提供振蕩源。RTC部分的原理圖如下圖所示:

開發(fā)板RTC
2.2DS1302時序和控制
1)寫數(shù)據(jù)時序
DS1302芯片寫操作的時序圖。第一個字節(jié)是“訪問寄存器的地址”,第二字節(jié)是“寫數(shù)據(jù)”。在寫操作的時候,都是“上升沿有效”,然而還有一個條件,就是CE(/RST)信號必須拉高。(數(shù)據(jù)都是從LSB開始發(fā)送,亦即是最低位開始至最高位結(jié)束)。

DS1302寫時序
2)讀數(shù)據(jù)時序
基本上和寫操作的時序圖大同小異,區(qū)別的地方就是在第二個字節(jié)是“讀數(shù)據(jù)”的動作。第二字節(jié)讀數(shù)據(jù)開始時,SCLK信號都是下降沿送出數(shù)據(jù),這個時候可以使用上升沿讀取數(shù)據(jù)。CE(/RST)信號同樣是必須拉高。(第一節(jié)數(shù)據(jù)是從LSB開始輸出,第二節(jié)數(shù)據(jù)是從LSB開始讀入)。

3)命令格式和寄存器
無論是讀操作還是寫操作,在時序圖中,第一個字節(jié)都是“訪問寄存器的地址”,然而這一字節(jié)數(shù)據(jù)有自己的格式。

BIT7固定。BIT6表示是訪問寄存器本身,還是訪問RAM空間。BIT5到BIT1表示是寄存器或RAM空間的地址。BIT0表示是訪問寄存器本身是寫操作,還是讀操作。
下圖是DS1302的寄存器地址和數(shù)據(jù)格式

3.程序設(shè)計
通過分析DS1302讀寫時序,可以看出和SPI時序類似,只不過數(shù)據(jù)輸出和輸入分時復(fù)用了,本實驗利用SPIMaster模塊來做為DS1302的底層讀寫控制模塊,然后再編寫一個RTC讀寫模塊。
ds1302_io模塊完成DS1302寄存器讀寫控制,狀態(tài)機如下圖所示。
狀態(tài)“S_IDLE”空閑狀態(tài),收到讀寫寄存器請求寫進入“S_CE_HIGH”狀態(tài),將CE拉高,然后根據(jù)請求類型,進入讀(S_READ)或?qū)憼顟B(tài)(S_WRITE)。
“S_WRITE”狀態(tài)下一個狀態(tài)進入寫地址狀態(tài)“S_WRITE_ADDR”,再進入寫數(shù)據(jù)狀態(tài)“S_WRITE_DATA”,完成一個寄存器的寫入,最后應(yīng)答,拉低CE。
“S_READ”狀態(tài)下一個狀態(tài)進入讀地址狀態(tài)“S_READ_ADDR”,再進入讀數(shù)據(jù)狀態(tài)“S_READ_DATA”,完成一個寄存器的讀取,最后應(yīng)答,拉低CE。

ds1302_io狀態(tài)機
信號名稱 方向 說明
clk in 時鐘輸入
rst in 異步復(fù)位輸入,高復(fù)位
ds1302_ce out DS1302CE,高有效
ds1302_sclk out DS1302串行時鐘
ds1302_io inout DS1302數(shù)據(jù)
cmd_read in 讀寄存器請求,發(fā)出請求時準(zhǔn)備好地址
cmd_write in 寫寄存器請求,發(fā)出請求時準(zhǔn)備好地址和數(shù)據(jù)
cmd_read_ack out 讀寄存器應(yīng)答,應(yīng)答時讀取數(shù)據(jù)有效
cmd_write_ack out 寫寄存器應(yīng)答
read_addr in 讀寄存器地址
write_addr in 寫寄存器地址
read_data out 讀出的數(shù)據(jù)
write_data in 寫寄存器數(shù)據(jù)
ds1302_io端口
ds1302模塊主要完成時間寄存器的讀寫控制,狀態(tài)機狀態(tài)較為簡單。

ds1302模塊狀態(tài)機
信號名稱 方向 說明
clk in 時鐘輸入
rst in 異步復(fù)位輸入,高復(fù)位
ds1302_ce out DS1302CE,高有效
ds1302_sclk out DS1302串行時鐘
ds1302_io inout DS1302數(shù)據(jù)
write_time_req in ds1302寫時間請求,請求發(fā)出時,時間數(shù)據(jù)write_second、write_minute、write_hour、write_date、write_month、write_week、write_year要有效
write_time_ack out 寫時間請求應(yīng)答
write_second in 寫時間:秒,BCD碼,00-59
write_minute in 寫時間:分,BCD碼,,00-59
write_hour in 寫時間:時,BCD碼,,00-23
write_date in 寫時間:日,BCD碼,,01-31
write_month in 寫時間:月,BCD碼,,01-12
write_week in 寫時間:周,BCD碼,,01-07
write_year in 寫時間:年,BCD碼,,00-99
read_time_req in 讀時間請求
read_time_ack out 讀時間請求應(yīng)答
read_second out 讀時間:秒,BCD碼,00-59
read_minute out 讀時間:分,BCD碼,,00-59
read_hour out 讀時間:時,BCD碼,,00-23
read_date out 讀時間:日,BCD碼,,01-31
read_month out 讀時間:月,BCD碼,,01-12
read_week out 讀時間:周,BCD碼,,01-07
read_year out 讀時間:年,BCD碼,,00-99
ds1302模塊端口
ds1302_test模塊主要CH狀態(tài)檢測,CH位于秒寄存器的BIT7位,上電后首先讀取時間,判斷秒寄存器的CH狀態(tài),如果為高,表示DS1302暫停,狀態(tài)機進入“S_WRITE_CH”,將CH寫0,并將一個初始時間寫入,然后循環(huán)不斷的讀取時間寄存器。

ds1302_test狀態(tài)機
信號名稱 方向 說明
clk in 時鐘輸入
rst in 異步復(fù)位輸入,高復(fù)位
ds1302_ce out DS1302CE,高有效
ds1302_sclk out DS1302串行時鐘
ds1302_io inout DS1302數(shù)據(jù)
read_second out 時間:秒,BCD碼,00-59
read_minute out 時間:分,BCD碼,00-59
read_hour out 時間:時,BCD碼,00-23
read_date out 時間:日,BCD碼,01-31
read_month out 時間:月,BCD碼,01-12
read_week out 時間:周,BCD碼,01-07
read_year out 時間:年,BCD碼,00-99
ds1302_test端口
4.實驗現(xiàn)象
將程序下載到開發(fā)板以后,連接uart轉(zhuǎn)串口到PC機

開發(fā)板串口連接圖
打開串口調(diào)試助手
端口選擇按照設(shè)備管理器中“SiliconLabsCP210xUSBtoUARTBridge”設(shè)置,波特率選擇“115200”,其他值默認(rèn)。

我們可以看到串口每秒會收到一條數(shù)據(jù),顯示一個時間。

高都電子,為客戶創(chuàng)造價值!

雙面板免費加費,四層板加急打樣,厚銅電路板打樣

Xcm