RT1052 GPIO中斷配置

開發平臺

  • Board:野火RT1052-MINI
  • IDE:Keil 5.28

RT1052的中斷介紹

  • 文檔參考 :《cortex_m7_trm》
    在學習STM32的時候,中斷用得不少,不管是STM32F1\F4\H7?還是現在用得RT1052,實際都是屬於Cortex-M的MCU,因此在對於中斷的控制上,少不了有NVIC的運用。

什麼是NVIC?(摘自野火I.MX RT庫開發實戰指南)

NVIC 是嵌套向量中斷控制器,控制着整個芯片中斷相關的功能,它跟內核緊密耦合,是內核裏面的一個外設。但是各個芯片廠商在設計芯片的時候會對 Cortex-M7 內核裏面的 NVIC 進行裁剪,把不需要的部分去掉,所以說 RT1052 的 NVIC 是 Cortex-M7 的 NVIC 的一個子集。
其實也就看起來複雜,而我們只需要將它當做是MCU上的一個內核外設就可以了,這個外設可以控制、配置RT1052的中斷,比如說讓對應的中斷使能?失能?或者是配置這個中斷的優先級?(包括搶佔優先級和子優先級),用得比較多的也就這些功能了。
在這裏插入圖片描述

NXP的SDK對NVIC的支持

我們在使用ST的標準庫的時候,其實也會用到NVIC相關的函數的,但是那並不是直接由CMSIS封住起來的函數接口,而是經過ST官方二次封裝過的API,因此在標準庫上,會有一個文件,叫做xxx_misc.c,xxx_misc.h,如果用過標準庫的,都應該知道這個文件,而且建立工程的時候,這個文件是不能少的。實際上關於中斷的定義以及功能函數,在頭文件“core_cm7.h”(因爲是CORE_M7內核,其餘的是M4的就換成m4就好了)。、
同樣的,NXP的SDK裏面,也對NVIC進行了封裝和支持,爲了讓開發者快速上手,SDK對NVIC的封裝並沒有修改得太複雜。
在這裏插入圖片描述
在這裏插入圖片描述

RT1052的GPIO中斷配置

現在要配置一個按鍵中斷,首先我們需要知道,按鍵中斷的配置需要些啥?

  • 1、我們需要知道按鍵按下後是高電平有效還是低電平有效,從而配置進入中斷的方式。
  • 2、我們需要了解GPIO的中斷分組,怎麼使能對應的GPIO的中斷。
  • 3、要知道怎麼編寫對應的GPIO中斷服務函數。

一個個來看:

按鍵的電路分析

由野火的原理圖來看,按鍵是低電平有效,原因是按鍵按下後直接接地了,而地的電壓不會高於1.5V,所以按鍵是低電平有效。

RT1052 的GPIO中斷

RT1052 並沒有爲每個輸入輸出引腳分配一箇中斷號,而是爲每組GPIO 分配兩個中斷編號,其中低 16 個輸入輸出引腳(GPIOx_n, x 取 1 到 5, n 取 0 到 15)共用一箇中斷編號,高 16 個輸入輸出引腳使用另外一箇中斷編號。每組 GPIO 擁有各自的中斷相關寄存器,包括一箇中斷屏蔽寄存器(GPIOx_IMR),一箇中斷狀態寄存(GPIOx_ISR),兩個中斷配置寄存器( GPIOx_ICR1、 GPIOx_ICR2)。通過配置這些寄存器我們可以靈活的設置每一個輸入輸出引腳是否使用中斷、中斷觸發條件、以及當前中斷狀態。
上面這段話來自野火的教程,其實說得挺明白的,但是需要配合代碼來看,看下圖:
在這裏插入圖片描述
這是在MIMXRT1052.h裏面對中斷向量號的定義。可以發現,GPIO的中斷,一個GPIO口被分割成了兩組中斷入口,也就是高16位和低16位的區分。所以要寫某一個IO口的中斷的時候,必須先知道它屬於哪個分組,比如GPIO1_05,就選擇GPIO1_Combined_0_15_IRQn,因爲05在0-15的範圍內,應該還很好理解。

RT1052的中斷服務函數

知道了對應的中斷向量表,那樣在啓動文件上,就可以直接找到進行了弱定義的中斷服務函數了:
在這裏插入圖片描述
那樣就跟以往的中斷服務函數一樣用就可以了,
在這裏插入圖片描述
當然,進入中斷服務函數後,需要清除中斷標誌位,不然不會退出中斷服務函數,而這個屬於GPIO的,所以在fsl_gpio.h上有提供相應的函數。
函數原型:

static inline void GPIO_PortClearInterruptFlags(GPIO_Type *base, uint32_t mask)
{
    base->ISR = mask;
}

其實就是清除對應位的中斷標誌,很明顯的。

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