簡體   English   中英

為LPC1769 Cortex M3編寫GPIO中斷處理程序

[英]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中斷示例,但沒有結果。 但是,似乎:

  1. 感興趣的GPIO中斷為EINT_3
  2. 在用戶代碼中定義時,IRQ處理程序EINT3_IRQHandler被覆蓋。

怎么了?

在LPC17xx上,您具有端口0和2的中斷允許寄存器,請參見UM10360.pdf第9.5.6章以供參考。 您在端口1、3和4上沒有GPIO中斷-您的代碼似乎使用端口1.31,而后者沒有GPIO中斷。

在異常處理程序中,您一定不要忘記清除IO0IntClearIO2IntClear的intterupt標志。 否則,即使使用NVIC_ClearPendingIRQ() ,否則將重新觸發處理程序函數。

處理函數的“正確”名稱可能取決於您的工具鏈。

在用戶代碼中定義時,IRQ處理程序EINT3_IRQHandler被覆蓋。

我不知道該特定設備,但是我想您需要從特權模式調用這些指令。 我的猜測是,如果從用戶模式調用這些指令不會執行任何操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM