آموزش میکروکنترلرهای LPC1768 جلسه نهم: وقفه GPIO

روی پین های  پورت  0و2 میکروکنترلر  LPC1768  قابلیت ایجاد وقفه وجود دارد. و این قابلیت خیلی کاربردی هست.با هر تغییری(لبه بالا رونده و لبه پایین رونده) روی پین های میکروکنترلر میتوانیم وقفه اایجاد کنیم.خب اگر مطالب قبلی آموزش میکروکنترلر lpc1768 را در وبسایت میکرو دیزاینر الکترونیک دنبال کرده باشید میدانید که وقفه ها و نحوه فعال سازی و رسیدگی به روال وقفه را یادگرفتیم ، پس مستقیم میریم سر اصل نحوه راه اندازی وقفه GPIO

آموزش میکروکنترلرهای LPC1768 جلسه نهم: وقفه GPIO

رجیستر های وقفه های GPIO میکروکنترلر LPC1768

رجیستر IntStatus

وضعیت کلی وقفه های GPIO را نشون میده

رجیستر IntEnR

فعال و غیر فعال سازی وقفه لبه بالا رونده

رجیستر IntEnF

فعال و غیر فعال سازی وقفه لبه پایین رونده

رجیستر IntStatR

وضعیت وقفه برای لبه بالا رونده

رجیستر IntStatF

وضعیت وقفه برای لبه پایین رونده

رجیستر IntClr

پاک کردن پرچم وقفه  های GPIO

 توابع CMSIS وقفه های GPIO میکروکنترلر LPC1768

void GPIO_IntCmd(uint8_t portNum, uint32_t bitValue, uint8_t edgeState);

FunctionalState GPIO_GetIntStatus(uint8_t portNum, uint32_t pinNum, uint8_t edgeState);

void GPIO_ClearInt(uint8_t portNum, uint32_t bitValue);

این توابع داخل هدر lpc17xx_gpio.h موجود هستن و در زیر به برسی هر کدام از توابع می پردازیم.

تابع GPIO_IntCmd

void GPIO_IntCmd(uint8_t portNum, uint32_t bitValue, uint8_t edgeState);

این تابع برای فعال سازی وقفه GPIO مورد نظر روی پین و پورت مورد نظر استفاده می شود.

مطلب پیشنهادی:  آموزش میکروکنترلرهای LPC1768 جلسه سوم: ایجاد پروژه در Keil

ورودی اولش شماره پورت مورد نظر

ورودی دومش شماره پین مورد نظر

ورودی سوم هم حساس به لبه بالا رونده یا پایین رونده هست که 1 بالا رونده و 0 پایین رونده

تابع GPIO_GetIntStatus

FunctionalState GPIO_GetIntStatus(uint8_t portNum, uint32_t pinNum, uint8_t edgeState);

این تابع وضعیت وقفه را برمیگرداند که آیا وقفه ای رخ داده یا نه

ورودی اولش شماره پورت مورد نظر

ورودی دومش شماره پین مورد نظر

ورودی سوم هم حساس به لبه بالا رونده یا پایین رونده هست که 1 بالا رونده و 0 پایین رونده

خروجی تابع : هم که صحیح یا غلط هست که 0و1 خودمون

تابع  GPIO_ClearInt

void GPIO_ClearInt(uint8_t portNum, uint32_t bitValue);

این تابع برای پاک کردن پرچم وقفه مورد استفاده قرار میگیره.

ورودی اولش شماره پورت مورد نظر

ورودی دومش شماره پین مورد نظر

نکته خیلی مهم : وقفه GPIO  با وقفه خارجی شماره 3 یا EINT3_IRQn به صورت مشترک هستن و روال وقفه شون هم یکی هست و در روال وقفه باید چک کنید که کدام وقفه رخ داده …. به مثال زیر توجه کنید کامل متوجه میشید.

#include "inc/LPC17xx.h"
#include "inc/lpc17xx_gpio.h"
/*LPC1768 Tutorials  Melec.ir M.jahandideh */

    void EINT3_IRQHandler()
    {
    static uint8_t a;
    
        if(a==0)
           GPIO_SetValue(0, (1<<20));
        else
        GPIO_ClearValue(0, (1<<20));
       a=~a;
       
        GPIO_ClearInt(0, (1<<17));
    }

int main(void){

   GPIO_IntCmd(0, (1<<17), 1);

   NVIC_SetPriority(EINT3_IRQn, 0);
   NVIC_EnableIRQ(EINT3_IRQn);
   GPIO_SetDir(0, (1<<20), 1);
   
    while(1){
     
    }
}

در این مثال پایه p0.17 که بهش یه شستی وصل کردیم را برای وقفه gpio در لبه بالا رونده تنظیم کردیم (وقفه روی پین P0.17 را در لبه بالا رونده فعال کردیم. ) بعد اومدیم اولویت بندی وقفه را 0 قرار دادیم و بعد وقفه GPIO که مشترک با وقفه خارجی شماره 3 هست را را فعال کردیم ( همانطور که در بالا مشاهده میکنید در قسمت فعال سازی اسم وقفه را نوشتیم EINT3_IRQn که در بالا علتش را توضیح دادیم.) .

مطلب پیشنهادی:  راه اندازی واحد ADC میکروکنترلر stm32f4xx  و نمونه برداری با نرخ مشخص

در ادامه چایه P0.20 را که یک ال ای دی بهش وصل هست را هم بعنوان خروجی تعریف کردیم و در آخر یک حلقه بینهایت نوشتیم و برنامه را تمام کردیم.

در روال وقفه هم اگر دقت کنید میبینید که  وضعیت یک ال ای دی را با هر دفعه رخ دادن وقفه برعکس میکنیم. و پرچم وقفه را غیر فعال میکنیم.

پایان جلسه نهم آموزش میکروکنترلرهای LPC1768 ♥ ما را هم دعا کنید و  لطفا نظر بدید 🙂  آخه چی میشه نظر بدی 🙂

جلسات قبلی و ادامه آموزش ها را از ایجا بخوانید.

درباره ی جهاندیده

کاربر عزیز از اینکه مطالب سایت ما را مطالعه میکنید بینهایت سپاسگذارم.با نظرات سازنده خود به ما انگیزه بیشتری دهید تا مطالب آموزشی بیشتری را تولید و منتشر کنیم. استیوجابز میگه "شغل شما بخش عمده ای از زندگیتان را تشکیل خواهد داد، پس تنها راهی که از این بخش احساس رضایت خواهید کرد این است که باور داشته باشید در حال انجام کار بزرگی هستید. بهترین راه برای انجام یک کار بزرگ نیز لذت بردن از آن کار است. اگر نمی دانید چه باید انجام دهید عجله نکنید و سعی نمایید اول راه خود را بیابید. با پیدا کردن راه درست مانند یک رابطه ی خوب با گذشت سال ها هر روز همه چیز بهتر و بهتر می شود و همواره رو به جلو پیش خواهید رفت. بنابراین به دنبال آن چیزی بگردید که قلباً شما را راضی می کند. عجله نکنید." امیدوارم همیشه موفق باشید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

3 دیدگاه

  1. باعرض سلام وخسته نباشید خدمت شما دوستان عزیز

    از اینکه بی وقفه جهت آموزش این میکرو کنترلر زحمت می کشید واقعا باید سپاسگذار بود فقط اگه ممکنه این آموزش ها را سریعتر قرار بدید داخل سایت ممنون میشم…خدا قوت

  2. با عرض سلام و خسته نباشید
    اقا لطفا روش ارتباط با پورت usb و همچنین راه اندازی کارت mmc (روش فرمت کارت و….)و پخش صدا (mp3 player) را توسط lpc1768 رو هم توضیح بدین.
    با تشکر و سپاس فراواان