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);
}
مشکل این برنامه چیه که وقتی تایمر سرریز شد، میاد به روال وقفه ولی دوباره بر نمی گرده به برنامه اصلی و روال وقفه رو همین جوری مثل حلقه بینهایت اجرا می کنه؟!
آیا ممکنه که اشکال از این باشه که پرچم وقفه وقتی "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);
}