【Zynq UltraScale+ MPSoC解密學習8】Zynq UltraScale+的RTC

目錄

一、介紹

二、功能描述

2.1 RTC操作

2.2 原理圖

​ 2.3 接口和信號

2.4 秒計數器

三、時鐘校準

四、RTC寄存器

 五、配置步驟

5.1 初始化RTC步驟

5.2 設置時間


一、介紹

實時時鐘(RTC)單元爲整個系統和應用軟件提供了一個精確的時間基準。爲了提升時鐘精度,RTC還包括校準電路,用來抵消溫度和電壓波動。
RTC由VCC_PSAUX或VCC_PSBATT供電。當VCC_PSAUX(輔助電源)可用時,RTC使用它來保持計數器工作。當VCC_PSAUX不可用時,RTC會自動切換到VCC_PSBATT電源。
RTC模塊有以下特點:
•使用輔助或電池電源進行持續的操作
•警報設置和定期中斷
•複雜的校準電路,具備高精度計時功能
•32位秒計數器代表136年的時間
•三個計數器: 32位秒計數器、16位tick計數器測量基於32 KHz晶振的秒、用於校準的4位分式計數器。


二、功能描述

2.1 RTC操作

RTC每秒鐘會向GICs 、GIC代理、PL生成兩個系統中斷信號,有報警事件發生時也會產生。所有的系統處理器都可以使用週期性的秒計數中斷,報警控制則必須在處理器的系統級上進行管理。

2.2 原理圖

以下兩圖顯示了RTC控制器的系統級原理圖。RTC功能分爲三個主要模塊。
•RTC控制寄存器:在低功耗領域(LPD)內實現,包含與RTC控制器相關的所有寄存器。
•RTC計數器模塊:包含所有計數器、校準邏輯和用於保留電池電源域(BPD)編程時間和校準信息的鎖存器。它還包括以下功能:
(1)晶振相關接口,也運行在BPD
(2)以秒爲單位進行時間維護
(3)包含校準電路,通過使用具有任意靜態誤差的晶振來計算一秒的最大百萬分之一誤差
(4)通過軟件維護用於回讀和校準的預編譯時間
(5)維持振盪器和電源開關電路使用的控制值
•晶振:提供使用GPIO實現的RTC時鐘。電源由RTC計數器模塊提供。
 


 2.3 接口和信號

RTC和LPD邏輯的接口包括以下功能:
(1)通過APB接口來訪問控制器和RTC計數器中的寄存器。該接口由LPD_LSBUS_CLK進行計時。
(2)報警邏輯,包括報警寄存器。
(3)中斷狀態,中斷掩碼,中斷使能,中斷禁用寄存器來管理秒中斷和報警中斷。
(4)RTC控制寄存器使能晶振,控制RTC的電源。
SET_TIME_WRITE、CALIB_WRITE和CURRENT_TIME寄存器都是在電池供電的RTC中實現的,但是通過LPD中的APB接口進行訪問。
控制器邏輯還包括ALARM報警寄存器和報警生成邏輯。只要RTC中的秒計數器的值和加載到報警寄存器中的值匹配,並且啓用了警報中斷,就會生成RTC_Alarm系統中斷。
RTC控制寄存器通過LPD中的APB接口進行編程,並保留在電池供電域中,因爲它是RTC操作所必需的。

2.4 秒計數器

秒計數器是一個32位的同步計數器,用來保存來自特定參考點的秒數。最開始,通過操作系統的時鐘設備驅動程序計算當前時間,該驅動程序基於從參考點經過的秒數。這個當前時間值通過時間設置寄存器編程到RTC計數器中,時間設置寄存器用於初始化秒計數器。在此之後,秒計數器每秒鐘計時一次,增加並保持更新當前時間。然後RTC控制器通過接口讀取當前時間。
對於每個振盪時鐘週期,tick計數器中的值和存儲在校準寄存器中的值進行比較,一旦這些值匹配,tick計數器將重置爲零並生成一箇中斷。
來自RTC計數器的中斷信號在一個osc_rtc_clk時鐘週期後被斷言,並且只能在時鐘上升沿時觸發捕獲。時鐘設備驅動程序可以使用來自RTC計數器的後續中斷來計算時間和日期。


三、時鐘校準

用於重置tick計數器的清除信號可以通過與分數校準值一起工作的邏輯進行擴展/延遲,從而提供分數tick調整。更具體地說,分數計數器是通過對tick計數器斷言其擴展清除信號來對其清除功能保持判斷狀態。
振盪器中的任何誤差都可以在幾分之一秒內通過調整校準值來補償,其餘誤差的影響可以通過分數計數器來補償。每16秒,積累的誤差可以用0~16ticks來表示,該值記錄在校準寄存器的分式校準段中。然後每過16秒,分數計數器會從0增長到這個值,在此期間,分數計數器時刻對tick計數器的clear信號保持着斷言。當分數比較器發現分數計數器的值增長到等於最大分數校準值時,會立刻釋放tick計數器的清除信號,然後分數計數器重新又重新計數。


四、RTC寄存器


 五、配置步驟

5.1 初始化RTC步驟

(1)校準寄存器CALIB_WRITE寫入0x0019_8231h
(2)將振盪器設置爲晶體,使能控制寄存器CONTRL中的電池開關
(3)清除中斷狀態寄存器RTC_INT_STATUS中的中斷狀態
(4)在中斷禁用寄存器RTC_INT_DIS中禁用所有中斷。

5.2 設置時間

通過配置SET_TIME_WRITE寄存器來實現所需的日期和時間值(以秒爲單位)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章