در قسمت پنجم آموزش میکروکنترلر XMEGA به بررسی مدهای ورودی و خروجی پورتها پرداختیم. در این قسمت از آموزش میکروکنترلر XMEGA به بررسی رجیسترهای پورت میپردازیم.
در این قسمت از آموزش XMEGA در مورد مجموعه رجیسترهای PINnCTRL توضیح میدهیم. بهازای هر پین در یک پورت، رجیستری وجود دارد که مدهای مختلف در آن پین را تعیین میکند. پس برای هر پورت، ۸ رجیستر مجزا برای پینهای مختلف وجود دارد. برای نامگذاری، در ابتدا نام پورت سپس آندرلاین یا نقطه، سپس پین و شماره پین و در آخر CTRL نوشته میشود؛ بهعنوانمثال، PortB_PIN0CTRL که برای سادگی آن را بهصورت PortBPIN0CTRL مینویسیم.
در بیتهای شماره ۳ تا ۵، از هر رجیستر بهعنوان OPC یا Output and Pull Configuration نامگذاری میشود.
در جدول زیر، وضعیت پین در شرایطی که بهعنوان خروجی تعریف شده باشد، مشخص میشود و همچنین، وضعیت Pull-up، Pull-downها تعیین میشود. اگر این سه بیت 000 باشد، در شرایطی که پین خروجی تعریف شده باشد، در مد Totem-Pole عمل می کند که در مورد این مد قبلا توضیح داده شد. همچنین، باید اشاره کرد که هیچ Pull-up، Pull-down ایی هم فعال نیست. برای سه وضعیت بعدی هم اگر پین به صورت خروجی تعریف شود، در مد Totem-Pole عمل می کند. برای 001 مد Bus-keeper فعال می شود یعنی همان Pull-up، Pull-down هوشمندی که قبلا درمورد آن توضیح داده شد. برای 010، Pull-down داخلی فعال می شود و برای 011، Pull-up داخلی فعال می شود.
۴ وضعیت بعدی برای مدهای Wired-OR بدون Pull-down، Wired-AND بدون Pull-up داخلی و Wired-OR با فعالبودن Pull-down داخلی و گزینه آخر هم مربوط به Wired-AND با فعالبودن Pull-up داخلی هست.
برای 100 و 101 برای Wired-OR باید Pull-down را به صورت خارجی قرار دهیم و برای Wired-AND، Pull-up را به صورت خارجی قرار دهیم.
به این نکته باید توجه کنیم که فعالبودن Pull-down برای Wired-OR و Pull-up برای Wired-AND در شرایط خروجی و ورودی هر دو برقرار هست؛ یعنی چه پین بهصورت خروجی تعریف شود و چه در شرایط ورودی باشد، این Pull-down و Pull-up فعال هستند. اما Pull-down و Pull-up ای که برای 010 و 011 نوشته شده، فقط در وضعیتی به صورت داخلی فعال هستند که پین ورودی تعریف شود و این تفاوتی هست که باید به آن توجه کنید.
فیلد بعدی در این رجیستر، فیلدهای شماره ۰ تا ۲ هستند. ISC (Input Sense Configuration) در واقع این سه بیت تعیینکننده این هستند که چه تغییراتی در پین باعث ایجاد وقفه و ایونت میشود. بحث وقفههای خارجی برای کسانی که این سری آموزشها را دنبال میکنند با این پیشفرض که قبلاً با AVR آشنا باشند، احتمالاً دارای یک پیشزمینه هست؛ اما ایونت باید در جای خودش توضیح داده شود. اما همینقدر بدانیم که برای هر پین که میتواند بهعنوان یک منبع ایونت مورداستفاده قرار بگیرد، این سه بیت تعیینکننده نوع تغییرات پین و وضعیت پین هستند که میتواند ایجاد وقفه یا ایونت کند.
اگر در وضعیت 000 باشد، هر دو لبه ایجاد وقفه یا ایونت می کنند. برای لبه بالارونده، 001 و لبه پایین رونده 010 و وضعیت Level یا سطح 011 هست. اگر هدف ایجاد وقفه باشد، Low Level ایجاد وقفه می کند و اگر هدف استفاده از پین به عنوان منبع ایونت باشد، Low Level نمی تواند ایونتی را تولید کند. به جدول زیر دقت کنید.
همچنین، باید به این نکته اشاره کرد Ligh Level هست که به طور دایم، ایونت ایجاد میکند. یک مورد هم در انتهای این جدول ذکر شده که جز امکانات قابلتوجه در XMEGA هست. اگر این سه بیت در وضعیت 111 قرار گیرد، بافر دیجیتال مربوط به آن پین غیرفعال می شود و باعث کاهش مصرف جریان ناشی از آن بافر دیجیتال می شود؛ البته این امکان فقط مختص پورت های A تا F هست.
در اینجا توصیه شده است که اگر از عملکردهای آنالوگ استفاده میشود مثل مقایسهکننده آنالوگ یا ADC، بافر دیجیتال مربوط به آن پین غیرفعال شود.
در رجیستر موردبحث، بیت شماره ۶ برای فعالکردن یک گیت Not در مسیر ورودی و خروجی آن پین هست که هم در وضعیت ورودی عمل میکند و هم در وضعیت خروجی.
استفاده از این گیت Not در مواردی میتواند اهمیت خاص خود را داشته باشد. برای یادگیری مثالهای بیشتر در این باره به ویدئو پایین صفحه مراجعه کنید.
نکته: با افزایش مقدار تغذیه، سرعت درایور تغذیه تأمینکننده پینهای یک پورت افزایش پیدا میکند؛ یعنی هر چه مقدار تغذیه بالاتر برود، سرعت درایور بیشتر میشود؛ در نتیجه، زمان، با افزایش تغذیه، کاهش پیدا خواهد کرد.
جمعبندی
در رجیستر PINnCTRL، مدهای خروجی، وضعیت Pull-down و Pull-upها، نوع حساسیت برای ایجاد وقفه و ایونت، امکان فعالکردن یک گیت Not در مسیر ورودی و خروجی و امکان محدودکردن سرعت تغییرات یک پین، از طریق این ۴ بخش رجیستر PINnCTRL که در زیر آمده است، امکانپذیر است که بسته به نوع کاربرد میتوانیم از هر کدام از این موارد بهصورت مناسب در کدنویسی استفاده کنیم.
در قسمت هفتم آموزش میکروکنترلر XMEGA با ادامه رجیسترهای پورت آشنا میشویم. با سیسوگ همراه باشید.
سری مقالات آموزش میکروکنترلر XMEGA توسط آقای مهندس کینژاد تهیه شده است.
- آموزش میکروکنترلر XMEGA – قسمت اول – مقدمه
- آموزش میکروکنترلر XMEGA – قسمت دوم – مقدمه
- آموزش میکروکنترلر XMEGA – قسمت سوم – رجیسترهای پورت
- آموزش میکروکنترلر XMEGA – قسمت چهارم – نحوه ایجاد پروژه و کامپایل و پروگرام کردن آن در AtmelStudio + دو مثال
- آموزش میکروکنترلر XMEGA – قسمت پنجم- مدهای ورودی و خروجی پورتها