PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : روتین external intrrupt فقط یکبار اجرا میشه؟!



saeed_p61
13-02-2010, 14:23
سلام


من ext int0 رو به صورت زیر Init کردم:


//* define switch SW3 at PIO input for interrupt IRQ loop
AT91F_PIO_CfgInput(AT91C_BASE_PIOA, INP_ENC1_F1 | INP_ENC2_F1);


// open external IRQ interrupt
AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA, INP_ENC1_F1, 0);

// open external IRQ0 interrupt
AT91F_AIC_ConfigureIt (AT91C_BASE_AIC, AT91C_ID_IRQ0, PIO_INTERRUPT_LEVEL, AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE, InterruptEnc1);
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_IRQ0);و روتین رو به صورت زیر نوشتم :





void InterruptEnc1 ( void ) {
int dummy;

ctcEnc1++;

PORTA->PIO_PER = 0x00000008; /* Enable PIO for LED1..4 */
PORTA->PIO_OER = 0x00000008; /* LED1..4 are Outputs */
PORTA->PIO_SODR = 0x00000008;
PORTA->PIO_SODR = 0x00000008; /* Turn on LED's ("1") */

// printf ("%u--%u\n",ctcEnc1,ctcEnc2);

//* enable the next PIO IRQ
dummy =AT91C_BASE_PIOA->PIO_ISR;
//* suppress the compilation warning
dummy =dummy;


}
ولی فقط یکبار وارد روتین میشه و بعد از خروج از روتین میره داخل باقالی ها و حتی به while هم بر نمی گرده و یه جورایی هنگ میکنه ؟!
انگار آدرس برگشت گم میشه!

کسی میدونه مشکل کار من کجاست؟

mehrdadgh
13-02-2010, 19:22
اگه بیسکام بود می گفتم از دستورات استفاده کن

$hwstack = 32 ' default use 32 for the hardware stack

$swstack = 10 ' default use 10 for the SW stack

$framesize = 40 ' default use 40 for the frame space

در ضمن وقفه ها باید پول آپ شوند

morteza_rk
13-02-2010, 19:32
من که از c سر در نمیارم ، البته توی کدویژن یه چیزایی بلدم ولی نمی دونم این برنامه ی شما مال کدویژن هست یا نه؟

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

armstk
13-02-2010, 20:38
برنامه اي كه دوستمون قرار دادن نه با كدويژن هستش نه با بسكام
با keil نوشته شده و هنوز كامپايلر بيسيك براي آرم نيومده
در ضمن آقاي saeed-p61 سوالتون رو واضح تر بپرسين منظورتون رو نفهميدم

saeed_p61
13-02-2010, 23:11
ببینید این برنامه برای arm هستش و زبان آن c و کامپایلر keil3.3 هستش.
موضوع اینه که درهنگام وقوع وقفه خارجی فقط یکبار روتین intrrrupt اجرا میشه و بعد از بار اول دیگه با اومدن وقفه روتین اجرا نمیشه انگار یه جورایی وقفه mask میشه؟!
کسی تا حالا وقفه خارجی را با keil راه انداخته!