PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : وقفه در lpc 1768



avr_rva
11-03-2013, 23:25
سلام به همه مهندسین
من با coide یه فلشر نوشتم و میخواستم زمانی که وقفه خارجی فعال میشه led ها به اون صورت که من نوشتم تو یه حلقه بی نهایت ثابت بمونه اما زمانی که وقفه خارجی رو فعال میکنم led ها به یه صورت دیگه ثابت میمونه حتی اومدم و یه نوع فلشر با زمان متفاوت با فلشر خارج از حلقه رو توی حلقه نوشتم ولی باز ledها به همون صورت باقی موند.
این رو بگم که تا زمانی وقفه خارجی رو فعال نکردم کد خارج از وقفه درست کار میکنه که یه فلشر هست که سرعت اون کم وزیاد میشه(ضمنا من این برنامه رو روی برد lpc1768 فروشگاه تست کردم)
این هم کدش


#include"lpc17xx_gpio.h"
#include"delay.h"
int i,d,a;
d=2;
int main(void)
{
GPIO_SetDir(2,1<<11,0);
GPIO_SetDir(2,1<<12,0);
GPIO_SetDir(2,0x000000ff,1);
GPIO_IntCmd(2,1<<10,1);
NVIC_EnableIRQ(EINT3_IRQn);
while(1)
{
GPIO_ClearValue(2,0x000000ff);
for(i=0;i<10;i++)
{
GPIO_SetValue(2,0x0000000f);
if(d==0)
{
d=1;
}
delay_ms(d);
}
GPIO_ClearValue(2,0x000000ff);
GPIO_SetValue(2,0x000000f0);
delay_ms(10*d);
if(!(GPIO_ReadValue(2)&1<<11))
{
d++;
delay_ms(50);
}
if(!(GPIO_ReadValue(2)&1<<12))
{
d--;
delay_ms(50);
}
if(GPIO_GetIntStatus(2,1<<10,1))
{
while(1)
GPIO_SetValue(2,0x00000033);

}

}
}

avr_rva
12-03-2013, 11:56
سلام مجدد
کسی نیست ما رو از چاله در بیاره( و به سمت چاه هدایت فرماید):sa:

avr_rva
12-03-2013, 12:34
جون من f1 بفرمایید(help):sa:

avr_rva
12-03-2013, 14:34
یه جوان مرد ما رو از حالت erorr ii998)در بیاره

avr_rva
12-03-2013, 23:38
ای روزگار ببین کسی دست ما رو که نمیگیره هیچ نگاهمون هم نمیکنه:sa:

avr_rva
13-03-2013, 08:57
نبووووووووووووووووووووووو ووووووووووووووووووووووووو وووووووووووووووووووووود:x

mansoory
13-03-2013, 10:20
سلام به همه مهندسین
من با coide یه فلشر نوشتم و میخواستم زمانی که وقفه خارجی فعال میشه led ها به اون صورت که من نوشتم تو یه حلقه بی نهایت ثابت بمونه اما زمانی که وقفه خارجی رو فعال میکنم led ها به یه صورت دیگه ثابت میمونه حتی اومدم و یه نوع فلشر با زمان متفاوت با فلشر خارج از حلقه رو توی حلقه نوشتم ولی باز ledها به همون صورت باقی موند.
این رو بگم که تا زمانی وقفه خارجی رو فعال نکردم کد خارج از وقفه درست کار میکنه که یه فلشر هست که سرعت اون کم وزیاد میشه(ضمنا من این برنامه رو روی برد lpc1768 فروشگاه تست کردم)
این هم کدش


#include"lpc17xx_gpio.h"
#include"delay.h"
int i,d,a;
d=2;
int main(void)
{
gpio_setdir(2,1<<11,0);
gpio_setdir(2,1<<12,0);
gpio_setdir(2,0x000000ff,1);
gpio_intcmd(2,1<<10,1);
nvic_enableirq(eint3_irqn);
while(1)
{
gpio_clearvalue(2,0x000000ff);
for(i=0;i<10;i++)
{
gpio_setvalue(2,0x0000000f);
if(d==0)
{
d=1;
}
delay_ms(d);
}
gpio_clearvalue(2,0x000000ff);
gpio_setvalue(2,0x000000f0);
delay_ms(10*d);
if(!(gpio_readvalue(2)&1<<11))
{
d++;
delay_ms(50);
}
if(!(gpio_readvalue(2)&1<<12))
{
d--;
delay_ms(50);
}
if(gpio_getintstatus(2,1<<10,1))
{
while(1)
gpio_setvalue(2,0x00000033);

}

}
}



خداییش من یکی دوبار خوندم نفهمیدم چی گفتید!
اگه وقفه فعال کرددی پس تابع وقفه کجاست؟؟

mzarkoob
13-03-2013, 14:20
خداییش من یکی دوبار خوندم نفهمیدم چی گفتید!
اگه وقفه فعال کرددی پس تابع وقفه کجاست؟؟
دقیقا برای منم همین اتفاق افتاد!!!
بهتر نبست به جای اینکه یک سوال را گنگ مطرح کنیم و ده بار بگیم چرا کسی نیست یک بار سوال را کامل مطرح کنیم؟

avr_rva
13-03-2013, 15:51
منظورم این هست که این فلشر تا زمانی که وقفه رو فعال نکردم کار میکنه ولی وقتی وقفه خارجی رو فعال کردم کار نمیکنه


#include"lpc17xx_gpio.h"
//-----------------------------------
#include"delay.h"
void ENTE3_IRQHandler(void);
//-----------------------------------
int i,d,a;
d=2;
int main(void)
{
GPIO_SetDir(2,1<<11,0);
GPIO_SetDir(2,1<<12,0);
GPIO_SetDir(2,0x000000ff,1);
GPIO_IntCmd(2,1<<10,1);
NVIC_EnableIRQ(EINT3_IRQn);
while(1)
{
GPIO_ClearValue(2,0x000000ff);
for(i=0;i<10;i++)
{
GPIO_SetValue(2,0x0000000f);
if(d==0)
{
d=1;
}
delay_ms(d);
}
GPIO_ClearValue(2,0x000000ff);
GPIO_SetValue(2,0x000000f0);
delay_ms(10*d);
if(!(GPIO_ReadValue(2)&1<<11))
{
d++;
delay_ms(50);
}
if(!(GPIO_ReadValue(2)&1<<12))
{
d--;
delay_ms(50);
}
if(GPIO_GetIntStatus(2,1<<10,1))
{
while(1)
GPIO_SetValue(2,0x000000ff);

}

}
}

mzarkoob
13-03-2013, 23:29
سلام
زیاد وارد جزییات برنامتون نشدم اما از روی توضیحی که دادید: برنامه داره کار خودش کار می کند تا زمانی که وقفه ای بیاید. میره در زیر روال وقفه و کاری که براش مشخص کرده ایم را انجام می دهد. در اینجا موقع خروج باید پرچم وقفه را پاک کنیم و از زیر روال خارج بشیم و گرنه برنامه تا قیام قیامت اون تو میمونه و ما را نفرین میکنه :mrgreen:

mansoory
14-03-2013, 09:24
سلام
زیاد وارد جزییات برنامتون نشدم اما از روی توضیحی که دادید: برنامه داره کار خودش کار می کند تا زمانی که وقفه ای بیاید. میره در زیر روال وقفه و کاری که براش مشخص کرده ایم را انجام می دهد. در اینجا موقع خروج باید پرچم وقفه را پاک کنیم و از زیر روال خارج بشیم و گرنه برنامه تا قیام قیامت اون تو میمونه و ما را نفرین میکنه :mrgreen:

غیر از مساله ای که فرمودید تابع وقفه خالیه!
دوم اینکه، توی برنامه یه جایی هست که گفته:


if(GPIO_GetIntStatus(2,1<<10,1))
{
while(1)
GPIO_SetValue(2,0x000000ff);

}
یه حلقه بینهایت داخل برنامه قرار گرفته که موجب میشه برنامه همونجا قفل بشه.
کلا به نظر میاد آنچه که باید در تابع وقفه بنویسند رو در تابع Main نوشته اند.

avr_rva
14-03-2013, 15:15
این هم یک سری اصلاح
1-تابع وقفه
2-حذف حلقه بینهابت در وقفه
3-پاک کردن پرچم وقفه بعد از اجرا
ولی بازم همون آش هست و ه.ون کاسه:(


#include"lpc17xx_gpio.h"
//-----------------------------------
#include"delay.h"
void ENTE3_IRQHandler(void);
//-----------------------------------
int i,d,a;
d=2;
int main(void)
{
GPIO_SetDir(2,1<<11,0);
GPIO_SetDir(2,1<<12,0);
GPIO_SetDir(2,1<<10,0);
GPIO_SetDir(2,0x000000ff,1);
GPIO_IntCmd(2,1<<10,1);
NVIC_EnableIRQ(EINT3_IRQn);
while(1)
{
GPIO_ClearValue(2,0x000000ff);
for(i=0;i<10;i++)
{
GPIO_SetValue(2,0x0000000f);
if(d==0)
{
d=1;
}
delay_ms(d);
}
GPIO_ClearValue(2,0x000000ff);
GPIO_SetValue(2,0x000000f0);
delay_ms(10*d);
if(!(GPIO_ReadValue(2)&1<<11))
{
d++;
delay_ms(50);
}
if(!(GPIO_ReadValue(2)&1<<12))
{
d--;
delay_ms(50);
}
if(GPIO_GetIntStatus(2,1<<10,1))
{
GPIO_ClearInt(2,1<<10);
GPIO_SetValue(2,0x000000ff);
delay_ms(5000);

}

}
}

avr_rva
14-03-2013, 23:11
f1بفرمایید:(

mzarkoob
15-03-2013, 00:40
این هم یک سری اصلاح
1-تابع وقفه
2-حذف حلقه بینهابت در وقفه
3-پاک کردن پرچم وقفه بعد از اجرا
ولی بازم همون آش هست و ه.ون کاسه:(

در تابع وقفه که چیزی ننوشتید آخه !!!

sigma-mx
15-03-2013, 00:51
شما تابع وقفه رو فقط بصورت prototype تعریف میکنید ولی از پیاده سازی خبری نیست !
شرط اتفاق افتادن وقفه باید تو روتین وقفه بررسی بشه نه تو main !
در واقع شما از توابع اینتراپت دارید بصورت polling استفاده میکنید !