28335外部中斷基本特點
- 7個可屏蔽中斷源和1個不可屏蔽外部中斷源
- GPIO0-31可選的中斷源為XINT1(可屏蔽中斷),XINT2和XNMI(不可屏蔽中斷)
- GPIO32-GPIO63可選的中斷源為XINT3-7
- 外部中斷的觸發方式可選上升沿或下降沿觸發
- 外部中斷外設和其他外設不一樣,在中斷函數中只用清除PIE中斷即可不用清除外設中斷。
外部中斷配置過程
其實28335的外部中斷配置相對其他外設的配置來說比較簡單。不過需要注意XNMI和CPU定時器1中斷一起使用時,需要將其中斷的映射位置配置好。
- 首先將需要配置的GPIO端口配置為通用輸入端口。上拉不上拉,采樣次數和與不與系統時鍾同步都無所謂,不會影響中斷的配置。不過如果噪聲過大的話,建議使能上拉和選擇合適的輸入采樣濾波。這里以GPIO34為例,將其配置為上升沿觸發XINT3的中斷輸入源。下面所有寄存器的配置受到EALLOW的保護,因此需要解除保護在進行設置。
GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0; //相應端口配置為通用IO
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 0; //輸入
GpioCtrlRegs.GPBCTRL.bit.QUALPRD0 = 1; //輸入濾波采樣周期為2*1 Tsysclk(系統時鍾)
GpioCtrlRegs.GPBQSEL1.bit.GPIO34 = 1; //三次采樣
GpioCtrlRegs.GPBPUD.bit.GPIO34 = 0; //使能內部上拉 - 將GPIO配置到響應的中斷源上。
//下面這句話按手冊應該賦值為2,但是寫34也沒錯,想一想為什么?
GpioIntRegs.GPIOXINT3SEL.bit.GPIOSEL = 34; //選擇34端口為外部中斷3中斷源 - 選擇觸發中斷的方式。
XIntruptRegs.XINT3CR.bit.POLARITY = 1; //上升沿觸發 - 使能外部中斷
XIntruptRegs.XINT3CR.bit.ENABLE = 1; //使能外部中斷 - 最后使能PIE中斷和CPU中斷,如果需要還可以重新定義中斷入口函數。
PieCtrlRegs.PIEIER12.bit.INTx1 = 1; //使能PIE外部中斷3
IER |= M_INT12; //使能第十二組CPU中斷
PieVectTable.XINT3 = &Xint3_ISR; //從新定義中斷入口函數 - 上面基本上已經完成了外部中斷的配置,但是對於XNMI來說需要加入下面這句話,以防止CPUTimer1中斷連接到不可屏蔽中斷上。
XIntruptRegs.XNMICR.bit.SELECT = 0; //Timer1連到int13,XNMI連接到NMI