[英]Writing GPIO Interrupt Handlers for LPC1769 Cortex M3
是否有一個用於ARM Cortex-M3的簡單GPIO中斷示例?
我已經編寫了一些代碼,但是不知何故中斷似乎不會觸發:
#include "LPC17xx.h"
#include "lpc17xx_pinsel.h"
#include "lpc17xx_gpio.h"
void EINT3_IRQHandler(void) {
NVIC_ClearPendingIRQ(EINT3_IRQn);
puts("triggered"); // fired
}
int main() {
/** ... **/
/** ... **/
// listen for input on INPUT pin @ GPIO port 1, pin 31
PINSEL_CFG_Type PinCfg;
PinCfg.Funcnum = 0;
PinCfg.OpenDrain = 0;
PinCfg.Pinmode = 0;
PinCfg.Portnum = 1;
PinCfg.Pinnum = 31;
PINSEL_ConfigPin(&PinCfg);
GPIO_SetDir(port, 1 << pin, 0);
NVIC_EnableIRQ(EINT3_IRQn);
while(1); // wait
/** ... **/
/** ... **/
return 0;
}
我一直在網上/ GitHub上搜索LPC1769 Cortex M3的簡單GPIO中斷示例,但沒有結果。 但是,似乎:
EINT_3
。 EINT3_IRQHandler
被覆蓋。 怎么了?
在LPC17xx上,您具有端口0和2的中斷允許寄存器,請參見UM10360.pdf第9.5.6章以供參考。 您在端口1、3和4上沒有GPIO中斷-您的代碼似乎使用端口1.31,而后者沒有GPIO中斷。
在異常處理程序中,您一定不要忘記清除IO0IntClear
和IO2IntClear
的intterupt標志。 否則,即使使用NVIC_ClearPendingIRQ()
,否則將重新觸發處理程序函數。
處理函數的“正確”名稱可能取決於您的工具鏈。
在用戶代碼中定義時,IRQ處理程序EINT3_IRQHandler被覆蓋。
我不知道該特定設備,但是我想您需要從特權模式調用這些指令。 我的猜測是,如果從用戶模式調用這些指令不會執行任何操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.