سلام دوستان من مدتی است که دارم با میکروی SAM7S64 کار میکنم. تقریبا توانستم با قسمتهای دیگه کار کنم و از IAR سر در بیارم. در ضمن یک تاپیک هم زدم که برای بقیه دوستان که تمایل دارن کار کنم آموزشهایی را بدهم.
اما به خاطر درگیری که با اینترپت خارجی پیدا کردم نتونستم خوب اداره اش کنم. البته تصمیم دارم بعد از اینکه با اینترپت خارجی کار کردم دوباره به روزش کنم.
-----------------------------------------------------------
مشکل من اینه که اینترپت نمی زنه!!!!!
اگه برنامه یکم ناجور دیده میشه وقتی در IAR کپی کنید درست دیده میشه.
در این برنامه وقتی اینترپت زده میشه باید پورت A17 چند بار چشمک بزنه و بعد خاموش بشه.
در ضمن برای تست صفر یا یک بودن بعضی بیتها یک IF در حلقه while اصلی نوشتم که پین A16 را صفر یا یک می کنه.
برنامه :
void TC0_Interrupt()
{
set_port(17);
delay_ms(250);
clear_port(17);
delay_ms(250);
set_port(16);
set_port(17);
delay_ms(250);
clear_port(17);
delay_ms(250);
set_port(16);
set_port(17);
delay_ms(250);
clear_port(17);
delay_ms(250);
//
}
////////////////////////////////////////////////////////////////////////////////
void init_irq0()
{
// AT91C_BASE_AIC->AIC_SMR[(1<<AT91C_ID_IRQ0)]=(AT91C_AIC_SRCTYPE_POSITIVE_EDGE|IRQ0_prtiority);
// newHandler = TC0_Interrupt;
// AT91C_BASE_AIC->AIC_SVR[(1<<AT91C_ID_IRQ0)]=0x163 ;
// AT91C_BASE_AIC->AIC_IECR=(1<<AT91C_ID_IRQ0);
AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_IRQ0, IRQ0_prtiority,AT91C_AIC_SRCTYPE_POSITIVE_EDGE, TC0_Interrupt);
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_IRQ0);
}
//////////////////////////////////////////////////////////////////////////////
void main()
{
AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS;
clear_port(17);
init_irq0();
AT91C_BASE_AIC->AIC_ISCR=(1<<AT91C_ID_IRQ0);
lcd_init(16);
lcd_integer(256);
while(true)
{
if ((((AT91C_BASE_AIC->AIC_CISR)&0x2)!=0))
{
set_port(16);
delay_ms(250);
clear_port(16);
delay_ms(250);
AT91C_BASE_AIC->AIC_ICCR=(1<<AT91C_ID_IRQ0);
AT91C_BASE_AIC->AIC_IECR=(1<<AT91C_ID_IRQ0);
lcd_clear();
reg=AT91C_BASE_AIC->AIC_SVR[30];//(AT91C_ID_IRQ0)];//
lcd_integer(reg);
delay_ms(250);
}
else
{
clear_port(16);
delay_ms(250);
}
}
}
اما به خاطر درگیری که با اینترپت خارجی پیدا کردم نتونستم خوب اداره اش کنم. البته تصمیم دارم بعد از اینکه با اینترپت خارجی کار کردم دوباره به روزش کنم.
-----------------------------------------------------------
مشکل من اینه که اینترپت نمی زنه!!!!!
اگه برنامه یکم ناجور دیده میشه وقتی در IAR کپی کنید درست دیده میشه.
در این برنامه وقتی اینترپت زده میشه باید پورت A17 چند بار چشمک بزنه و بعد خاموش بشه.
در ضمن برای تست صفر یا یک بودن بعضی بیتها یک IF در حلقه while اصلی نوشتم که پین A16 را صفر یا یک می کنه.
برنامه :
void TC0_Interrupt()
{
set_port(17);
delay_ms(250);
clear_port(17);
delay_ms(250);
set_port(16);
set_port(17);
delay_ms(250);
clear_port(17);
delay_ms(250);
set_port(16);
set_port(17);
delay_ms(250);
clear_port(17);
delay_ms(250);
//
}
////////////////////////////////////////////////////////////////////////////////
void init_irq0()
{
// AT91C_BASE_AIC->AIC_SMR[(1<<AT91C_ID_IRQ0)]=(AT91C_AIC_SRCTYPE_POSITIVE_EDGE|IRQ0_prtiority);
// newHandler = TC0_Interrupt;
// AT91C_BASE_AIC->AIC_SVR[(1<<AT91C_ID_IRQ0)]=0x163 ;
// AT91C_BASE_AIC->AIC_IECR=(1<<AT91C_ID_IRQ0);
AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_IRQ0, IRQ0_prtiority,AT91C_AIC_SRCTYPE_POSITIVE_EDGE, TC0_Interrupt);
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_IRQ0);
}
//////////////////////////////////////////////////////////////////////////////
void main()
{
AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS;
clear_port(17);
init_irq0();
AT91C_BASE_AIC->AIC_ISCR=(1<<AT91C_ID_IRQ0);
lcd_init(16);
lcd_integer(256);
while(true)
{
if ((((AT91C_BASE_AIC->AIC_CISR)&0x2)!=0))
{
set_port(16);
delay_ms(250);
clear_port(16);
delay_ms(250);
AT91C_BASE_AIC->AIC_ICCR=(1<<AT91C_ID_IRQ0);
AT91C_BASE_AIC->AIC_IECR=(1<<AT91C_ID_IRQ0);
lcd_clear();
reg=AT91C_BASE_AIC->AIC_SVR[30];//(AT91C_ID_IRQ0)];//
lcd_integer(reg);
delay_ms(250);
}
else
{
clear_port(16);
delay_ms(250);
}
}
}
دیدگاه