瘋殼AI語音及人臉識別教程2-5中斷

目錄
1.1寄存器 1
1.2實驗現象 4
視頻地址:https://fengke.club/GeekMart/su_f9cTSxNsp.jsp
官方QQ羣:457586268
中斷
接口數據傳送控制方式有查詢、中斷和DMA等,中斷是重要的接口數據傳送控制方式。中斷控制分爲全局和局部兩級,全局中斷由NVIC控制,局部中斷由外設控制。
嵌套向量中斷控制器NVIC支持多個內部異常和多達240個外部中斷。從廣義上講,異常和中斷都是暫停正在執行的程序轉去執行異常或中斷處理程序,然後返回原來的程序繼續執行。從狹義上將,異常由內部事件引起,而中斷有外部硬件產生。
異常和中斷的處理與子程序調用有相似之處,但也有下列本質區別:
什麼時候調用子程序是確定的,而什麼時候產生異常和中斷時不確定的。子程序的起始地址由調用程序給出,而異常和中斷程序的起始地址存放在地址表中。
子程序的執行一般是無條件的,而異常和中斷處理程序的執行要先使能。
CC3200的NVIC具有下列特性:
a、確定的、快速的中斷處理,總是12個時鐘週期;
b、每個中斷的優先級可編程(0~7,0表示最高優先級);
c、3~8位優先級配置;
d、動態重新分配中斷優先級;
e、中斷優先級分組允許選擇中斷優先級分組和中斷子優先級的數量。低延遲中斷和異常處理;
f、中斷信號電平和邊沿檢測。
1.1寄存器
本小節將使用的GPIO外部中斷來實現按鍵的功能。每個GPIO端口的中斷功能通過7個寄存器來進行控制。這些寄存器用來選擇中斷源、中斷優先級和邊沿特性。當一個或者多個GPIO輸入引起中斷時,一個單中斷信號輸出到整個GPIO端口的中斷控制器。
下面三個寄存器定義了引起中斷的邊沿或檢測:
a、GPIOIS:GPIO 中斷檢測寄存器;
b、GPIOIBE:GPIO 中斷邊沿寄存器;
c、GPIOIEV:GPIO 中斷時間寄存器。
中斷功能通過GPIO中斷掩碼(GPIOIM)寄存器來進行使能和關閉。
當一箇中斷條件產生時,有兩個地方可以查看中斷信號的狀態:GPIO源中斷狀態(GPIORIS)寄存器和GPIO掩碼中斷狀態(GPIOMIS)寄存器。正如名稱暗示的那樣,GPIOMIS寄存器只顯示可以發送給中斷控制器的中斷條件。GPIORIS 寄存器表示一個 GPIO引腳達到了產生中斷的條件,但是不一定會發送給中斷控制器。
如果是GPIO電平檢測中斷,產生中斷的電平信號必須保持到中斷服務的產生。一旦輸入的信號解除中斷產生的邏輯信號,對應的GPIORIS寄存器中的源中斷寄存器位將被清零。對於GPIO邊沿檢測中斷,GPIORIS寄存器中的RIS位通過向寄存器GPIOICR中的對應位寫入1來進行清零。GPIOMIS寄存器中的對應位反應源中斷狀態位的掩碼值。
當編輯中斷控制寄存器時,應當將中斷全部關閉(GPIOIM清零)。如果對應的位使能的話,則寫任何中斷控制寄存器都會產生不必要的中斷
GPIOIS是中斷檢測寄存器。置位則對應的引腳進行電平檢測,清零則對應的引腳進行邊沿檢測。在復位時,所有的位清零。如圖1.0.1所示。
注意:爲了防止產生錯誤的中斷,在配置中斷檢測寄存器和邊沿寄存器的時候,應當清零GPIOIM寄存器中的IME位來屏蔽中斷引腳。配置GPIOIS寄存器的IS位和GPIOIBE寄存器的IBE位。清除GPIORIS寄存器。最後通過置位GPIOIM寄存器中的IME位來打開引腳。
在這裏插入圖片描述

圖1.0.1 GPIOIS寄存器
GPIOIBE寄存器允許雙邊沿來觸發中斷。當GPIOIS寄存器設置爲檢測邊沿時, 則設置GPIOIBE寄存器來配置對應的引腳來檢測上升和下降沿,而忽略 GPIOIEV 寄存器中的對應位的配置。清零一位則配置爲引腳受GPIOIEV寄存器的控制。復位之後,所有的位都被清零。如圖1.0.2所示。
注意:爲了防止產生錯誤的中斷,在配置中斷檢測寄存器和邊沿寄存器的時候,應當清零GPIOIM寄存器中的IME位來屏蔽中斷引腳。配置GPIOIS寄存器的IS位和GPIOIBE寄存器的IBE位。清除GPIORIS寄存器。最後通過置位GPIOIM寄存器中的IME位來打開引腳。
在這裏插入圖片描述

圖1.0.2 GPIOIBE寄存器
GPIOIEV寄存器是中斷事件寄存器。置位該寄存器中對應的位來配置對應的引腳檢測上升沿或者高電平,這取決於GPIOIS 寄存器對應位的配置。清零該寄存器中的對應位則對應的引腳檢測下降沿或者低電平,這取決於GPIOIS寄存器中對應位的配置。復位之後所有的位都清零。如圖1.0.3所示。
在這裏插入圖片描述

圖1.0.3 GPIOIEV寄存器
GPIOIM寄存器是中斷掩碼寄存器。置位該寄存器中的對應位,則對應引腳上產生的中斷將通過組合中斷信號發送給中斷控制器。清零則對應的引腳產生的中斷不會發送給中斷控制器。復位之後所有的位都清零。如圖1.0.4所示。
在這裏插入圖片描述

圖1.0.4 GPIOIM寄存器
GPIORIS寄存器是源中斷狀態寄存器。當對應的引腳達到中斷條件時,該寄存器中對應的位被置位。如果中斷掩碼(GPIOIM)寄存器中的對應位被置位, 則發送中斷信號到中斷控制寄存器。某一位讀取爲0,則說明對應的引腳沒有產生中斷。對於電平觸發中斷,引腳上的中斷信號必須保持到中斷服務。一旦中斷信號達不到中斷邏輯檢測要求,則GPIOIS寄存器對應的RIS位將被清零。對於一個GPIO邊沿檢測中斷,GPIORIS寄存器中的RIS位通過置位GPIOICR寄存器中對應的位進行清零。GOUIMIS寄存器中的位反映RIS位的掩碼值。如圖1.0.5所示。
在這裏插入圖片描述

圖1.0.5 GPIORIS寄存器
GPIOMIS寄存器是掩碼中斷狀態寄存器。如果寄存器中對應位被置位,則對應的中斷將被髮送到中斷控制器。如果某一位被清零,則無論是否有中斷產生,
中斷都會被屏蔽掉。GPIOMIS寄存器是中斷掩碼之後的狀態。如圖1.0.6所示。
在這裏插入圖片描述

圖1.0.6 GPIOMIS寄存器
GPIOICR寄存器是中斷清零寄存器。對於邊沿檢測中斷,置位GPIOICR寄存器中對應的位,則會清除GPIORIS和GPIOMIS寄存器中對應的位。如果中斷是電平檢測,則該寄存器中的對應位沒有影響。另外,向該寄存器中寫入0也沒有任何影響。如圖1.0.7所示。
在這裏插入圖片描述

圖1.0.7 GPIOICR寄存器
1.2實驗現象
本實驗在是官方CC3200SDK_1.2.0中Interrupt例程代碼的基礎上修改得來的,打開Interrupt_Demo,由於本次實驗用到串口和按鍵,所以在mian函數的PinMuxConfig()中配置了串口0的輸入輸出以及GPIO_13和GPIO_22的方向爲輸入。
本次實驗的關鍵是在ButtonIntInit()函數中,該函數如圖1.0.8所示。
在這裏插入圖片描述

圖1.0.8 ButtonIntInit()函數
在該函數中吧GPIO_13與GOIO_22配置爲下降沿觸發,觸發的中斷函數爲Button1IntHandler()以及Button2IntHandler(),進入中斷後,首先清除標誌位,然後通過串口0打印出“Button1”以及“Button2”。
打開Uniflash,把編譯後生成bin文件下載到板子上(參考GPIO小節),把串口選擇的撥碼的第一個“RXD”以及“CH340G_VCC”撥到ON,這裏我們用到了串口0的接收,打開串口調試助手,選擇對應的串口號,波特率設置爲115200,打開串口,a按下復位,可以看到串口打印信息如圖1.0.9所示。
在這裏插入圖片描述

圖1.0.9 復位時串口打印
按下板子上的SW2和SW3可以看到串口打印信息如圖1.1.0所示。
在這裏插入圖片描述

圖1.1.0 按下按鍵後串口打印

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