سلام!

آموزش وقفه در AVR رو قبلا گفته بودیم!

اگه نمیدونید وقفه چیه تو یه کلام میشه گفت! = زمانی که یکی از پایه ها تحریک بشه CPU برنامه در حال انجام رو رها میکنه و میره توی وقفه تا کدهایی که قبلا نوشته بودیم رو انجام بده و بعدش دوباره برمیگرده و کار خودش رو انجام میده!

خوب بریم سراغ وقفه توی LPC1768

توی برد ECA که من دارم کلید های دوم و سوم به پایه اینتراپت (=وقفه) وصله!

برای همین با تحریک این دو کلید میتونیم وارد وقفه بشیم!

برای اینکار ما میام و یه LED رو چشمک زن میکنیم و توی وقفه هم یه LED دیگه رو چشمک زن میکنیم!

وقتی کلید رو میزنیم چراف LED اولی که درحال چشمک زدن بود ثابت میشه و اون چراغ دومی چشمک میزنه بعد از چند ثانیه دوباره اون اولیه شروع به چشمک زدن میکنه و دومی خاموش میشه!

دلیل اینکه لامپ اولی بعد از اینکه کلید رو زدیم ثابت میشه اینه که CPU دیگه از حلقه خارق میشه و میره و برنامه وقفه رو میخونه! برای همین اولی ثابت و دومی چشمک زن میشه! و....


اینم از کد برنامه!

#include <LPC17xx.h>

void delay(){ //ایجاد تابع زمان برای ایجاد فاصله زمانی
int i;
for (i=0;i<5000000;i++);
}
void EINT3_IRQHandler(){ // تابع وقفه
int j;
if ((LPC_GPIOINT->IO2IntStatF & 1<<11)) { //فعال کردن وقفه برای پین مورد نظر که به کلید وصله

for(j=0;j<4;j++){ //ساخت لامپ چشمک زن در وقفه
LPC_GPIO2->FIOSET = 3<<4 ;
delay();
LPC_GPIO2->FIOCLR = 3<<4 ;
delay();
}
LPC_GPIOINT->IO2IntClr = 1<<11 ; // پایان دادن به وقفه

//اگر کد بالا نباشد سی پی بو از وقفه خارج نمیشه
}
if (LPC_GPIOINT->IO2IntStatF & 1<<12) {

for(j=0;j<4;j++){
LPC_GPIO2->FIOSET = 3<<6 ;
delay();
LPC_GPIO2->FIOCLR = 3<<6 ;
delay();
}
LPC_GPIOINT->IO2IntClr = 1<<12 ;
}
}

int main(){
LPC_GPIO2->FIODIR1 = 0x00 ;
LPC_GPIO2->FIODIR0 = 0xFF ;
LPC_GPIO2->FIOCLR0 = 0xFF ;

LPC_GPIOINT->IO2IntEnF = (1<<11)|(1<<12); // شناساندن تابع وقفه
NVIC_EnableIRQ(EINT3_IRQn); //فعال کردن وقفه

while(1){

LPC_GPIO2->FIOSET=1; //چراغ چشمک زن
delay();
LPC_GPIO2->FIOCLR=1;
    delay();


}
}  

امیدوارم چیزی فهمیده باشید!
اگرهم مشکل داشتید در حد توانم در خدمتم!

فعلا
یاعلی مدد....