در میکرو هایlpc یک پایه
میتواند تا 4 کاربردمختلف داشته باشه.مثلا میتونه هم به صورت portعمل کند و یا به صورت ورودیadcیاsdaو .... برای
اینکه بتوانیم این پایه رو برای هریک از این کاربردها آماده کنیم رجیستر PINSEL مربوطه
رو دستکاری کنیم.همچنین برای اینکه وضعیت PULLUP / PULLDOWN/OPEN
DRAIN بودن
پایه رو مشخص کنیم باید با رجیسترهای PINMODE ور بریم
ما برای اینکه نخواهیم با رجیستر درگیر بشویم از CMSIS و لایبری PINSEL استفاده
میکنیم.
1- قدم لازمه لایبری اون رو به برنامه اضافه کنیم .
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 هست و در قسمت خودش به آن میپردازم.
مثال :
* 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 تا پین رو با هم ؟
salam dastorat cmsis