اگر جلسات قبلی آموزش میکروکنترلرهای LPC1768 را در سایت میکرو دیزاینر الکترونیک دنبال کرده باشید میدانید که در جلسه قبلی توابع CMSIS را برسی کردیم و گفتیم که میخواهیم برنامه ها را بر اساس این توابع بنویسیم. در این جلسه میخواهیم پورت های ورودی و خروجی lpc17xx_gpio میکروکنترلر LPC1768 را برسی کنیم البته برای سری های مختلف فرقی ندارند و بطور کلی LPC17XX مینامیم.
میکروکنترلر LPC1768 حداکثر دارای پنج پورت و این پنج پورت سرجمع دارای هفتاد پین ورودی و خروجی میباشند.نام گذاری پورت ها بصورت P0,P1,P2,P3,P4 میباشند.
بعضی پورت ها دارای 32 پایه و بعضی دیگر کمترند و در داخل بعضی پورت ها بعضی پین ها قابل استفاده نیستن !!مثلا پین های P0[12,13,14],P1[2,3,5,6,7,11,12,13] قابل استفاده نیستن.بقیه پین ها بصورت زیر هستن:
P[30:0] P1[31:0] P2[13:0] P3[26:25] P4[29:28]
فایل PDF زیر نقشه پایه های میکروکنترلر LPC1768 میباشد.فایل زیر را دانلود کنید در ادامه آموزش ها هم لاز میشه.
برای اطلاعات دقیق تر در مورد پین های ورودی و خروجی به قست pin configuration مراجعه کنید. خب اول کاری گفتم نمیخوام با رجیستر های میکروکنترلر LPC1768 کار کنیم و سعی میکنیم همه برنامه ها و آموزش ها بر اساس توابع CMSIS باشند در این قسمت فقط نگاهی گذرا به رجیستر ها می اندازیم و میریم سر توابع lpc17xx_gpio.h که خیلی راحتر یاد بگیریم.
رجیستر های GPIO میروکنترلر LPC1768
- رجیستر FIOxDIR
این رجیستر برای تعیین جهت پورت ها (ورودی یا خروجی ) مورد استفاده می شود.
- رجیستر FIOxSET
این رجیستر جهت 1 کردن پین هایی که بصورت خروجی تعریف شدن.
- رجیستر FIOxCLR
این رجیستر جهت 0 کردن پین هایی که بصورت خروجی تعیین شدن.
- رجیستر FIOxPIN
این رجیستر دسترسی مستقیم به پورت های ورودی و خروجی را فراهم میکند. بطور مستقیم میتوانیم روی پین بنویسید و بخوانیم.
- رجیستر FIOxMASK
برای اینکه در پورت بعضی بیت ها را از عملیات نوشتن/خواندن یا تغییر حالت ورودی/ خروجی محافظت کنیم از این رجیستر استفاده میکنیم.
- رجیسترهای PINSEL 0-10
جهت اننتخاب نحوه عملکرد پین ها مورد استفاده قرار میگیرد بعضی پین ها عملکرد های مختلفی مانند GPIO,UART,SPI,… دارن
- رجیسترهای PINMODE 0-9
جهت تنظیم مقاومت های PULL-UP و PULL-DOWN داخلی پورت ها اگر در مورد مقاومت های بالاکش و پایین کش اطلاعاتی ندارید اینجا مطالعه کنید.
- رجیتسر های PINMODE_OP 0-4
برای انتخاب حالت Open Drain یا درین باز پین ها مورد استفاده قرار میگرن.
خب تا اینجا مروری کردیم بر رجیستر های GPIO میکروکنترلر LPC1768 ، بریم سراغ توابع CMSIS برای کار با ورودی و خروجی ها.
برسی توابع کار با GPIO کتابخانه lpc17xx_gpio.h
دقت داشته باشید همه توابعی که در زیر برسی میکنیم در هدر فایل lpc17xx_gpio.h موجود میباشند و از اینجا دانلود کنید.
تابع GPIO_ReadValue
Uint32_t GPIO_ReadValue(uint8_t portNum);
برای خوندن مقدار یک پورت استفاده می شود.
- ورودی تابع port_Num شماره پورتی که میخواهید بخوانید.
- خروجی تابع uint32_t وضعیت پورت
تابع GPIO_SetDir
void GPIO_SetDir(uint8_t portNum, uint32_t bitValue, uint8_t dir);
برای تعیین ورودی/خروجی پین های پورت مورد استفاده قرار میگرد.
- ورودی portNum : شماره پورت مورد نظر
- ورودی bitValue: شماره پین های مورد نظر
- ورودی dir : اگر 0 باشد ورودی و اگر 1 باشد خروجی
تابع GPIO_SetValue
void GPIO_SetValue(uint8_t portNum, uint32_t bitValue);
برای یک کردن پین هایی که خروجی تعیین شدن.
- ورودی portNum : شماره پورت مورد نظر
- ورودی bitValue : شماره پین های مورد نظر
تابع GPIO_ClearValue
void GPIO_ClearValue(uint8_t portNum, uint32_t bitValue);
برای صفر نمودن پین های یک پورت استفاده میشه.
- ورودی portNum: شماره پورت مورد نظر
- ورودی bitValue: شماره پین های مورد نظر
نکته مهم : این هدر فایل دارای توابع بیشتری میباشد مثلا FIO_HalfWordSetDir که بصورت 16 بیتی میتونیم وضعیت ورودی و خروجی ها را تعیین کنیم. که در این مرحله از یادگیری به این توابع نیاز نداریم و اگر نیاز داشتیم میریم سراغشون.
مثال
پین های 21 و 22 از پورت 0 را خروجی تعیین و پین 21 را 1 و پین 22 را 0 کنید.
#include "lpc17xx.h" #include "lpc17xx_gpio.c" int main(void){ GPIO_SetDir(0, (1<<21)|(1<<22), 1); GPIO_SetValue(0, (1<<21)); GPIO_ClearValue(0, (1<<22)); }
مثال دوم
مقدار پورت 0 را خوانده و در متغییر A ذخیره کنید.
#include "lpc17xx.h" #include "lpc17xx_gpio.c" int main(void){ uint32_t A; A=GPIO_ReadValue(0); }
خب فک کنم یاد گرفتین چطوری در میکروکنترلر LPC1768 پایه ها را ورودی/خروجی تعیین کنید و مقدار آن را صفر/یک کنید ویا بخوانید. هزینه این آموزش معرفی وبسایت Melec.ir به دوستانتان میباشد 🙂
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.
ممنون از زحماتتون
لطفا هدر فایل lpc17xx_gpio.h را هم به سایت بزارید تا دانلود کنیم اینجا نمیشه دانلود کرد مشکل داره.
با تشکر