1

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;
}

LPC1769 Cortex M3 の単純な GPIO 割り込みの例をオンライン/GitHub で検索しましたが、結果が得られません。ただし、次のように表示されます。

  1. 対象の GPIO 割り込みはEINT_3.
  2. ユーザーコードで定義されている場合、IRQ ハンドラーEINT3_IRQHandlerは上書きされます。

なにが問題ですか?

4

2 に答える 2

2

LPC17xx には、ポート 0 および 2 用の割り込みイネーブル レジスタがあります。リファレンスについては、UM10360.pdf の第 9.5.6 章を参照してください。ポート 1、3、および 4 に GPIO 割り込みがありません。コードはポート 1.31 を使用しているように見えますが、これは GPIO 割り込みを持つことができません。

IO0IntClear例外ハンドラでは、との割り込みフラグをクリアすることを忘れてはなりませんIO2IntClear。そうしないと、 を使用している場合でも、ハンドラー関数が再トリガーされますNVIC_ClearPendingIRQ()

ハンドラー関数の「正しい」名前は、ツールチェーンによって異なる場合があります。

于 2014-03-22T11:00:59.887 に答える