آذر میکرو ( دنیای میکروکنترلرها )

آذر میکرو ( دنیای میکروکنترلرها )

برنامه نویس میکروکنترل ها
آذر میکرو ( دنیای میکروکنترلرها )

آذر میکرو ( دنیای میکروکنترلرها )

برنامه نویس میکروکنترل ها

وقفه پورت با 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);


//----------------------------------------------
intmain(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(esi=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();
}


}

نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد