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

مطلب پیشنهادی:  آموزش میکروکنترلرهای LPC1768 جلسه اول: معرفی ARM و هسته Cortex-M3

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

مطلب پیشنهادی:  جزوه آموزش میکروکنترلرهای ARM LPC

تابع 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 به دوستانتان میباشد 🙂

مطلب پیشنهادی:  مبدل آنالوگ به دیجیتال میکروکنترلرهای LPC1768

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

ARM LPC1768

معرفی CMSIS مبدل آنالوگ به دیجیتال میکروکنترلرهای LPC1768

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

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

2 دیدگاه

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

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