ايران ويج

نسخه‌ی کامل: تعیین ورودی خروجی پورت های Xmega در C
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
برای تعیین وضعیت پورت ها در AVR های معمولی، به ازای هرپورت 3 رجیستر وجود دارد. رجیستر DDRx برای تعیین جهت پورت، رجیستر PORTx برای تعیین مفدار خروجی و یا فعالسازی مقاومت Pullup در ورودی و رجیستر PINx برای خواندن مقدار واقعی پین در نظر گرفته شده اند. اما در XMEGA نام وعملکرد رجیسترها بصورت متفاوتی است که در اینجا توضیح داده می شود. برای تعیین جهت هر پورت از رجیستری با نام PORTx_DIR استفاده می شود(مثلا PORTA_DIR). همانند AVR نوشتن یک در هر بیت از این رجیستر منجر به خروجی شدن پین متناظر آن در پورت می شود، اما وضعیت فعالسازی مقاومت Pullup ربطی به این رجیستر ندارد.به غیر از این رجیستر، تعداد 3 رجیستر دیگر در همین رابطه پیش بینی شده که عملکرد آنها در AVR مشابهی ندارد و برای بالا بردن سرعت انجام عملیات در نظر گرفته شده اند.PORTx_DIRSET رجیستری است که نوشتن یک در هر بیت آن موجب خروجی شدن پین های متناظر در آن پورت می شود، اما وضعیت سایر بیت ها بدون تغییر باقی می مانند. مثلا با اجرای دستور ;PORTA_DIRSET=0x0F در زبان C فقط 4 بیت پائین پورت خروجی می شوند و 4 بیت بالا در هر وضعیتی از نظر ورودی یا خروجی که بودند، باقی می مانند. در همین رابطه دو رجیستر دیگر با نامهای PORTx_DIRCLR و PORTx_DIRTGL وجود دارند که نوشتن یک در بیت های رجیستر اول منجر به ورودی شدن بیتهای متناظر و بدون تغییر ماندن جهت سایر بیتها می شود و برای رجیستر دوم، نوشتن یک منجر بهToggle شدن وضعیت بیت ها از نظر جهت می شود.
برای تغییر مقدار خروجی هم 4 رجیستر برای هر پورت به نام های PORTx_OUT و PORTx_OUTSET و PORTx_OUTCLR و PORTx_OUTTGL وجود دارند که رجیستر اول منجر به تغییر مقادیر کلیه بیت های پورت می شود و در 3 رجیستر بعدی فقط بیت هایی که در آن یک نوشته شده تغییر می کنند و سایر بیت ها بدون تغییر باقی می مانند.

برای خواندن وضعیت هر پورت هم رجیستر PORTx_IN وجود دارد که عملکردی مشابه رجیستر PINx در AVR های عادی دارد.

منبع :http://novintarashe.com/site