خانه > آموزش > کار با ورودی خروجی همه منظوره(GPIO) در LPC1768

کار با ورودی خروجی همه منظوره(GPIO) در LPC1768

برای کار با هر یک از ابزارهای جانبی[Peripherals] (اعم از GPIO) این میکرو باید چهار گام کلی زیر را برداشت:

1- روشن کردن ابزار مورد استفاده

این کار در LPC1768  با استفاده از رجیستر (PCONP (Power CONtrol for Peripherals register  انجام می ­شود. این رجیستر اجازه می­ دهد که برای کاهش توان مصرفی، ابزارهای جانبی میکرو که در حال حاضر مورد استفاده قرار نمی ­گیرند را خاموش نماییم. هر بیت از رجیستر PCONP برای کنترل یک ابزار جانبی خاص خود کاربرد دارد. به این صورت که اگر بیت مورد نظر در این رجیستر 1 باشد ابزار مورد نظر روشن و در غیر این صورت خاموش می­ باشد.  جدول زیر از راهنمای کاربر میکرو(صفحه 64) نمایی از کارکرد این رجیستر را نشان می­دهد.

lpc1768-working-with-gpio1

lpc1768-working-with-gpio2

lpc1768-working-with-gpio3

مشخصا بیت 15 از این رجیستر برای فعال یا غیر فعال کردن ورودی/خروجی همه منظوره(General Purpose Input/output) یا GPIO می ­باشد. مقدار پیش­فرض برای این بیت 1 می­ باشد یعنی به طور پیش­فرض GPIO ها فعالند. بنابراین برای فعال­سازی GPIO نیاز به مقداردهی به این رجیستر نیست اما برای فعال­سازی برخی ادوات جانبی که به طور پیش­فرض غیرفعالند باید به آن مقدار داد.

2- تنظیم نرخ پالس برای ابزار مورد استفاده

برای تامین کلاک برای ابزارهای جانبی از همان کلاک CPU و یک پیش تقسیم کننده استفاده می­ شود. این که این پیش تقیسم­ کننده چه مقداری داشته باشد توسط رجیستر  PCLKSEL  یا (Peripheral Clock Selection Register) استفاده می­شود. برای مثال در جدول زیر رجیستر  PCLKSEL1 را از راهنمای کاربری میکرو مشاهده می­ کنید:

lpc1768-working-with-gpio44

lpc1768-working-with-gpio5

در این جدول PCLK نشان­ دهنده پالس ساعت ابزار جانبی مورد نظر و CCLK نشان­ دهنده پالس ساعت CPU می ­باشد. همان طوری که ملاحظه می­ شود بیت­های 2 و 3 از این رجیستر برای پالس ساعت GPIO درنظر گرفته شده است و پیش­ تقسیم ­گر های 1، 2، 4 و 8 قابل تنظیم می­باشد. مقدار پیش­فرض برای ورودی/خروجی همه منظوره 1 می­ باشد. معمولا در کارکردهای عادی GPIO به این رجیستر هم لازم نیست مقداردهی کنیم. اما برای برخی ادوات جانبی که نرخ پالس ساعت برای آنها مهم است باید مقداردهی شود.

3- در صورت نیاز وصل کردن پین مورد نظر به پین خارجی توسط بلوک اتصال پین( Pin Connect Block)

هر یک از پین ­های LPC1768 ممکن است برای چند کاربرد طراحی شده باشد. در آن واحد می ­توان از یک کاربرد هر پین استفاده نمود. بنابراین قبل از استفاده از هر ابزار جانبی باید ابزار مورد نظر را به پین خارجی مورد نظر متصل نمود. اینکه بخواهیم در برنامه مورد نظر خود از کدام یک از کاربردهای یک پین استفاده کنیم توسط 11 رجیستر با نام­های PINSEL0 تا PINSEL10 انجام می­ شود. این رجیسترها بخشی از بلوک اتصال پین­ می باشند. برای مثال در جدول زیر نحوه عملکرد بیت­ های مختلف رجیستر PINSEL0 را مشاهده می­ نمایید:

lpc1768-working-with-gpio6

 همانطور که مشاهده می­ شود هر پین حداکثر برای چها کاربرد مختلف طراحی شده است و عملکرد پیشفرض همه پایه­ ها به صورت GPIO تنظیم شده است. بنابراین اگر بخواهیم از هر یک از پایه­ های LPC1768 به عنوان GPIO استفاده کنیم لازم به مقداردهی به این رجیستر نیست اما اگر از کارکردهای دیگر هر پایه بخواهیم استفاده کنیم باید به این رجیستر به طور مناسب مقداردهی نمود.

با توجه به مطالب بالا برای کار با GPIO فقط لازم است مرحله چهارم به درستی و با دقت انجام شود:

4- مقداردهی به رجیسترهای مربوط به همان ابزار:

LPC1768 پنج پورت(پورت­های صفر تا 4) GPIO دارد. برای کار با هر یک از این پورت ها باید از رجیسترهای زیر استفاده نماییم(جدول 102 صفحه 131 راهنمای کاربری):

FIODIR: این رجیستر برای تعیین جهت داده (ورودی یا خروجی) استفاده می­شود. به این صورت که اگر در هر یک از بیت­های این رجیستر 1 بنویسیم پایه متناظر با آن بیت خروجی، و اگر صفر بنویسیم پایه مورد نظر ورودی تعریف می­شود. برای مثال دستور زیر پایه 29 از پورت 1 را به عنوان خروجی تعریف می­ کند:

FIOMASK: خواندن و نوشتن روی رجیسترهای FIOPIN، FIOSET، FIOCLR وقتی تاثیرگذار است که بیت متناظر با آن پایه در رجیستر FIOMASK صفر شده باشد.

FIOPIN: وضعیت فعلی پایه از این رجیستر قابل خواندن می­باشد. در حالتی که پایه به عنوان ورودی دیجیتال تعریف شده است، مقدار منطقی پایه را از این رجیستر می­توان خواند. و در حالتی که پایه به عنوان خروجی تعریف شده باشد نوشتن روی بیت­های این رجیستر منجر به قرار گرفتن سطح منطقی متناظر در پایه مورد نظر می­گردد.

FIOSET: در وضعیت خروجی، نوشتن 1 روی این رجیستر منجر به ایجاد سطح منطقی بالا در پین مربوط می­شود. نوشتن صفر تاثیری در پین مربوط ندارد.

FIOCLR: در وضعیت خروجی نوشتن 1 روی این رجیستر منجر به ایجاد سطح منطقی پایین در پین مربوط می­شود. نوشت صفر تاثیری در پین مربوط ندارد.

پاسخ دهید

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