اطلاعیه

Collapse
No announcement yet.

GPIO Interrupt - LPC1788

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

    GPIO Interrupt - LPC1788

    [size=18pt][font=arial]سلام :nerd:

    ان شاءالله سلامت باشید.

    برای راه اندازی GPIO Interrupt روی پورت 0 و 2 میکروی LPC1788 مشکل دارم.

    لایبری CMSIS مربوط به LPC1788 رو دانلود کرده ام، اما هیچ وقت وارد GPIO Handler نمیشه! :angry:

    بعبارتی GPIO Interrupt فعال میشه اما با تغییر سطح ولتاژ پایه ها، انگار آرم چیزی احساس نمیکنه و Interrupt Pending نمیده.(اینها رو تو محیط شبیه سازی Keil بررسی کردم)

    البته با تحریک نرم افزاری وارد روتین اینتراپت میشه!

    NVIC->STIR = GPIO_IRQn

    External Interrupt ها هم به خوبی روی پایه های مربوطشون کار می کنن.

    GPIO_IntCmd(2, 1<<9, 1);
    NVIC_SetPriority(GPIO_IRQn, 1);
    NVIC_EnableIRQ(GPIO_IRQn);



    http://wdl.persiangig.com/pages/download/?dl=http://mahdiafpr.persiangig.com/document/GPIO%20Interrupt.rar

    #2
    پاسخ : GPIO Interrupt - LPC1788

    سلام خدمت شما دوست عزیز
    ببخشید یک سوال ابتدایی داشتم. توی 1788 همون اول کار که یه پروژه می سازم یه gpio ساده build نمیشه و خطای زیر رو می ده!
    ..\..\..\ARM\Startup\NXP\LPC17xx\system_LPC17xx.c( 27): error: #5: cannot open source input file "LPC17xx.h": No such file or directory
    حالا چندتا سوال دارم که ازتون می خوام به شیوهآ‌ی خنگ آموز به من توضیح بدین لطفاً
    1- اول کار که پروژه را می سازی باید چه فایلهایی رو به پروژه add کرد؟!
    2- اصلاً این cmsis چیه؟!!
    3- چرا تو پروژه ها بعضی ها lpc17xx_gpio.h رو include میکنند، و بعضیها lpc17xx.h رو!؟؟؟؟
    :angry: :angry: :angry: :angry:

    دیدگاه


      #3
      پاسخ : GPIO Interrupt - LPC1788

      1. فایلهای زیر رو باید اد کنی
      lpc17xx_startup.s
      lpc17xx_system.c
      و توی هر فایلی که استفاده می کنی باید lpc17xx.h رو include کنی
      در واقع lpc17xx.h فایلی هست که رجیسترهای میکرو توش تعریف شده و اون دو تا فایل دیگه برای راه اندازیه

      2. یک سری دستورات استاندارد برای برنامه نویسی میکروهای cortext مثل lpc17xx. در این مورد زیاد پرسیدن. توی انجمن سرچ کنید
      3. lpc17xx.h رو که حتما باید include کنن تا اگر از اسم رجیستری خواستن استفاده کنند، برنامه بدونه اون رجیستر در کجای حافظه قرار داره. اون یکی دیگه رو اگر خواستی از دستوراتش استفاده کنی باید include کنی و فایل lpc17xx_gpio.c رو به پروژت اد کنی

      دیدگاه


        #4
        پاسخ : GPIO Interrupt - LPC1788

        سلام
        با cmsis میخواهی خدمت شما:
        http://www.eca.ir/forum2/index.php?topic=76623.msg503849#msg503849

        با رجیستر:
        http://www.eca.ir/forum2/index.php?topic=75449.msg452753#msg452753

        راستی cmsis برای بوت لودر usb است اگر پروگرامر دیگه ای داری بگو یا خودت تنظیماتشو عوض کن!
        [glow=red,2,300]برنامه هاي آموزشي تست شده براي NXP LPC1768 با توابع CMSIS[/glow]
        http://www.eca.ir/forum2/index.php?topic=76623.0

        دیدگاه


          #5
          پاسخ : GPIO Interrupt - LPC1788

          سلام
          برای وقفه خارجی
          اول باید pinsell را تنظیم کنید
          بعد باید به لبه حساسش کنی پایه مربوطه را
          در واحد مرکزی وقفه اش را فعال کنید باNVIC_EnableIRQ
          زیر روال وقفه را بنویسید
          همین!
          فيلم آموزشي ميکروکنترلر LPC1768
          فيلم آموزشي تکميلي و پيشرفته ميکروکنترلر LPC1768
          فيلم آموزش کاربردی زبان سی در میکروکنترلر ARM
          فیلم آموزش مقدماتی میکروکنترلر LPC1788 به زودی ...

          دیدگاه


            #6
            پاسخ : GPIO Interrupt - LPC1788

            وقفه پورت با cmsis برای lpc1768

            در این خانواده از میکروهااز تمامی پینهای پورت 0وپینهای 0 تا 13 پورت 2 به عنوان ورودی وقفه استفاده کرد.
            همچنین میشه تعیین کرد که وقفه روی لبه ی بالارونده یا پایین رونده اتفاق بیفته.
            وقفه پورت میکرو روی وقفه خارجی 3 تنظیم شده.پس بایستی حتما اینم بنویسید
            کد:
            NVIC_EnableIRQ(EINT3_IRQn);
            1- توسط این دستور میشود پورت 0 یا 2 رو به عنوان ورودی وقفه پیکربندی کرد.

            کد:
            GPIO_IntCmd(شماره پورت ,پینهای مورد نظر , لبه بالا رونده یا پایین رونده);
            FIO_IntCmd(شماره پورت ,پینهای مورد نظر , لبه بالا رونده یا پایین رونده);
            شماره پورت : میتونه 0 یا 2 باشد . (وقفه فقط روی این پورت ها تعریف شده )
            پینهای مورد نظر:پینهایی از پورت که ورودی وقفه هستند.
            برای لبه بالا رونده عدد 0 ولبه پایین رونده عدد 1.

            2- توسط این دستور میتوانید بفهمید وقفه روی کدام پایه از پورت اتفاق افتاده-

            کد:
            GPIO_GetIntStatus(شماره پورت ,شماره پین مورد نظر , لبه بالا رونده یا پایین رونده);
            FIO_GetIntStatus(شماره پورت ,شماره پین مورد نظر, لبه بالا رونده یا پایین رونده);
            شماره پین مورد نظر که اعداد 0 تا 31 برای پورت 0 و اعداد 0 تا 13 برای پورت 2.

            3- توسط این دستور میتوانیدپرچم وقفه اتفاق افتاده رو پاک کنین.

            کد:
            GPIO_ClearInt(شماره پورت ,شماره پینهایمورد نظره);
            FIO_ClearInt(شماره پورت ,شماره پینهای مورد نظر,);
            نمونه برنامه کامل برای تست مطالب بالا.

            کد:
             
            #include <lpc17xx_gpio.h>
            //----------------------------------------------
            void delay(void);
            void EINT3_IRQHandler(void);
            
            //----------------------------------------------
            int main(void)
            {
            GPIO_SetDir(1,0Xffffffff,1);
            GPIO_ClearValue(1,0Xffffffff);
            GPIO_IntCmd(0,0xffffffff,1);
            NVIC_EnableIRQ(EINT3_IRQn);
            while(1);
            return 0;
            }
            
            //---------------------------------------------
            void delay(void)
            {
            
            longint i;
            for(i=0;i<400000;i++);
            
            }
            
            //---------------------------------------------
            void EINT3_IRQHandler(void)
            {
            
            charnum;
            for(num=0;num<32;num++)
            {
            
            if(GPIO_GetIntStatus(0,num,1))
            {
            GPIO_ClearInt(0,1<<num);
            GPIO_SetValue(1,1<<num);
            delay();
            GPIO_ClearValue(1,1<<num);
            delay();
            }
            
            }

            دیدگاه


              #7
              پاسخ : GPIO Interrupt - LPC1788

              سلامدوستان.من موقع کامپایل برنامه به این ارور بر میخورم.تمامه فایل ها رو هم اد کردم اما نمیشه.چه کنم؟
              int.gpio.c(13): error: #5 : cannot open source input file "lpc17xx_gpio.h": No such file or directory

              در ضمن اولین پروژه اینجوری نبود.یهو شد. اینم عکس از فایلهایی که اد کردم.


              دیدگاه

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