DSP28335外部中斷的使用

    來源: 電機人生2023-07-08 05:21:45
      

    一、概述

    處理器的外部中斷主要用于捕抓外部輸入的高低電平。本篇文章將介紹DSP28335的外部中斷的使用。

    二、DSP28335外部中斷介紹


    (資料圖片僅供參考)

    DSP28335處理器共支持7個外部中斷XINT1XINT7,其中XINT1XINT2只能對GPIO0GPIO31配置;XINT3XINT7只對GPIO32~GPIO63配置。每一個外部中斷可以被選擇為正邊沿或負邊沿觸發。DSP28335的中斷系統框圖為:

    圖1 DSP中斷系統

    DSP28335中斷分為三級,分別為:外設級、PIE級、CPU級。如下圖所示:

    圖2 DSP28335的三級中斷機制

    DSP28335的三級中斷機制可以這樣理解(以外部中斷為例):外設級為像外部引腳輸入高低電平時,同時外設級的中斷使能了,這時候外設級會產生一個中斷標志位,PIE級檢測到該中斷標志位,同時PIE自己的中斷使能了,這時候PIE會產生一個中斷標志位,PIE的中斷標志位給CPU,當CPU的中斷使能位打開了,就會響應這個中斷。總的概況:一個外部中斷要得到CPU響應,要越過外設級中斷使能、PIE中斷使能、CPU中斷使能。

    圖3 DSP28335中斷過程

    從圖3可以看出,只有一道一道開關閉合,才能把中斷送到CPU,讓CPU去響應中斷。

    三、外部中斷涉及相關寄存器

    1. 外部中斷控制寄存器---XINTnCR【外設級】

    圖4 外部中斷控制寄存器---XINTnCR

    外部中斷控制寄存器用于控制上升沿觸發還是下降沿觸發,中斷使能。

    2. PIE這一級的寄存器【PIE級】

    (1)PIE中斷使能寄存器----PIEIERx[x=1~12]

    圖5 PIE中斷使能寄存器

    (2)PIE中斷標志寄存器----PIEIFRx[x=1~12]

    圖6 PIE中斷標志寄存器

    (3)PIE中斷應答寄存器----PIACK

    圖6 PIE中斷應答寄存器

    3.CPU這一級寄存器【CPU級】

    (1)CPU中斷標志寄存器---IFR

    圖7 CPU中斷標志寄存器

    (2)CPU中斷使能寄存器---IER

    圖8 CPU中斷使能寄存器

    四、DSP28335外部中斷實現

    DSP28335外部中斷實現主要有以下步驟:

    (1)失能CPU級中斷,并初始化PIE控制器和PIE中斷向量表;

    (2)使能IO口時鐘,配置IO口為輸入;

    (3)設置IO口與中斷線的映射關系;

    圖9 中斷映射表

    本次使用的是GPIO17,映射到XINT1,即INT1.4

    (4)指定中斷向量表中斷服務函數地址;

    (5)使能外設對應的PIE中斷**[PIE級使能];**

    (6)設置外部中斷觸發方式并使能中斷**[外設級使能];**

    (7)使能CPU級中斷及全局中斷**[CPU級使能];**

    (8)編寫外部中斷服務函數。

    編程實現:

    //外部中斷配置步驟//1。失能CPU級中斷,并初始化PIE控制器寄存器和PIE中斷向量表//2.使能IO時鐘,配置IO口為輸入//3.設置IO口與中斷線的映射關系//4.指定中斷向量表中斷服務函數地址//5.使能外設對應的PIE中斷//6.設置外部中斷觸發中斷觸發方式并使能中斷//7.使能CPU級中斷及全局中斷void EXTI_Init(void){

    // 步驟 1. 失能CPU級中斷,并初始化PIE控制器寄存器和PIE中斷向量表

    DINT; // 禁止CPU全局中斷  InitPieCtrl();  IER = 0x0000;    // 禁止CPU中斷和清除所有CPU中斷標志  IFR = 0x0000;  InitPieVectTable();      //初始化PIE中斷向量表,并使其指向中斷服務子程序(ISR)

    //步驟 2.使能IO時鐘,配置IO口為輸入EALLOW;//關閉寫保護

    SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;    //開啟GPIO時鐘  GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 0;     //配置為通用IO口  GpioCtrlRegs.GPADIR.bit.GPIO17 = 0;     //配置為輸入  GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0;     //配置為上拉  EDIS;//打開寫保護 //步驟3:設置IO口與中斷線的映射關系  EALLOW;  GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 17;//XINT1 對應 GPIO17腳(GPIO0-31配置XINT1、2;GPIO32-63配置XINT3~7)  EDIS;

    //步驟 4. 指定中斷向量表中斷服務函數地址EALLOW;PieVectTable.XINT1 = &EXTI_IRQ;EDIS;

    //步驟 5.使能外設對應的PIE中斷PieCtrlRegs.PIEIER1.bit.INTx4 = 1;//使能PIE 1 組 4通道 (這里需要查詢PIE的中斷矢量表 來確定使能的位)

    //6.設置外部中斷觸發中斷觸發方式并使能中斷XIntruptRegs.XINT1CR.bit.POLARITY = 0;//下降沿觸發有效XIntruptRegs.XINT1CR.bit.ENABLE = 1;//使能外部中斷

    //步驟 7. 使能CPU級中斷及全局中斷IER |= M_INT1;//使能INT1中斷通道 (對應的變量值在 DSP2833x_Device.h中已進行宏定義。要用|或符號賦值,防止改變其他位)

    EINT;//打開全局中斷  ERTM;//當使用仿真器調試時 開啟DEBUG中斷

    }

    int CNT=0;//步驟 8. 編寫中斷函數,在中斷函數結束前寫1清零PIEACK對應位interrupt void EXTI_IRQ(void){GpioDataRegs.GPCTOGGLE.bit.GPIO75 = 1;CNT = CNT+1;// DELAY_US(5000);//延時

    PieCtrlRegs.PIEACK.bit.ACK1 = 1;//寫1清零PIEACK對應位

    }

    主函數為:

    void main(void){

    InitSysCtrl();GIOP_Init();EXTI_Init();while(1){

    // GpioDataRegs.GPCSET.bit.GPIO75 = 1;}

    }

    通過上面的程序就能使用按鍵使得一個LED燈翻轉。

    *五、總結

    本篇文章介紹了DSP28335的外部中斷的使用,使用一個按鍵作為外部輸入,觸發LED燈進行翻轉。

    關鍵詞:

    責任編輯:sdnew003

    相關新聞

    版權與免責聲明:

    1 本網注明“來源:×××”(非商業周刊網)的作品,均轉載自其它媒體,轉載目的在于傳遞更多信息,并不代表本網贊同其觀點和對其真實性負責,本網不承擔此類稿件侵權行為的連帶責任。

    2 在本網的新聞頁面或BBS上進行跟帖或發表言論者,文責自負。

    3 相關信息并未經過本網站證實,不對您構成任何投資建議,據此操作,風險自擔。

    4 如涉及作品內容、版權等其它問題,請在30日內同本網聯系。