پورت های ورودی و خروجی میکروکنترلر LPC1768

اگر جلسات قبلی آموزش میکروکنترلرهای LPC1768 را در سایت میکرو دیزاینر الکترونیک دنبال کرده باشید میدانید که در جلسه قبلی  توابع CMSIS را برسی کردیم و گفتیم که میخواهیم برنامه ها را بر اساس این توابع بنویسیم. در این جلسه میخواهیم پورت های ورودی و خروجی lpc17xx_gpio  میکروکنترلر LPC1768 را برسی کنیم البته برای سری های مختلف فرقی ندارند و بطور کلی LPC17XX می‌نامیم.

آموزش میکروکنترلرهای LPC1768 جلسه پنجم: پورت های ورودی و خروجی lpc17xx_gpio

میکروکنترلر 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 که خیلی راحتر یاد بگیریم.

مطلب پیشنهادی:  پردازنده های ARM

رجیستر های 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 در میکروکنترلر LPC1768

تابع 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));

}

خروجی مثال : پورت های ورودی و خروجی lpc17xx_gpio

مثال دوم

مقدار پورت 0 را خوانده و در متغییر A ذخیره کنید.

#include "lpc17xx.h"

#include "lpc17xx_gpio.c"

int main(void){

uint32_t A;

A=GPIO_ReadValue(0);

}

خب فک کنم یاد گرفتین چطوری در میکروکنترلر LPC1768 پایه ها را ورودی/خروجی تعیین کنید و مقدار آن را صفر/یک کنید ویا بخوانید. هزینه این آموزش معرفی وبسایت Melec.ir به دوستانتان میباشد 🙂

مطلب پیشنهادی:  ارتباط RS-485 بین STM32 و بورد Arduino Uno

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

مطالعه دیگر جلسات این آموزش<< جلسه قبلی                    جلسه بعدی >>

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

2 دیدگاه

  1. ممنون از زحماتتون

  2. لطفا هدر فایل lpc17xx_gpio.h را هم به سایت بزارید تا دانلود کنیم اینجا نمیشه دانلود کرد مشکل داره.
    با تشکر