سلام
من سه تا وقفه خارجی 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);
}

