日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > > 硅農(nóng)亞歷山大
[導(dǎo)讀]外部中斷是單片機實時地處理外部事件的一種機制。具體指的是,當某種外部事件發(fā)生時,單片機的中斷系統(tǒng)迫使CPU暫停正在執(zhí)行的程序,轉(zhuǎn)而去進行中斷事件的處理;中斷處理完畢后,又返回被中斷的程序處,繼續(xù)執(zhí)行下去。這里我們以NucleiBoardLabs中exti_key_interrup...

外部中斷是單片機實時地處理外部事件的一種機制。具體指的是,當某種外部事件發(fā)生時,單片機的中斷系統(tǒng)迫使CPU暫停正在執(zhí)行的程序,轉(zhuǎn)而去進行中斷事件的處理;中斷處理完畢后,又返回被中斷的程序處,繼續(xù)執(zhí)行下去。這里我們以Nuclei Board Labsexti_key_interrupt應(yīng)用程序為例,簡單講解外部中斷的非向量處理模式。



系統(tǒng)環(huán)境


Windows 10-64bit



軟件平臺


NucleiStudio IDE 202102版



硬件需求


RV-STAR開發(fā)板




中斷知識介紹




外部中斷處理介紹


在SoC層面,GD32VF103芯片有多個外部中斷源,具體包含哪些外部中斷,可以在GD32VF103用戶手冊第六章:中斷/事件控制器(EXTI)中查看。


本次實驗使用用戶按鍵連接的GPIO作為外部中斷觸發(fā)源,經(jīng)過SoC層面的中斷/事件控制器(EXTI)檢測后,再傳遞給增強的內(nèi)核中斷控制器(ECLIC),交由內(nèi)核進行中斷管理。


關(guān)于GPIO的使用請看《RVMCU課堂[11]——GPIO使用篇》,這里不做介紹。


中斷/事件控制器(EXTI)的架構(gòu)框圖如下:




EXTI(中斷/事件控制器)有19個獨立的邊沿檢測單元,分別對應(yīng)連接EXTI0~18,其中的16個中斷源連接的是GPIO。EXTI有三種觸發(fā)類型上升沿觸發(fā)、下降沿觸發(fā)和任意沿觸發(fā)。EXTI中的每 一個邊沿檢測電路都可以獨立配置和屏蔽。



中斷初始化函數(shù)介紹


為了方便進一步講解,我們先打開Nuclei Board Labsexti_key_interrupt實驗的main.c函數(shù)源碼。其中,main函數(shù)調(diào)用的“ECLIC_Register_IRQ”函數(shù)就是中斷配置函數(shù)截取ECLIC初始化函數(shù)代碼如下:/* ECLIC config */
returnCode = ECLIC_Register_IRQ( EXTI0_IRQn, ECLIC_NON_VECTOR_INTERRUPT,
ECLIC_LEVEL_TRIGGER,
1,
0,
NULL);



在《RVMCU課堂[10]——處理器內(nèi)部中斷篇》已經(jīng)對此函數(shù)各參數(shù)的作用有了比較詳細的介紹,在這里我們只講一下會產(chǎn)生疑惑的兩個參數(shù),也就是第一個和最后一個參數(shù)。


第一個參數(shù)設(shè)置要配置的中斷號。這里我們講解一下如何確定這個參數(shù)的值。已知實驗要使用外部按鍵接GPIO觸發(fā)外部中斷,那么我們從按鍵看起。


RV-STAR的按鍵的電路原理圖如下:




可以看到,按鍵接到了PA0引腳上。接下來我們查閱GD32VF103用戶手冊的第六章:中斷/事件控制器(EXTI),發(fā)現(xiàn)PA0對應(yīng)的EXTI中斷源為0號。


由此可知,我們知道本次實驗使用的GPIO引腳PA0對應(yīng)的是EXTI0,所以這里是EXTI0中斷。所有可用的中斷號都在“IRQn_Type”枚舉當中,在gd32vf103.h文件當中可以查看RV-STAR的所有中斷號??梢钥闯觯瑥?9號開始后面的都是外部中斷,如果配置不同的中斷,需要修改此參數(shù)為對應(yīng)的中斷號。


最后一個參數(shù)配置的是中斷處理函數(shù)。直接來看的話,雖然這里寫的是“NULL”,但是并不代表沒有中斷處理函數(shù)。RV-STAR的中斷向量表是存儲在flash當中的,這就意味著運行時不能直接修改其中的數(shù)據(jù),所以在不修改源碼的情況下,RV-STAR不能通過這個參數(shù)修改中斷向量表。這里填寫任何函數(shù),都不會修改這個中斷號對應(yīng)的中斷處理函數(shù)的地址。所以這個參數(shù)寫“NULL”,實際上還是使用中斷向量表里面的默認函數(shù)。


后面的“EXTI0_IRQHandler”函數(shù)就是外部中斷0的默認中斷處理函數(shù)。詳細的中斷向量表可以在startup_gd32vf103.S文件開頭部分查看,這里就不一一列舉。





中斷處理函數(shù)介紹


知道了中斷處理函數(shù)是什么,我們再回到main.c當中,找到“EXTI0_IRQHandler”函數(shù),具體內(nèi)容如下:


void EXTI0_IRQHandler(void)
{
if (RESET != exti_interrupt_flag_get(WAKEUP_KEY_PIN)){

if(RESET == gd_rvstar_key_state_get(KEY_WAKEUP)){
/* toggle RED led */
gd_rvstar_led_toggle(LED3);
}
}
/* clear EXTI lines pending flag */
exti_interrupt_flag_clear(WAKEUP_KEY_PIN);
}


中斷處理函數(shù)中開始是按鍵去抖。之后切換LED的狀態(tài),也就是由亮到滅或者由滅到亮。最后一步是清除EXTI0的中斷等待標志。


因為使用的是中斷的非向量處理模式,所以在執(zhí)行中斷處理函數(shù)前會跳轉(zhuǎn)到非向量中斷統(tǒng)一的中斷入口,保存上下文入棧,再跳轉(zhuǎn)至對應(yīng)的中斷處理函數(shù)中執(zhí)行里面的指令,所以函數(shù)內(nèi)不需要手動增加保存上下文和恢復(fù)上下文的操作。





完整實例



為了便于理解外部中斷程序,我們以Nuclei Board Labs中exti_key_interrupt實驗為實例,實際感受一下外部中斷的流程。


新建一個RV-STAR的helloworld工程,具體步驟請參考往期內(nèi)容。


打開Nuclei Board Labs中的exti_key_interrupt文件夾,復(fù)制main.c的內(nèi)容替換之前新建的helloworld工程main.c的內(nèi)容。


工程運行框圖如下:




在main函數(shù)當中,一開始是一系列的初始化內(nèi)容,包括開發(fā)板初始化,外部中斷初始化和ECLIC初始化。


  • 開發(fā)板初始化(Board Config)包含開發(fā)板上LED3初始化和按鍵初始化。


  • 外部中斷初始化(EXTI config)包含按鍵外部中斷初始化,主要是GPIO的配置。


  • ECLIC初始化(ECLIC config)是之前講的ECLIC初始化函數(shù)。


以上初始化完成后,main函數(shù)執(zhí)行while(1)循環(huán),等待中斷的到來。


當按下PA0按鍵,觸發(fā)外部中斷,進入外部中斷處理函數(shù)當中,按鍵彈起,執(zhí)行LED狀態(tài)轉(zhuǎn)換的功能,最后退出中斷處理函數(shù)。


例子main函數(shù)代碼和對照介紹如下:int main(void)
{
int32_t returnCode;

/* Board Config */
gd_rvstar_led_init(LED3);
gd_rvstar_key_init(WAKEUP_KEY_GPIO_PORT,KEY_MODE_EXTI);

/* EXIT config */
key_exti_init();

/* ECLIC config */
returnCode = ECLIC_Register_IRQ(EXTI0_IRQn, ECLIC_NON_VECTOR_INTERRUPT,
ECLIC_LEVEL_TRIGGER, 1, 0, NULL);

/* Enable interrupts in general */
__enable_irq();

while(1);
return 0;
}







實際運行



工程新建完畢,需要在Launchbar工具中切換使用openocd的debug配置,如下圖:




點擊編譯工程,再點擊Debug下拉框切換為Run,點擊開始運行。下載結(jié)束記得點擊關(guān)閉openocd。


最終運行效果如下:




每當按鍵抬起,led的狀態(tài)切換一次。






本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉