امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5
وقفه PIO در SAM7
نویسنده پیام
hmg آفلاین
تازه وارد

ارسال‌ها: 8
موضوع‌ها: 1
تاریخ عضویت: شهریور ۱۳۸۸

تشکرها : 9
( 3 تشکر در 3 ارسال )
ارسال: #1
وقفه PIO در SAM7
سلام
برنامه زیر اینتراپت PA.15 رو فعال میکنه که حساس به لبه بالارونده از صفر به یک میباشد به این صورت که اگر قبل از اتصال تغذیه به میکرو PA.15 رو گراند کنیم، با اتصال تغذیه، برنامه main اجرا شده و led متصل به PB.21 شروع به چشمک زدن میکند و در صورتیکه PA.15 رو از GND جدا کنیم برنامه وقفه اجرا میشود و led متصل به PB.19 به مدت 5 ثانیه روشن میشود و سپس خاموش میشود. اما مشکل اینجا است که روتین اینتراپت فقط یکبار اجرا میشود. و مشکل احتمالا در زیربرنامه وقفه میباشد و باید به رجیستر های AIC_EOICR و AIC_ICCR مقادیر مناسب رو اختصاص داد. در هر صورت کسی میتونه مشکل این برنامه رو حل کنه؟


#include "AT91SAM7X256.h"
#include "lib_AT91SAM7X256.h"
#include "delay.h"
//*************************interrupt rutine********************
void isr_pi_ob (void)
{

AT91F_PIO_SetOutput (AT91C_BASE_PIOB, AT91C_PIO_PB19);
delay_s(5);
AT91F_PIO_ClearOutput(AT91C_BASE_PIOB, AT91C_PIO_PB19);

//AT91C_BASE_AIC->AIC_EOICR = AT91C_BASE_TC1->TC_SR;
//AT91C_BASE_AIC->AIC_EOICR = AT91C_BASE_AIC ->AIC_ISR;
AT91C_BASE_AIC->AIC_EOICR = AT91C_BASE_PIOA ->PIO_ISR;

//AT91C_BASE_AIC->AIC_ICCR = (1 << AT91C_ID_TC1); /* Interrupt Ack*/
AT91C_BASE_AIC->AIC_ICCR = (1 << AT91C_ID_IRQ0 ); /* Interrupt Ack*/
//AT91C_BASE_AIC->AIC_ICCR = (1 << AT91C_ID_PIOA); /* Interrupt Ack*/

*AT91C_AIC_EOICR = 0; /* End of Interrupt*/
}
//****************************************8
main(void){

// Setup interrupts
AT91F_AIC_ConfigureIt(AT91C_BASE_AIC, AT91C_ID_PIOA, AT91C_AIC_PRIOR_LOWEST, 0, isr_pi_ob);
AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_PIOA);

// Setup PIO
AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PIOA); // Enable clock
AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PIOB); // Enable clock
AT91F_PIO_CfgInput(AT91C_BASE_PIOA, AT91C_PIO_PA15); // Input on PA15
AT91F_PIO_InterruptEnable(AT91C_BASE_PIOA, AT91C_PIO_PA15); // Interrupt on PA15


AT91F_PIO_CfgOutput(AT91C_BASE_PIOB, AT91C_PIO_PB19);
AT91F_PIO_CfgOutput(AT91C_BASE_PIOB, AT91C_PIO_PB21);
AT91F_PIO_ClearOutput(AT91C_BASE_PIOB, AT91C_PIO_PB21);
while(1){

AT91F_PIO_ClearOutput(AT91C_BASE_PIOB, AT91C_PIO_PB21);
delay_s(1);
AT91F_PIO_SetOutput (AT91C_BASE_PIOB, AT91C_PIO_PB21);
delay_s(1);
}
}
۲۴-دى-۱۳۸۹, ۰۰:۴۹:۰۲
ارسال‌ها
پاسخ


پیام‌های داخل این موضوع
وقفه PIO در SAM7 - توسط hmg - ۲۴-دى-۱۳۸۹, ۰۰:۴۹:۰۲
RE: وقفه PIO در SAM7 - توسط ha_60 - ۲۴-دى-۱۳۸۹, ۱۲:۲۳:۲۵,
RE: وقفه PIO در SAM7 - توسط salehjg - ۰۷-بهمن-۱۳۸۹, ۲۳:۱۹:۲۸,
RE: وقفه PIO در SAM7 - توسط محمد حسینی - ۰۸-بهمن-۱۳۸۹, ۰۱:۱۶:۴۳,
RE: وقفه PIO در SAM7 - توسط hmg - ۱۸-اسفند-۱۳۸۹, ۰۰:۰۵:۵۰,

موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  [سوال] وقفه ی متناوب با RTT در AT91 salehjg 4 3,228 ۰۶-بهمن-۱۳۹۲, ۱۷:۰۳:۵۲
آخرین ارسال: sharin

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS