PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : وقفه aic، چرا برنمی گرده به برنامه اصلی؟!



slh
10-04-2012, 21:48
سلام خدمت همه اساتید.
مشکل این برنامه چیه که وقتی تایمر سرریز شد، میاد به روال وقفه ولی دوباره بر نمی گرده به برنامه اصلی و روال وقفه رو همین جوری مثل حلقه بینهایت اجرا می کنه؟!
آیا ممکنه که اشکال از این باشه که پرچم وقفه وقتی "1" شد، چون که دیگه "1" میمونه، AIC هر لحظه که وقفه هارو چک میکنه، میبینه که باید بره تو این روال؟ اگه اینجوریه چجوری میشه صفرش کرد؟:unh:



#include <at91sam7s64.h>
#include <delay.h>
#include <pio.h>


__irq void TC0_handler(void)
{

porta_set=0x1;
delay_ms(500);
porta_rst=0x1;
delay_ms(500);

*AT91C_AIC_EOICR=0x1;

}

int main()
{


porta_output=0x3;

*AT91C_PMC_PCER= (1<<AT91C_ID_TC0);
*AT91C_TC0_CMR=0x4004;
*AT91C_TC0_CCR=0x5;
*AT91C_TC0_IER=(1<<0);

AT91C_BASE_AIC->AIC_SVR[AT91C_ID_TC0] = (unsigned int) TC0_handler;
AT91C_BASE_AIC->AIC_SMR[AT91C_ID_TC0] = 0x40;
AT91C_BASE_AIC->AIC_ISCR = (1<<AT91C_ID_TC0);
AT91C_BASE_AIC->AIC_IECR = (1<<AT91C_ID_TC0);

while (1)
{
porta_set=0x2;
delay_ms(200);
porta_rst=0x2;
delay_ms(200);

}

slh
13-04-2012, 22:03
دوستانی هم که مثل من به همچین مشکلی برخوردند بهشون بگم که متوجه شدم که ایراد از کجا بود:
باید در پایان روال وقفه، علاوه بر

*AT91C_AIC_EOICR=0x1;
، عبارت

a= *AT91C_TC0_SR;
رو هم اضافه می کردم.:lol: