اطلاعیه

Collapse
No announcement yet.

سوالی در رابطه با توابع NVIC مربوط به UART میکروکنترلر LPC1768

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

    سوالی در رابطه با توابع NVIC مربوط به UART میکروکنترلر LPC1768

    سلام
    دوستان اونجایی که اشتباه گفتم رو تصحیح کنید و اون سوالم رو هم جواب بدید ممنون میشم.
    خب این 6-7 تا تابع رو یه توضیح میدم(چیزی که فهمیدم) و بعد....
    NVIC_EnableIRQ : فعال کردن وقفه
    NVIC_DisableIRQ : غیر فعال کردن وقفه
    NVIC_SetPriority : تعیین اولویت وقفه (چطور این کارو انجام میده؟ یعنی طبق شکل زیر میاد جای اون وقفه ها رو عوض میکنه؟ شمارشون رو عوض میکنه؟ درسته؟ اصلا ترتیب رخ دادن وقفه های همزمان مثل شکل زیر هستش یا فرق داره؟ )
    NVIC_GetPriority : فهمیدن اولویت وقفه
    NVIC_SetPendingIRQ - NVIC_ClearPendingIRQ - NVIC_GetPendingIRQ : این 3 تابع مربوطه به وقفه معلق، حالا این وقفه معلق دقیقا چیه؟ و چرا تابعی برا پاک کردنش هم داره؟

    کد:
    [FONT=Yekan]void NVIC_EnableIRQ(IRQn_Type IRQn)[/FONT]void NVIC_DisableIRQ(IRQn_Type IRQn)
    void NVIC_SetPriority(IRQn_Type IRQn, int32_t priority)
    uint32_t NVIC_GetPriority(IRQn_Type IRQn)
    void NVIC_SetPendingIRQ(IRQn_Type IRQn)
    void NVIC_ClearPendingIRQ(IRQn_Type IRQn)
    [FONT=Yekan]IRQn_Type NVIC_GetPendingIRQ(IRQn_Type IRQn)[/FONT]
    اللَّهُمَّ صَلِّ عَلَى مُحَمَّدٍ وآلِ مُحَمَّدٍ وعَجِّلْ فَرَجَهُمْ

    اگه دوس دارید سریع به جواب برسید :
    1) قبل از پرسیدن سوال، بسرچید.
    2) سوالاتون رو با جزئیات کامل مطرح کنید.

    #2
    پاسخ : سوالی در رابطه با توابع NVIC مربوط به UART میکروکنترلر LPC1768

    سلام
    در مورد سوال اولتون: تا اونجا که من میدونم اولویت وقفه یه شماره است که وقتی وقفه رخ میده در کنترلر وقفه یا همون NVIC براساس اون وقفه ها به ترتیب اولویت مرتب میشن و اجرا میشن.یعنی اگه چندتا وقفه با هم رخ بده کنترلربرداری وقفه (NVIC) به ترتیب اولویت اونها رو اجرا میکنه.و اگر وسط یه وقفه ،وقفه دیگری با اولویت بالاتر بیاد قبلی رو متوقف میکنه و اونو اجرا میکنه واین روند ادامه پیدا میکنه به همین دلیل هم میگن کنترلر وقفه تودرتو(Nested) هست.
    در مورد سوال دوم : وقتی یه وقفه ای رخ میده تا اجرا بشه یک بیت در کنترلر ست میشه که بگه این وقفه رخ داده،مثل فلگ در میکروهای دیگر.در روتین وقفه حتما اولین کار اینه که اونو پاک کنید.گاهی هم پیش میادکه بخواین نرم افزاری وقفه تولید کنید که از تابع SetPendingIRQ استفاده میکنید.گاهی هم وقفه غیرفعاله و شما با پولینگ از طریق GetPending از وقوع یه رخدا د مطلع میشین.
    در کل برای راه اندازی وقفه به این توابع نیاز داریدبا همین ترتیب:
    NVIC_ClearPendingIRQ
    NVIC_SetPriority
    NVIC_EnableIRQ

    دیدگاه

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