سلام
من سه تا وقفه خارجی INT رو فعال کردم . ولی نمی دونم چرا بدون این که INT0 رو تحریک کنم به صورت خود سر می ره زیر برنامه شو اجرا می کنه . توی INT1و INT2 همچین مشکلی به وجود نیومد . در ضمن پایه ها رو هم با مقاومت 10 کیلو زمین کردم .
با تشکر
من سه تا وقفه خارجی INT رو فعال کردم . ولی نمی دونم چرا بدون این که INT0 رو تحریک کنم به صورت خود سر می ره زیر برنامه شو اجرا می کنه . توی INT1و INT2 همچین مشکلی به وجود نیومد . در ضمن پایه ها رو هم با مقاومت 10 کیلو زمین کردم .
با تشکر
کد:
#include <stdint.h> #include "LPC17xx.h" #define LED_NUM 8 /* Number of user LEDs */ const unsigned long led_mask[] = { 1UL<<0, 1UL<<1, 1UL<<2, 1UL<< 3, 1UL<< 4, 1UL<< 5, 1UL<< 6, 1UL<< 7 }; int idxCur = -1; /* current led position from 0..7 */ int idxOld = 0; /* old led position from 0..7 */ int dir = 1; /* direction for switching the LED */ void EINT3_IRQHandler() { LPC_SC->EXTINT = 0x00000008; LPC_GPIO0->FIOCLR = 0x00000001; } void EINT2_IRQHandler() { LPC_SC->EXTINT = 0x00000004; LPC_GPIO0->FIOCLR = 0x00000001; } /**/ void EINT1_IRQHandler() { LPC_SC->EXTINT = 0x00000002; LPC_GPIO0->FIOCLR = 0x00000001; } void EINT0_IRQHandler() /*INT0 interrupt if the standard was EINT1_IRQHandler ()*/ { LPC_SC->EXTINT = 0x00000001; /* clear pending interrupt */ LPC_GPIO0->FIOCLR = 0x00000001; /* switch off old LED position */ /* switch on current LED position */ } int main (void) { LPC_GPIO0->FIODIR = 0x000000FF; LPC_GPIO0->FIOSET = 0x00000001; SystemInit(); /* initialize system */ /* direction for switching the LED */ /* switch on first LED */ LPC_PINCON->PINSEL4 |= 1 << 26; // set P2.12 as EINT2 LPC_SC->EXTMODE = 0x00000008; // EINT2 edge trigger if EXTMODE=0 then level-sensitive LPC_SC->EXTPOLAR = 1; // EINT2 is falling edge by default if EXTPOLAR=1 then NVIC_EnableIRQ(EINT3_IRQn); LPC_PINCON->PINSEL4 |= 1 << 24; // set P2.12 as EINT2 LPC_SC->EXTMODE = 0x00000004; // EINT2 edge trigger if EXTMODE=0 then level-sensitive LPC_SC->EXTPOLAR = 1; // EINT2 is falling edge by default if EXTPOLAR=1 then NVIC_EnableIRQ(EINT2_IRQn); LPC_PINCON->PINSEL4 |= 1 << 22; // set P2.11 as EINT1 LPC_SC->EXTMODE = 0x00000002; // EINT1 edge trigger LPC_SC->EXTPOLAR = 1; // EINT1 is rising edge by default NVIC_EnableIRQ(EINT1_IRQn); LPC_PINCON->PINSEL4 |= 1 << 20; // set P2.10 as EINT0 LPC_SC->EXTMODE = 0x00000001; // EINT0 edge trigger LPC_SC->EXTPOLAR = 1; // EINT0 is rising edge by default NVIC_EnableIRQ(EINT0_IRQn); while (1); }