我本來(lái)打算在這篇博客中繼續(xù)介紹探討運(yùn)行于Zynq SoC上的操作系統(tǒng)。然而由于上周有人提問(wèn)過(guò)一些關(guān)于Zynq SoC外設(shè)XADC,中斷和alarms的問(wèn)題,我認(rèn)為我們應(yīng)該快速的了解一下以及我們?cè)鯓訉⑺鼈兗尤氲较到y(tǒng)設(shè)計(jì)中。
Zynq SoC具有檢測(cè)供應(yīng)電壓和片上工作溫度的能力,這看起來(lái)非常有趣 。我們可以利用這個(gè)功能在系統(tǒng)測(cè)試期間驗(yàn)證初始供應(yīng)電壓和工作溫度。在我們的設(shè)計(jì)的整個(gè)測(cè)試和運(yùn)行期間,我們可以定期的檢查確保這些參數(shù)保持在規(guī)定的運(yùn)行范圍內(nèi)。在系統(tǒng)運(yùn)行期間我們也可以用這個(gè)功能來(lái)判別Zynq SoC的運(yùn)行環(huán)境是否存在問(wèn)題,可能導(dǎo)致系統(tǒng)啟動(dòng)運(yùn)行失敗的問(wèn)題,例如:緩慢漂移的電壓和電流。
Zynq SoC具有很多可屏蔽的中斷,可以中斷兩個(gè)片上的ARM Cortex-A9 MPCore Processors,通過(guò)產(chǎn)生一個(gè)在用戶定的的最大參數(shù)設(shè)置和最小參數(shù)設(shè)置范圍外的一個(gè)警報(bào)參數(shù)。XADC擁有它專用的中斷,由兩個(gè)處理器內(nèi)核共享,中斷號(hào)為IRQ39,正如下面的從Zynq TRM(技術(shù)參考手冊(cè))中截取的圖表所示:
在使用Vivado軟件配置XADC的時(shí)候我們可以設(shè)置一些警報(bào)參數(shù),如下面所示:
這些參數(shù)也可以在軟件環(huán)境中調(diào)用xadc_ps.h函數(shù)時(shí)進(jìn)行設(shè)置,例如:
XAdcPs_SetAlarmThreshold(XADCInstPtr, XADCPS_ATR_TEMP_LOWER,(TempRawData));
XADC提供了很多警報(bào)輸出信號(hào),這些信號(hào)可以連接到在Zynq SoC PL(可編程邏輯)側(cè)實(shí)現(xiàn)的邏輯模塊上。這些邏輯模塊可以啟動(dòng)警報(bào)操作,它們也可以驅(qū)動(dòng)外部的一些指示器,
例如LEDS,位于開(kāi)發(fā)板的前面來(lái)顯示設(shè)備的運(yùn)行狀態(tài)。這對(duì)提供可視化的溫度警告是非常有用的,例如系統(tǒng)風(fēng)扇啟動(dòng)失敗等等。
這些警報(bào)信號(hào)(總共7個(gè),如上面圖表所示)可以通過(guò)調(diào)用合適參數(shù)的函數(shù)進(jìn)行使能,例如由xadcps_hw.h文件提供的調(diào)用函數(shù)。如果需要更多的警報(bào)信號(hào),可以通過(guò)或操作(OR)將他們集中在一起調(diào)用。
一旦我們使能了警報(bào)函數(shù),我們也可以使用合適的調(diào)用函數(shù)使能中斷,同樣使用xadcps_hw.h文件提供的函數(shù)。如果想一次使能更多的中斷操作,同樣可以使用或(OR)操作。
考慮到這一點(diǎn),我在Vivado軟件中創(chuàng)建了一個(gè)簡(jiǎn)單的工程,將Zynq PS 通過(guò)AXI接口連接到XADC,例如我不會(huì)使用任何的外部模擬量輸入,但是使用器件內(nèi)部的溫度測(cè)量功能,即Zynq XADC。
使用軟件配置XADC來(lái)中斷處理器內(nèi)核,比如出現(xiàn)高于或低于器件啟動(dòng)時(shí)的溫度,增加或減少幾度。現(xiàn)實(shí)中可能我們不需要如此嚴(yán)格的要求系統(tǒng)運(yùn)行溫度。然而這是一個(gè)展示XADC中斷的應(yīng)用,在Zynq SoC正常運(yùn)行期間系統(tǒng)溫度的變化將處罰中斷操作。
我已經(jīng)在這篇博客中附加了程序代碼,主要分為三部分功能:
1. 第一部分是配置Zynq SoC的通用中斷控制器,因此我們可以使用XADC中斷作為這個(gè)中斷服務(wù)例程的一部分,當(dāng)聲明XADC中斷時(shí)調(diào)用。
2. 第二部分是配置XADC,設(shè)置定時(shí)計(jì)數(shù)器為安全模式,在讀取溫度前屏蔽所有警報(bào)函數(shù)。根據(jù)剛剛讀取的溫度設(shè)置溫度警報(bào)范圍的上限和下限溫度值。設(shè)置好這些參數(shù)值后,就可以設(shè)置溫度警報(bào)函數(shù)和使能溫度中斷操作。
3.第三部分是當(dāng)溫度中斷操作發(fā)生時(shí),中斷服務(wù)程序?qū)⒈徽{(diào)用。這個(gè)例程將會(huì)清除中斷狀態(tài)寄存器,屏蔽其他所有的中斷發(fā)生,當(dāng)中斷發(fā)生時(shí)讀取溫度值。讀取的溫度可能不會(huì)高于中斷溫度,因?yàn)檫@個(gè)溫度值將會(huì)不斷的波動(dòng),我們不會(huì)計(jì)算溫度的平均值,然而這個(gè)值會(huì)非常接近警報(bào)溫度。
當(dāng)我編譯這個(gè)例程的代碼并生成啟動(dòng)鏡像 ,下載到MicroZed開(kāi)發(fā)板上運(yùn)行幾分鐘后,我觀察到的結(jié)果信息如下:
正如你所看到的,中斷被觸發(fā)了,數(shù)字“513”(十進(jìn)制)是隨著XADC中斷狀態(tài)寄存器中的值不斷更新的。
對(duì)于系統(tǒng)和FPGA設(shè)計(jì)者來(lái)說(shuō),XADC是一個(gè)非常有用的工具。這個(gè)簡(jiǎn)單的例子展示了我們?cè)鯓邮褂盟鳛橄到y(tǒng)運(yùn)行狀態(tài)的預(yù)兆。在一個(gè)更重要關(guān)鍵的程序中,我們可以使用它作為反篡改程序的一部分。
原文鏈接:
? Copyright 2014 Xilinx Inc.
如需轉(zhuǎn)載,請(qǐng)注明出處
adam_taylor_code_43.doc 32.5 KB
評(píng)論
查看更多