همان طور که در بلوک دیاگرام شکل زیر مشاهده می کنید اجزای درونی میکرو کنترلر توسط باس های داخلی به هم متصل شده اند و یک بخش از این بلوک دیاگرام با خط چین با نام AVR CPU مشخص شده است که در واقع پردازنده اصلی AVR می باشد. در این قسمت قصد داریم اجزای تشکیل دهنده CPU میکرو کنترلر AVR را توضیح دهیم.
کار اصلی یک CPU دسترسی به حافظه ها، محاسبات ریاضی و منطقی، کنترل وسایل جانبی و بررسی وقفه های هر یک از قسمت ها می باشد. شمارنده برنامه، اشاره گر پشته، رجیستر دستورات، آشکارساز دستورات، رجیسترهای Y ، X و Z، رجیسترهای همه منظوره، واحد محاسبه و منطق (ALU) و رجیستر وضعیت، از اجزای تشکیل دهنده CPU میکروکنترلر AVR هستند. میکرو کنترلر AVR از معماری RISC استفاده می کند و برای کارایی بهتر از ساختار Harvard و همچنین از حافظه ها و باس های جداگانه برای انتقال داده استفاده می کند. دستورات با یک سطح pipelining اجرا می شوند و هنگامی که یک دستور در حال اجرا می باشد دستور بعدی از حافظه برنامه pre – fetched می شود با این روش هر دستور تنها در یک کلاک سیکل اجرا می شود.
شمارنده برنامه (Program Counter)
CPU میکروکنترلر برای اینکه دستورات را از اولين آدرس حافظه برنامه خط به خط بخواند نیاز به یک شمارنده برنامه دارد. افزایش Program Counter آدرس خط بعدی را برای اجرای دستورات فراهم می کند.
اشاره گر پشته (Stack Pointer)
در میکرو کنترلر AVR اشاره گر پشته از دو رجیستر ۸ بیتی استفاده می کند. اشاره گر پسته برای ذخیره موقت اطلاعات در دستورهای فراخوانی PUSH ، CALL و POP و متغیرهای محلی، روتین های وقفه و توابع استفاده می شود.
رجیستر دستورات (Instruction Register)
در اصل CPU میکروکنترلر برای فهمیدن انجام یک دستورالعمل از کد ماشین استفاده می کند و به هر یک از این کدها یک سمبل در زبان اسمبلی اختصاص داده می شود. رجیستر دستورات، تمام دستورهای اسمبلی در نظر گرفته شده از طرف شرکت سازنده Atmel را شامل می شود.
آشکارساز دستورات (Instruction Decoder)
شمارنده برنامه افزایش می یابد۔ و کد هر دستور توسط CPU خوانده می شود و با توجه به رجیستر دستورات، کد خوانده شده آشکار می گردد و CPU متوجه می شود که کد دستور به چه معنی و مفهومی است.
رجیسترهای همه منظوره (General Purpose Registers)
میکروکنترلرهای AVR دارای ۳۲ رجیستر همه منظوره هستند این رجیستر ها قسمتی از حافظه داخلی میکروکنترلر می باشند که اکثر دستورات اسمبلی AVR مستقیما با این رجیسترها دسترسی دارند و در یک کلاک سیکل اجرا می شوند.
رجیسترهای Y، X و Z
وظیفه این سه رجیستر که البته از ترکیب رجیسترهای R26 تا R31 بوجود می آیند، اشاره گر ۱۶ بیتی جهت آدرس دهی غیر مستقیم فضای داده هستند و بسیاری از دستورات اسمبلی AVR با این سه رجیستر عمل می کنند.
واحد محاسبه و منطق (Arithmetic Logic Unit)
واحد محاسبه و منطق در میکرو کنترلر AVR به صورت مستقیم با تمام ۳۲ رجیستر همه منظوره ارتباط دارد. عملیاتهای محاسباتی با رجیستر های همه منظوره در یک کلاک سیکل اجرا می شوند. به طور کلی عملکرد ALU را می توان به سه قسمت اصلی ریاضیاتی، منطقی و توابع بینی تقسیم بنیادی کرد. در برخی از ALU های توسعه یافته در معماری میکرو کنترلر های AVR از یک ضرب کننده با قابلیت ضرب اعداد بدون علامت و علامت دار و نیز اعداد اعشاری استفاده شده است.
رجیستر وضعیت (Status Register)
بیت های این رجیستر در واقع پرچم هایی هستند که CPU را از نتایج دستورات و وضعیت برنامه آگاه می کنند.
بیت 0 – C پرچم Carry
انجام دستوراتی که عملیات محاسباتی یا منطقی را انجام می دهند سبب تأثیر بر پرچم نقلی (Carry) می شود. به طور مثال اگر نتیجه جمع ۸ بیتی بیشتر از ۸ بیت شود کری برابر یک خواهد شد.
بیت 1 – Z پرچم Zero
برخی از دستورات منطقی و محاسباتی سبب تأثیر بر روی این پرچم می شوند. اگر حاصل عمليات صفر شود این پرچم فعال می گردد.
بیت 2 – N پرچم Negative
این بیت نشانگر نتایج منفی در عملیاتهای محاسباتی یا منطقی است.
بیت 3 – V پرچم Two ‘ s Complement Overflow
در دستورات محاسباتی این بیت نشانگر سرریز مکمل عدد دو می باشد.
بیت 4 – S بیت علامت Sign Bit
این بیت حاصل XOR دو پرچم N و V می باشد.
بیت 5 – H پرچم Half Carry
در انجام دستورات محاسباتی BCD پرچم نقلی کمکی تاثیر می بیند.
بیت 6 – T پرچم Bit Copy Storage
می توانیم از بیت T به عنوان مبدأ و یا مقصد یک عملیات بیتی استفاده کنیم.
بیت 7 – I پرچم Global Interrupt Enable
این بیت برای فعال سازی وقفه همگانی است اگر این بیت یک شود به دیگر وقفه ها در صورت فعال شدن پاسخ داده می شود. در موقع رخ دادن یکی از وقفه ها برنامه وارد تابع وقفه مربوطه می شود در این حالت این پرچم توسط سخت افزار صفر می شود و به وقفه دیگری پاسخ داده نمیشود و در برگشت از تابع وقفه مربوطه این بیت به طور اتوماتیک توسط سخت افزار یک می شود.
انواع حافظه در میکروکنترلرهای AVR
میکروکنترلرهای AVR دارای سه نوع حافظه هستند
حافظه Flash
در این حافظه کدهای برنامه یعنی همان فایل hex.* که توسط پروگرامر بر روی تراشه Load می شود قرار می گیرد و CPU میکروکنترلر برنامه را که اجرا می کند کد دستورالعمل را از این حافظه برداشت می کند. حافظه ثابت (Flash) میکرو کنترلرهای AVR از نسل جدید این حافظه می باشد و دارای دو قسمت Application و Boot Loader هستند. در قسمت Application کدهای برنامه قرار می گیرد اما ناحیه Boot این امکان را فراهم می کند که میکرو کنترلر بدون استفاده از ابزار پروگرامر، برنامه حافظه Flash را تغییر دهد.
حافظه EEPROM
این حافظه جزء حافظه های ماندگار می باشد که میکرو کنترلر می تواند اطلاعاتی را در این حافظه داخلی بنویسد و یا اطلاعاتی را از آن بخواند. همچنین لازم به یادآوری است که این حافظه در صورت قطع تغذیه میکرو کنترلر پاک نمی گردد. از این حافظه زمانی استفاده می شود که میکرو کنترلر باید دیتایی را در خود ثبت کند و بعد آن دیتا را به کاربر اعلام کند و در صورتی که میکرو کنترلر Reset شد یا تغذیه آن قطع گردید داده ذخیره شده از بین نرود. باید توجه کنید که برای خواندن و نوشتن در حافظه EEPROM باید یک زمان تاخیری در نظر بگیرید.
حافظه SRAM
همان طور که ذکر کردیم کدهای برنامه در حافظه Flash قرار می گیرند و CPU میکروکنترلر کدهای دستورات را آشکار می کند. حال باید حاصل دستورات انجام شده در یک حافظه موقت ذخیره گردد این حافظه در میکرو کنترلر AVR از نوع Static RAM می باشد. رجیستر های همه منظوره و رجیسترهای ورودی و خروجی نیز جزء این حافظه می باشند. محتوای این حافظه با قطع تغذیه پاک می گردد و در صورتی که میکرو کنترلر را Reset کنیم محتوای رجیسترها صفر می شود اما محتوای حافظه SRAM صفر نمی شود.