اطلاعیه

Collapse
No announcement yet.

نوشتن تابع انتراپت تو keil

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    نوشتن تابع انتراپت تو keil

    سلام بچه ها . ما که هر دفه یه سوال پرسیدیم انگار کسی نتونست جواب بده . :cry2: :angry: حداقل این یکی و که آسون هستو جواب بدین بهم .
    من می خوام اینتراپت بدم به peripheral هام . مثلا می خوام اینتراپت خارجی مو فعال کنم و توی تابع انتراپتش بگم یه LED رو 1ثانیه روشن کنه . اگه میشه بگین باید چی کار کنم . تو IAR رو می دونم ولی KEIL رو میخوام . :cry2:
    { خلاف قوانین - حذف شد }

    #2
    پاسخ : نوشتن تابع انتراپت تو keil

    زیاد ربطی به keil یا iar نداره
    برای راه اندازی اینتراپ بخش AIC دیتاشیت رو بخونین. کار سختی نیست.
    AIC : Advanced Interrupt Controller

    تابع اینتراپت باید با خاصیت irq__ شروع بشه. (دو تا underline)

    آخرش هم باید تو رجیستر AIC_EOICR یه مقداری نوشته بشه تا میکرو بفهمه روتین اینتراپت تموم شد.

    __irq void IRQ_IRQ0(void)
    {
    *AT91C_PIOB_SODR = (1 << 19);
    *AT91C_AIC_EOICR = 0; //***********
    }


    هر پریفرال یه شماره ID داره که تو رجیسترهای AIC با توجه به اون شماره تنظیمات رو انجام بدین.
    سه تا رجیستر مهم هست.
    SMR
    SVR
    IECR
    اولی برای تعیین نوع وقفه و اولویت
    دومی آدرس روتین وقفه
    سومی برای فعال کردن وقفه

    AT91S_AIC *pAIC = AT91C_BASE_AIC;
    pAIC->AIC_SMR[AT91C_ID_IRQ0] = AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE | 7;
    pAIC->AIC_SVR[AT91C_ID_IRQ0] = (unsigned long) IRQ_IRQ0;
    pAIC->AIC_IECR = (1 << AT91C_ID_IRQ0);


    من مدتیه میکرو کار نمی کنم خیلی از جرئیات یادم نیست. دیتاشیت رو بخونین خیلی خوب گفته... (عادت کردم به همه میگم دیتاشیت... آخه خیلی ها دیتاشیت رو باور ندارن!)
    https://www.linkedin.com/in/mohammadhosseini69

    http://zakhar.blog.ir

    دیدگاه

    لطفا صبر کنید...
    X