RVMCU課堂「12」: 手把手教你玩轉(zhuǎn)RVSTAR—外部中斷篇
[導(dǎo)讀]外部中斷是單片機實時地處理外部事件的一種機制。具體指的是,當(dāng)某種外部事件發(fā)生時,單片機的中斷系統(tǒng)迫使CPU暫停正在執(zhí)行的程序,轉(zhuǎn)而去進行中斷事件的處理;中斷處理完畢后,又返回被中斷的程序處,繼續(xù)執(zhí)行下去。這里我們以NucleiBoardLabs中exti_key_interrup...
外部中斷是單片機實時地處理外部事件的一種機制。具體指的是,當(dāng)某種外部事件發(fā)生時,單片機的中斷系統(tǒng)迫使CPU暫停正在執(zhí)行的程序,轉(zhuǎn)而去進行中斷事件的處理;中斷處理完畢后,又返回被中斷的程序處,繼續(xù)執(zhí)行下去。這里我們以Nuclei Board Labs中exti_key_interrupt應(yīng)用程序為例,簡單講解外部中斷的非向量處理模式。
系統(tǒng)環(huán)境
軟件平臺
硬件需求
中斷知識介紹
外部中斷處理介紹
中斷初始化函數(shù)介紹
returnCode = ECLIC_Register_IRQ( EXTI0_IRQn, ECLIC_NON_VECTOR_INTERRUPT,
ECLIC_LEVEL_TRIGGER,
1,
0,
NULL);
中斷處理函數(shù)介紹
{
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);
}
為了便于理解外部中斷程序,我們以Nuclei Board Labs中exti_key_interrupt實驗為實例,實際感受一下外部中斷的流程。
{
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。
系統(tǒng)環(huán)境
軟件平臺
硬件需求
中斷知識介紹
外部中斷處理介紹
中斷初始化函數(shù)介紹
returnCode = ECLIC_Register_IRQ( EXTI0_IRQn, ECLIC_NON_VECTOR_INTERRUPT,
ECLIC_LEVEL_TRIGGER,
1,
0,
NULL);
中斷處理函數(shù)介紹
{
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);
}
為了便于理解外部中斷程序,我們以Nuclei Board Labs中exti_key_interrupt實驗為實例,實際感受一下外部中斷的流程。
-
開發(fā)板初始化(Board Config)包含開發(fā)板上LED3初始化和按鍵初始化。
-
外部中斷初始化(EXTI config)包含按鍵外部中斷初始化,主要是GPIO的配置。
-
ECLIC初始化(ECLIC config)是之前講的ECLIC初始化函數(shù)。
{
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。