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

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

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

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

BIT 7 固定。 BIT 6 表示是訪問(wèn)寄存器本身,還是訪問(wèn)RAM空間。 BIT 5 到BIT1 表示是寄存器或RAM空間的地址。 BIT 0 表示是訪問(wèn)寄存器本身是寫(xiě)操作,還是讀操作。
下圖是DS1302的寄存器地址和數(shù)據(jù)格式

3. 程序設(shè)計(jì)
通過(guò)分析DS1302讀寫(xiě)時(shí)序,可以看出和SPI時(shí)序類(lèi)似,只不過(guò)數(shù)據(jù)輸出和輸入分時(shí)復(fù)用了,本實(shí)驗(yàn)利用SPI Master模塊來(lái)做為DS1302的底層讀寫(xiě)控制模塊,然后再編寫(xiě)一個(gè)RTC讀寫(xiě)模塊。
ds1302_io模塊完成DS1302寄存器讀寫(xiě)控制,狀態(tài)機(jī)如下圖所示。
狀態(tài)“S_IDLE”空閑狀態(tài),收到讀寫(xiě)寄存器請(qǐng)求寫(xiě)進(jìn)入“S_CE_HIGH”狀態(tài),將CE拉高,然后根據(jù)請(qǐng)求類(lèi)型,進(jìn)入讀(S_READ)或?qū)憼顟B(tài)(S_WRITE)。
“S_WRITE”狀態(tài)下一個(gè)狀態(tài)進(jìn)入寫(xiě)地址狀態(tài)“S_WRITE_ADDR”,再進(jìn)入寫(xiě)數(shù)據(jù)狀態(tài)“S_WRITE_DATA”,完成一個(gè)寄存器的寫(xiě)入,最后應(yīng)答,拉低CE。
“S_READ”狀態(tài)下一個(gè)狀態(tài)進(jìn)入讀地址狀態(tài)“S_READ_ADDR”,再進(jìn)入讀數(shù)據(jù)狀態(tài)“S_READ_DATA”,完成一個(gè)寄存器的讀取,最后應(yīng)答,拉低CE。
ds1302_io狀態(tài)機(jī)
信號(hào)名稱(chēng) | 方向 | 說(shuō)明 |
clk | in | 時(shí)鐘輸入 |
rst | in | 異步復(fù)位輸入,高復(fù)位 |
ds1302_ce | out | DS1302 CE,高有效 |
ds1302_sclk | out | DS1302串行時(shí)鐘 |
ds1302_io | inout | DS1302數(shù)據(jù) |
cmd_read | in | 讀寄存器請(qǐng)求,發(fā)出請(qǐng)求時(shí)準(zhǔn)備好地址 |
cmd_write | in | 寫(xiě)寄存器請(qǐng)求,發(fā)出請(qǐng)求時(shí)準(zhǔn)備好地址和數(shù)據(jù) |
cmd_read_ack | out | 讀寄存器應(yīng)答,應(yīng)答時(shí)讀取數(shù)據(jù)有效 |
cmd_write_ack | out | 寫(xiě)寄存器應(yīng)答 |
read_addr | in | 讀寄存器地址 |
write_addr | in | 寫(xiě)寄存器地址 |
read_data | out | 讀出的數(shù)據(jù) |
write_data | in | 寫(xiě)寄存器數(shù)據(jù) |
ds1302_io端口
ds1302模塊主要完成時(shí)間寄存器的讀寫(xiě)控制,狀態(tài)機(jī)狀態(tài)較為簡(jiǎn)單。
ds1302模塊狀態(tài)機(jī)
信號(hào)名稱(chēng) | 方向 | 說(shuō)明 |
clk | in | 時(shí)鐘輸入 |
rst | in | 異步復(fù)位輸入,高復(fù)位 |
ds1302_ce | out | DS1302 CE,高有效 |
ds1302_sclk | out | DS1302串行時(shí)鐘 |
ds1302_io | inout | DS1302數(shù)據(jù) |
write_time_req | in | ds1302寫(xiě)時(shí)間請(qǐng)求,請(qǐng)求發(fā)出時(shí),時(shí)間數(shù)據(jù)write_second、write_minute、write_hour、write_date、write_month、write_week、write_year要有效 |
write_time_ack | out | 寫(xiě)時(shí)間請(qǐng)求應(yīng)答 |
write_second | in | 寫(xiě)時(shí)間:秒,BCD碼,00-59 |
write_minute | in | 寫(xiě)時(shí)間:分,BCD碼,,00-59 |
write_hour | in | 寫(xiě)時(shí)間:時(shí),BCD碼,,00-23 |
write_date | in | 寫(xiě)時(shí)間:日,BCD碼,,01-31 |
write_month | in | 寫(xiě)時(shí)間:月,BCD碼,,01-12 |
write_week | in | 寫(xiě)時(shí)間:周,BCD碼,,01-07 |
write_year | in | 寫(xiě)時(shí)間:年,BCD碼,,00-99 |
read_time_req | in | 讀時(shí)間請(qǐng)求 |
read_time_ack | out | 讀時(shí)間請(qǐng)求應(yīng)答 |
read_second | out | 讀時(shí)間:秒,BCD碼,00-59 |
read_minute | out | 讀時(shí)間:分,BCD碼,,00-59 |
read_hour | out | 讀時(shí)間:時(shí),BCD碼,,00-23 |
read_date | out | 讀時(shí)間:日,BCD碼,,01-31 |
read_month | out | 讀時(shí)間:月,BCD碼,,01-12 |
read_week | out | 讀時(shí)間:周,BCD碼,,01-07 |
read_year | out | 讀時(shí)間:年,BCD碼,,00-99 |
ds1302模塊端口
ds1302_test模塊主要CH狀態(tài)檢測(cè),CH位于秒寄存器的BIT7位,上電后首先讀取時(shí)間,判斷秒寄存器的CH狀態(tài),如果為高,表示DS1302暫停,狀態(tài)機(jī)進(jìn)入“S_WRITE_CH”,將CH寫(xiě)0,并將一個(gè)初始時(shí)間寫(xiě)入,然后循環(huán)不斷的讀取時(shí)間寄存器。
ds1302_test狀態(tài)機(jī)
信號(hào)名稱(chēng) | 方向 | 說(shuō)明 |
clk | in | 時(shí)鐘輸入 |
rst | in | 異步復(fù)位輸入,高復(fù)位 |
ds1302_ce | out | DS1302 CE,高有效 |
ds1302_sclk | out | DS1302串行時(shí)鐘 |
ds1302_io | inout | DS1302數(shù)據(jù) |
read_second | out | 時(shí)間:秒,BCD碼,00-59 |
read_minute | out | 時(shí)間:分,BCD碼,00-59 |
read_hour | out | 時(shí)間:時(shí),BCD碼,00-23 |
read_date | out | 時(shí)間:日,BCD碼,01-31 |
read_month | out | 時(shí)間:月,BCD碼,01-12 |
read_week | out | 時(shí)間:周,BCD碼,01-07 |
read_year | out | 時(shí)間:年,BCD碼,00-99 |
ds1302_test端口
4. 實(shí)驗(yàn)現(xiàn)象
將程序下載到開(kāi)發(fā)板以后,連接uart轉(zhuǎn)串口到PC機(jī)
開(kāi)發(fā)板串口連接圖
打開(kāi)串口調(diào)試助手
端口選擇按照設(shè)備管理器中“Silicon Labs CP210x USB to UART Bridge”設(shè)置,波特率選擇“115200”,其他值默認(rèn)。
我們可以看到串口每秒會(huì)收到一條數(shù)據(jù),顯示一個(gè)時(shí)間。
-
FPGA
+關(guān)注
關(guān)注
1645文章
22034瀏覽量
617858 -
時(shí)鐘
+關(guān)注
關(guān)注
11文章
1896瀏覽量
133157 -
DS1302
+關(guān)注
關(guān)注
8文章
451瀏覽量
51839 -
RTC
+關(guān)注
關(guān)注
2文章
622瀏覽量
68774 -
紫光同創(chuàng)
+關(guān)注
關(guān)注
5文章
101瀏覽量
27965
發(fā)布評(píng)論請(qǐng)先 登錄
國(guó)產(chǎn)FPGA介紹-紫光同創(chuàng)
「正點(diǎn)原子Linux連載」第二十二章串口格式化函數(shù)移植實(shí)驗(yàn)
HarmonyOS內(nèi)核源碼分析(下)
火力發(fā)電廠水汽分析方法 第二十二部分:化學(xué)耗氧量的測(cè)定(高錳
實(shí)時(shí)頻譜儀原理及操作指南
第二十二講 同步時(shí)序邏輯電路的分析方法

模擬電路網(wǎng)絡(luò)課件 第二十二節(jié):功率放大電路的一般問(wèn)題
第二十二屆高交會(huì)深圳開(kāi)幕 3300多家展商亮相
2020第二十二屆高交會(huì)助力科技領(lǐng)域雙循環(huán)
第二十二屆高交會(huì)圓滿落幕,極視角與您明年相約
美高電子推出高性能迷你主機(jī),亮相深圳第二十二屆高交會(huì)
【正點(diǎn)原子FPGA連載】第二十五章HDMI方塊移動(dòng)實(shí)驗(yàn) -摘自【正點(diǎn)原子】新起點(diǎn)之FPGA開(kāi)發(fā)指南_V2.1

普渡機(jī)器人亮相第二十二屆中國(guó)美食節(jié)成為全場(chǎng)焦點(diǎn)

展會(huì)直擊 | 美格智能亮相IOTE 2024第二十二屆國(guó)際物聯(lián)網(wǎng)展·深圳站

巍泰技術(shù)攜多款創(chuàng)新產(chǎn)品驚艷亮相 2024 第二十二屆物聯(lián)網(wǎng)展

評(píng)論