GPIO
GPIO یا General-Purpose Input/Output یعنی ورودی و خروجی هایی که استفاده عمومی دارند یا به طور ساده تر مجموعه سخت افزار و رجیستر هایی که مربوط میشن به این که این پایه ورودی باشه یا خروجی ( ورودی و خروجی دیجیتال نه آنالوگ ) ، البته ورودی در این حد که این پایه الان یک هست یا صفر و خروجی هم همین طور صفر باشد یا یک ، منظور این است که برای انتقال داده ( پالس های پشت سر هم که حاوی یک پیام یا کد می باشد ) استفاده نمی شود ، در برخی شرایط خاص این کار را هم می توان کرد که یک مقدار کار پیچیده می شود. ، شیوه عملکرد در حالت ورودی اینگونه است که سطح ولتاژ پایه های میکروکنترلر تشخیص داده شده و اگر از یک مقدار مشخص بیشتر بود به میکرو اطلاع می دهد که ورودی یک است و اگر کمتر بود صفر در نظر می گیرد ، در حالت خروجی اگر میکرو به واحد دستور داد که در خروجی یک را قرار بده ، واحد ولتاژ پایه را به مقدار بیشینه می رساند و برای نمایش صفر ولتاژ را به کمینه می رساند.
پرکاربرد ترین واحد داخلی میکروکنترلر همین واحد است که در همه میکروکنترلر ها هم وجود دارد و در تمام پروژه ها نیز استفاده می شود ،همچنین بسیاری از واحد های دیگر را می توان با همین واحد شبیه سازی نمود ، در کل کار راه اندازه و خیلی باهاش کار دارین.
GPIO رجیستر های بسیاری زیاده داره مخصوصا در Arm ها ، در PIC ها و AVR ها ساده تر هست چون در این میکرو ها تنظیمات خاصی بر روی برخی پایه ها به صورت سخت افزاری قرار داده اند و شما فقط از آن ها استفاده می کنید به عنوان مثال وقفه را فقط روی برخی پایه ها دارید و یا فقط برخی از پایه ها می توانند ورودی و خروجی آنالوگ داشته باشند ( در این میکرو ها تعیین آنالوگ یا دیجیتال بودن پایه ها یا واحد GPIO می باشد ولی ایه این معنی نیست که خروجی یا ورودی آنالوگ هم می تواند تولید کند یا بخواند ) طراح تراشه با توجه به ویژگی های آن شماره از میکرو تشخیص داده که شما این تعداد وقفه بیشتر نیاز ندارید و اون رو به پایه هایی تخصیص داده که مشکلی هم پیش نیاد و تا یه مقداری هم می توانید آن پایه را جابجا کنید ولی در Arm ها تمامی پایه ها که واحد GPIO دارند وقفه هم دارند و اگر بخواهید که از وقفه آن استفاده کنید باید تنظیمات آن را به صورت نرم افزاری خودتان انجام دهید و حتی اگر واحد های دیگر هم بخواهند از یک پایه استفاده کنند اول باید نوع آن استفاده را در GPIO مشخص کنید و تنظیمات را انجام دهید سپس از آن واحد استفاده کنید ، مثلا اگر یک پایه بخواهد به عنوان USART استفاده گردد باید باید در GPIO تنظیمات را انجام دهید که این پایه به واحد USART متصل گردد
قابلیت Sink و source (push/pull در Arm ها) هم تقریبا یکسان است،Pullup و pulldown در PIC و AVR روی برخی پایه ها ولی در Arm ها بر روی تمام پایه ها موجود است .
کلاک این واحد در PIC و AVR فعال است اما در در Arm ها باید جداگانه فعال شود.
هر میکرو از چند واحد GPIO جداگانه تشکیل شدهاست که به هر کدام Port گفته می شود در PIC و AVR پورت ها 8 تایی هستند یعنی هر 8 پایه یک پورت را تشکیل می دهند ولی در Arm ها هر 16 تا پایه یک پورت را تشکیل می دهند البته در سری های 16 و 32 بیتی PIC و AVR شبیه Arm هاست.