0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

PS端RTC中斷實(shí)驗(yàn)

電子設(shè)計(jì) ? 來(lái)源:電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2022-02-09 11:20 ? 次閱讀

作者:ALINX

* 本原創(chuàng)教程由芯驛電子科技(上海)有限公司(ALINX)創(chuàng)作,版權(quán)歸本公司所有,如需轉(zhuǎn)載,需授權(quán)并注明出處。

適用于板卡型號(hào):

AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG

vivado工程目錄為“ps_hello/vivado”

vitis工程目錄為“ps_rtc/vitis”

1.RTC介紹

實(shí)時(shí)時(shí)鐘(rtc)單元為系統(tǒng)和應(yīng)用軟件提供精確的時(shí)間基準(zhǔn)。為了滿足高精度的需要,實(shí)時(shí)時(shí)鐘還包括校準(zhǔn)電路,以補(bǔ)償溫度和電壓波動(dòng)。RTC 由 VCC-PSAUX 或 VCC-PSBATT 電源供電。當(dāng)輔助電源可用時(shí),RTC 使用它保持計(jì)數(shù)器活動(dòng)。當(dāng)輔助電源不可用時(shí),RTC 自動(dòng)切換到 VCC PSBATT 電源。RTC 功能如下:

1)系統(tǒng)掉電時(shí),該單元自動(dòng)切換至電池供電,實(shí)現(xiàn)時(shí)鐘的不間斷運(yùn)行

2)支持報(bào)警設(shè)置和周期中斷設(shè)置

3)校準(zhǔn)電路以確保時(shí)間精準(zhǔn)

4)三個(gè)計(jì)數(shù)器

時(shí)間秒計(jì)數(shù)器,32 位,可以計(jì)數(shù)約 136 年

32 KHz 參考時(shí)鐘計(jì)數(shù)器,表示 1 秒的計(jì)數(shù)

用于校準(zhǔn)的 4 位分?jǐn)?shù)計(jì)數(shù)器

pIYBAGAJQaeAOxmbAACKkKzN9_o872.jpg

RTC控制器結(jié)構(gòu)圖

o4YBAGAJQeeAbAiNAACAZwA3DPk952.jpg

RTC功能圖

2. 中斷介紹

1)ARM cortex-A系列處理器,提供了4個(gè)管腳給soc,實(shí)現(xiàn)外界中斷的傳遞。分別是:nIRQ、nFIQ、nVIRQ、nVFIQ。arm系統(tǒng)中,會(huì)有多個(gè)外設(shè),均有可能產(chǎn)生中斷發(fā)送給core,因此就需要有一個(gè)中斷控制器來(lái)作為中間的橋接,收集soc的所有中斷信號(hào),然后仲裁選擇合適(高優(yōu)先級(jí))的中斷,再發(fā)送給CPU,等待CPU處理。

2)這里中間的橋接,就是arm公司推出的大名鼎鼎的gic(general interrupt controller)。gic其實(shí)是一個(gè)架構(gòu),版本歷經(jīng)了gicv1,gicv2,gicv3,gicv4。

3)Ultrascale+中斷框圖如下

o4YBAGAJQiWAFBOFAACq7bsFgBo393.jpg

圖中包含兩個(gè)GIC:

RPU GIC:PL390(arm公司設(shè)計(jì)的對(duì)應(yīng)GICv1 IP)

APU GIC:GIC-400(arm公司設(shè)計(jì)的對(duì)應(yīng)GICv2 IP)

4)RPU GIC,其系統(tǒng)功能框圖如下:

pIYBAGAJQmSANoa2AACoe6w1F_w243.jpg

從圖中可以看到,中斷源主要有三種:

PPI:private peripheral interrupt,私有外設(shè)中斷,該中斷來(lái)源于外設(shè),只對(duì)固定的core有效。

SPI:shared peripheral interrupt,共享外設(shè)中斷,該中斷來(lái)源于外設(shè),可以對(duì)所有的core有效。

SGI:software-generated interrupt,軟中斷,軟件產(chǎn)生的中斷,用于給指定的core發(fā)送中斷信號(hào)

控制器功能框圖如下:

o4YBAGAJQrqAa4l_AACF_o5Pqfs423.png

上圖中, ICD的控制寄存器主要如下:

pIYBAGAJQvmAdIznAAFAupdwVn4683.jpg

1)APU GIC,功能框圖如下

pIYBAGAJQzeAdvV9AABYKsw1fDk775.png

GICv2,將中斷分成了group0和group1。使用寄存器GICD_IGROUPRn來(lái)對(duì)每個(gè)中斷,設(shè)置組。其中g(shù)roup0:安全中斷,由nFIQ驅(qū)動(dòng),group1:非安全中斷,由nIRQ驅(qū)動(dòng)。支持最大1020個(gè)中斷。其中斷號(hào)分配如下:

o4YBAGAJQ3WAP7ZPAAAq21bxCLs671.jpg

GICv2,主要由兩部分組成:distributor及cpu interface。

distributor,用來(lái)收集所有的中斷來(lái)源,并且為每個(gè)中斷源設(shè)置中斷優(yōu)先級(jí),中斷分組,中斷目的core。當(dāng)有中斷產(chǎn)生時(shí),將當(dāng)前最高優(yōu)先級(jí)中斷,發(fā)送給對(duì)應(yīng)的cpu interface。其功能有:全局中斷使能、每個(gè)中斷的使能、中斷的優(yōu)先級(jí)、中斷的分組、中斷的目的core、中斷觸發(fā)方式、對(duì)于SGI中斷,傳輸中斷到指定的core、每個(gè)中斷的狀態(tài)管理、提供軟件,可以修改中斷的pending狀態(tài)

cpu interface,將GICD發(fā)送的中斷信息,通過(guò)IRQ,F(xiàn)IQ管腳,發(fā)送給連接到該cpu接口的core。其功能有:將中斷請(qǐng)求發(fā)送給cpu、對(duì)中斷進(jìn)行認(rèn)可(acknowledging an interrupt)、中斷完成識(shí)別(indicating completion of an interrupt)、設(shè)置中斷優(yōu)先級(jí)屏蔽、定義中斷搶占策略、決定當(dāng)前處于pending狀態(tài)最高優(yōu)先級(jí)中斷

gicv2,定義了自己的一些寄存器,這些寄存器,都是使用memory-mapped的方式去訪問(wèn)的,也就是在soc中,會(huì)留有一片空間,給gic。cpu通過(guò)訪問(wèn)這部分空間,來(lái)對(duì)gic進(jìn)行操作。主要寄存器如下:

o4YBAGAJQ7SAOYBPAAAxtCmvcRA372.png

這里中斷只是作簡(jiǎn)單介紹,需要詳細(xì)了解的,請(qǐng)參照xilinx提供的文檔:ug1085-zynq-ultrascale-trm.pdf。

軟件工程師工作內(nèi)容

以下為軟件工程師負(fù)責(zé)內(nèi)容。

3. Vitis程序編寫

3.1 創(chuàng)建Platform工程

1)點(diǎn)擊Tools-》Launch Vitis

pIYBAGAJQ_KABZ_LAABrenT6bXk766.png

2) 與前面的Hello World實(shí)驗(yàn)不同,我們只建立Platform工程

3) 填入工程名字,要與XSA文件的名字一樣,點(diǎn)擊Next

4) 點(diǎn)擊Next

5) 選擇XSA文件

保持默認(rèn),點(diǎn)擊Finish

6) 點(diǎn)開platform.spr,并點(diǎn)開BSP

o4YBAGAJRWaAToxaAABpLaD4qPk590.png

7) 找到RTC驅(qū)動(dòng),并點(diǎn)擊Import Examples

o4YBAGAJRauARgFrAABazE1UX-w236.jpg

8) 非常幸運(yùn),有中斷的例子,怎么就知道這個(gè)例子就是中斷的例子呢?是通過(guò)“intr”猜測(cè)的,所以,基本功很重要,不然你連找例程都不會(huì)。

o4YBAGAJRemAEC3lAABNRlqRG5A334.png

9) 在這里就導(dǎo)入了example工程

pIYBAGAJRiaACTgSAABtZ55sZcI160.jpg

下面就是閱讀代碼,然后修改代碼了,當(dāng)然,可能一下不能完全理解這些代碼,只能在以后的應(yīng)用中去反復(fù)練習(xí)

10)通過(guò)函數(shù)XRtcPsu_GetCurrentTime來(lái)獲取系統(tǒng)秒計(jì)數(shù)器值,用函數(shù)XRtcPsu_SecToDateTime將計(jì)數(shù)值轉(zhuǎn)換為我們能看明白的年月日時(shí)分秒。

o4YBAGAJRmSABD9jAAAsBFbwEpo516.jpg

11)設(shè)置中斷時(shí)間,中斷時(shí)間PERIODIC_ALARM_PERIOD宏定義為2,也就是2秒中斷一次

o4YBAGAJRqOAba1pAAB36mqaTqs808.png

12)Build Project編譯

o4YBAGAJRuKAGT8yAAB1o-L6ydE215.png

13)了解一下中斷控制器的使用,主要分為幾個(gè)步驟,初始化中斷控制器GIC初始化中斷異常中斷服務(wù)函數(shù)注冊(cè)在中斷控制器中使能中斷使能中斷異常。有兩步需要注意,在中斷控制器中使能中斷是要根據(jù)中斷號(hào)使能相應(yīng)的中斷,比如本章介紹的RTC,是在中斷控制器GIC中的使能中斷,而后面的使能外設(shè)中斷是指在外設(shè)中打開它的中斷,正常情況下是不打開的,打開之后就可以產(chǎn)生中斷傳遞到中斷控制器GIC。在以后的實(shí)驗(yàn)中可以借鑒這種寫法。

pIYBAGAJRzWAUIkQAAHXImWaNfg272.jpg

4. 下載調(diào)試

1)打開串口終端;

2)下載調(diào)試程序的方法前面教程已經(jīng)講解,不再?gòu)?fù)述;

3)和我們預(yù)期一樣,串口每?jī)擅霑?huì)看斷一次;

pIYBAGAJR6-AEExkAAAa9YCaCts641.png

5. 實(shí)驗(yàn)總結(jié)

實(shí)驗(yàn)中通過(guò)簡(jiǎn)單的修改Vitis的例程,就完成了RTC,中斷的應(yīng)用,看似簡(jiǎn)單的操作,但蘊(yùn)含了豐富的知識(shí),我們需要非常了解RTC的原理、中斷的原理,這些基本知識(shí)是學(xué)習(xí)好ZYNQ的必要條件。

審核編輯:何安

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1629

    文章

    21738

    瀏覽量

    603464
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    【CH32V208】1、體驗(yàn)RTC

    Java version: 1.8.0_221 【實(shí)驗(yàn)程序】 1、RTC實(shí)始化,函數(shù)如下: u8 RTC_Init(void) { u8 temp = 0
    發(fā)表于 07-30 09:34

    什么是RTC模塊?

    什么是“RTC”?“RTC”是實(shí)時(shí)時(shí)鐘的縮寫,它是一種測(cè)量時(shí)間的電子設(shè)備。什么是“RTC模塊”?“RTC模塊”是一個(gè)集成了RTCIC、振蕩器電路和主時(shí)鐘的單封裝模塊。無(wú)需自行設(shè)計(jì)振蕩器
    的頭像 發(fā)表于 07-24 14:14 ?418次閱讀
    什么是<b class='flag-5'>RTC</b>模塊?

    【GD32F303紅楓派開發(fā)板使用手冊(cè)】第十七講 USART-中斷串口收發(fā)實(shí)驗(yàn)

    前面章節(jié)中我們已經(jīng)學(xué)習(xí)了串口的狀態(tài)標(biāo)志位,本實(shí)驗(yàn)就是使用TBE中斷和RBNE中斷來(lái)實(shí)現(xiàn)中斷收發(fā)數(shù)據(jù),實(shí)驗(yàn)原理是RBNE
    的頭像 發(fā)表于 06-17 09:53 ?1052次閱讀
    【GD32F303紅楓派開發(fā)板使用手冊(cè)】第十七講 USART-<b class='flag-5'>中斷</b>串口收發(fā)<b class='flag-5'>實(shí)驗(yàn)</b>

    stm8l151 rtc時(shí)間更新中斷怎么用庫(kù)函數(shù)配置?

    哪位大俠知道rtc時(shí)間更新中斷怎么用庫(kù)函數(shù)配置??
    發(fā)表于 05-08 06:13

    【GD32F470紫藤派開發(fā)板使用手冊(cè)】第三講 EXTI-按鍵中斷檢測(cè)實(shí)驗(yàn)

    通過(guò)本實(shí)驗(yàn)主要學(xué)習(xí)以下內(nèi)容: EXTI中斷原理; 按鍵中斷檢測(cè)原理;
    的頭像 發(fā)表于 05-05 09:22 ?544次閱讀
    【GD32F470紫藤派開發(fā)板使用手冊(cè)】第三講 EXTI-按鍵<b class='flag-5'>中斷</b>檢測(cè)<b class='flag-5'>實(shí)驗(yàn)</b>

    stm32l151c8t6 rtc的鬧鐘中斷進(jìn)不了是怎么回事?

    不知道是不是配置不對(duì) 請(qǐng)大神幫忙看看用的是stm32l151c8t6就是進(jìn)不去中斷到了制定的鬧鐘時(shí)間 沒(méi)有進(jìn)中斷 求幫忙瞄一瞄是什么地方?jīng)]配置好 void RTC_conig(void
    發(fā)表于 04-29 08:05

    如何使用Vitis自帶的LWIP模板進(jìn)行PS千兆以太網(wǎng)TCP通信?

    開發(fā)板有兩路千兆以太網(wǎng),通過(guò)RGMII接口連接,本實(shí)驗(yàn)演示如何使用Vitis自帶的LWIP模板進(jìn)行PS千兆以太網(wǎng)TCP通信。
    的頭像 發(fā)表于 04-28 10:44 ?3443次閱讀
    如何使用Vitis自帶的LWIP模板進(jìn)行<b class='flag-5'>PS</b><b class='flag-5'>端</b>千兆以太網(wǎng)TCP通信?

    stm32L476RG RTC的秒中斷如何使用?

    stm32L476RG RTC的秒中斷如何使用
    發(fā)表于 04-26 08:24

    用到STM32L471的低功耗,用RTC的鬧鈴中斷喚醒遇到的疑問(wèn)求解

    最近用到STM32L471的低功耗,根據(jù)綜合考慮選用STOP2模式(任意中斷喚醒),用RTC的鬧鈴中斷喚醒,由于喚醒周期比較長(zhǎng),采用的方式為:一小時(shí)喚醒一次,喚醒后判斷是否到達(dá)設(shè)定的時(shí)間,如到達(dá)設(shè)定
    發(fā)表于 04-23 06:25

    STM8L151K4讀RTC計(jì)數(shù)器,時(shí)間總是不對(duì)怎么解決?

    各位大神好,在調(diào)試STM8L時(shí)發(fā)現(xiàn)u16 RTC_GetWakeUpCounter(void)得到的值不對(duì),實(shí)驗(yàn)如下: 我設(shè)置RTC每10S喚醒一次,每10S可以喚醒,當(dāng)外部中斷發(fā)生時(shí)
    發(fā)表于 04-15 06:46

    STM32L431出現(xiàn)LSE CSS后RTC的ALARM無(wú)法進(jìn)入中斷是怎么回事啊?

    STM32L431的RTC配置使用LSE時(shí)鐘,配置ALARMA中斷,可以正常進(jìn)入中斷,但是出現(xiàn)LSE CSS后重新配置RTC使用LSI做為系統(tǒng)時(shí)鐘,但配置后
    發(fā)表于 04-08 06:58

    STM32L051同時(shí)開啟RTC時(shí)間戳和秒喚醒后,使用GPIO引腳無(wú)法觸發(fā)時(shí)間戳中斷如何解決?

    STM32L051同時(shí)開啟RTC時(shí)間戳和秒喚醒后,使用GPIO引腳無(wú)法觸發(fā)時(shí)間戳中斷。但使用一個(gè)3.3V的電源接到PC13能夠觸發(fā)RTC時(shí)間戳。 我將PB8和PC13相連,PB8特定情況下會(huì)輸出脈沖
    發(fā)表于 04-01 06:37

    使用RTC喚醒中斷喚醒休眠狀態(tài)的MCU出現(xiàn)故障怎么解決?

    因在做項(xiàng)目為了節(jié)省功耗需求,使設(shè)備不運(yùn)行時(shí)MCU休眠,然后用內(nèi)部RTC喚醒中斷重啟MCU;在批量電路板中發(fā)現(xiàn)有極個(gè)別MCU無(wú)法喚醒,其他設(shè)備運(yùn)行正常,有大佬碰到過(guò)類似情況沒(méi)有?謝謝!
    發(fā)表于 04-01 06:23

    RX4901CE (RTC模塊)

    基本的RTC功能,如時(shí)間和日歷,時(shí)間警報(bào),喚醒計(jì)時(shí)器和時(shí)間更新中斷。RX4901CE結(jié)合了自動(dòng)電源開關(guān)功能,包括防止主電源反向電流的控制電路,連續(xù)溫度校正32.768 k
    發(fā)表于 01-25 10:28 ?0次下載

    求助,請(qǐng)教一個(gè)關(guān)于RTC中斷的問(wèn)題

    是這樣的,我的硬件是外部接了12M晶振,以及RTC時(shí)鐘的兩個(gè)引腳接了32.768K的晶振,用官網(wǎng)的RTC例程測(cè)試,時(shí)鐘和中斷都可以。我用了我們之前新唐供應(yīng)商給的庫(kù)程序,時(shí)鐘顯示跟實(shí)際時(shí)間比較,顯示
    發(fā)表于 01-16 07:37