X
تبلیغات
رایتل

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

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

رجیسترPINMODEوPINSEL با cmsis برای lpc1768

در میکرو هایlpc  یک پایه میتواند تا 4 کاربردمختلف داشته باشه.مثلا میتونه هم به صورت portعمل کند و یا به صورت ورودیadcیاsdaو .... برای اینکه بتوانیم این پایه رو برای هریک از این کاربردها آماده کنیم رجیستر PINSEL مربوطه رو دستکاری کنیم.همچنین برای اینکه وضعیت PULLUP / PULLDOWN/OPEN DRAIN بودن پایه رو مشخص کنیم باید با رجیسترهای PINMODE ور بریم

ما برای اینکه نخواهیم با رجیستر درگیر بشویم از CMSIS و لایبری PINSEL استفاده میکنیم.

 

 1-  قدم لازمه لایبری اون رو به برنامه اضافه کنیم .

 

#include"lpc17xx_pinsel.h"  

2- حالا برای استفاده از این لایبری بایستی یک متغیر جدید تعریف کنیم

این متغیر کمی با متغیرهایی که قبلا دیدید فرق میکند زیرادرcmsisبرای راحتی بیشتر برنامه نویس یه سری متغیر های جدید که همگی از نوع ساختار هستند ایجاد شده است .

 

PINSEL_CFG_TypeVarName ;
PINSEL_CFG_Typepincfg

متغیری که معرفی کردیم دارای چندین پارامتراست که تک تک به آن اشاره میکنیم

pincfg.Portnum= 0 - 4

اینقسمت باید شماره پورت پایه مورد نظر رو بنویسین که بین 0 تا 4 هستش

pincfg.Pinnum=0 - 31 

در این قسمت شماره پایه مورد نظر قرار میگیره که بین 0 تا 31 هستش

pincfg.Funcnum= 0 - 4

 

در این قسمت شماره تابعی که میخواهید پین مورد نظر در اون حالت قرار بگیره وارد میشه
برای تمامی پینهاgpioبه عنوان شماره تابع صفر در نظر گرفته شده.مثلا برایadcدر مثال فرضی بالا عدد2
و برایsdaشماره تابع 3 در نظر گرفته شده.شما میتونید از روی دیتاشیت بفهمید که شماره تابع مورد نظر چنذمی باشد.

pincfg.Pinmode = 0 -    4

 

در این قسمت میتوانیدpullupیاpulldownیاopendrainبودن اون پین رو مشخص کنید
برایpullupشدن عدد 0
برایpulldownشدن عدد 3
برایopendrainشدن عدد2
می بینید که برای عدد 1 حالتی وجود نداره .


پارامتر بعدی داریم

pincfg.Opendrain= 0 or 1

 

در این حالت تنها اگر در قسمتpincfg.pinmodeعدد 2 رو قرار دادید توی این پارامتر عدد 1 راقراردهید در غیر این صورت عدد 0.که نشاندهنده  این است که پین از داخلpullupیاpulldownدارد یا نه.

تو این مرحله با تابع زیر کارمون رو کامل میکنیم و تغییرات خواسته شده رو به پین مورد نظر اعمال میکنیم.

 

PINSEL_ConfigPin(&pincfg(

 

این لایبری توابع دیگری هم دارذ که مربوط به i2c هست و در قسمت خودش به آن میپردازم.

مثال :

  * Init ADC pin connect
    * AD0.2 on P0.25
    */
    PinCfg.Funcnum = 1;
    PinCfg.OpenDrain = 0;
    PinCfg.Pinmode = 0;
    PinCfg.Pinnum = 25;
    PinCfg.Portnum = 0;
    PINSEL_ConfigPin(&PinCfg);  

 

لایبریpinselزمانی استفاده میشهکه بخواهیذ پینها را برای کاری غیر ازgpioاستفاده کنید مثلا واسهadcیا کاربردای دیگر مثل i2c. البته ممکن است بخواهیم مثلا پینها را در حالتgpioالبته با مقاومتpulldownاستفاده کنیم .در این حالت نیر بایستی از

این لایبری استفاده کنیم.


مثلا پورت 2 پین 12

pincfg.Portnum=2
pincfg.Pinnum=12
pincfg.Pinfunc=0
pincfg.Pinmode=2
pincfg.Opendrain=0
PINSEL_ConfigPin(&pincfg

 

 

اگه بخوایم پین ها رو دسته ای تغییر بدیممثلا 5 تا پین رو با هم ؟

 

PINSEL_CFG_Typepincfg;
pincfg.portnum=0 ;
pincfg.funcnum=0 ;
pincfg.pinmode=3 ;
pincfg.opendrain=0 ;
pincfg.pinnum=0 ;
PINSEL_ConfigPin(&pincfg) ;
pincfg.pinnum=1 ;
PINSEL_ConfigPin(&pincfg);
pincfg.pinnum=2 ;
PINSEL_ConfigPin(&pincfg);
pincfg.pinnum=3 ;
PINSEL_ConfigPin(&pincfg);
pincfg.pinnum=4 ;
PINSEL_ConfigPin(&pincfg);

تاریخ ارسال: سه‌شنبه 12 شهریور 1392 ساعت 10:31 | نویسنده: شاپور جگرگوشه
نظرات (1)
چهارشنبه 25 تیر 1393 10:48
iman [ ]
امتیاز: 1 0
لینک نظر
salam dastorat cmsis
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
نام :
پست الکترونیک :
وب/وبلاگ :
ایمیل شما بعد از ثبت نمایش داده نخواهد شد