حافظه فلش و OTP : دراین قسمت از آموزش Tms320F28335 قصد دارم ابتدا شما را با نحوه عملکرد سیستم داخلی پردازنده و موارد مهم و حیاتی برای عملکرد صحیح DSP آشنا کنم. • حافظه های فلش و یکبار برنامه ریزی (OTP). • ماژول امنیتی کد (CSM) که یک ویژگی امنیتی است (این بخش در درس های آینده توضیح داده خواهد شد). • مکانیسم های کلاکینگ شامل نوسان ساز، PLL، XCLKOUT، ماژول نگهبان، و مدهای کم مصرف. همچنین توضیحاتی در مورد تایمرهای 32 بیتی CPU و نحوه عملکرد آنها داده خواهد شد. در ابتدا میخواهیم در مورد حافظه فلش و OTP صحبت کنیم و با نحوه عملکرد و ویژگیها و پارامترهای قابل تنظیم آن آشنا خواهیم شد. همچنین خواهیم دید چگونه با فعال کردن پایپ لاین میتوانیم عملکرد حافظه فلش را بهبود ببخشیم. حافظه فلش : حافظه فلش بر روی پردازنده های سری 2000 به صورت یکپارچه و قابل استفاده هم به عنوان فضای برنامه و هم به عنوان فضای داده طراحی شده است حافظه فلش در سری 2000 همیشه فعال و دارای ویژگیهای زیر میباشد : چند بخشی بودن : کمترین مقدار حافظه که میتوان به صورت اختصاصی بر روی آن نوشت یا داده آن را پاک کرد یک بخش یا سکتور نامیده میشود.وجود چندین سکتور مختلف به شما این امکان را میدهد که بتوانید به راحتی بخشی از حافظه را پاک کنید در حالی که برنامه اصلی بر روی بخش دیگری از حافظه قرار دارد. امنیت کد : فلش پردازنده توسط ماژول امنیت کد (CSM) محافظت می شود. با برنامه نویسی رمز عبور درحافظه فلش،کاربر می تواند از دسترسی افراد غیرمجاز به فلش جلوگیری کند. حالت های کم مصرف: برای صرفه جویی در مصرف توان وقتی از حافظه فلش استفاده نمی شود، دو سطح حالت کم مصرف در دسترس است. حالت های انتظار قابل تنظیم : با استفاده از حالت های انتظار قابل تنظیم (wait-states)می توان بر اساس فرکانس CPU حافظه فلش را تنظیم کرد تا بهترین عملکرد را برای سرعت اجرای معین ارائه دهد. عملکرد بهینه شده : حافظه فلش در سری 2000 دارای یک مد خط لوله (pipeline) اختصاصی میباشد که با استفاده از آن میتوان عمکرد اجرای کدهای خطی را بهبود بخشید. حافظه OTP: بلوک حافظه یکبار برنامه ریزی (OTP) با ظرفیت 1kx16 به طور یکنواخت در فضای حافظه برنامه و داده نگاشته میشود. بنابراین، OTP می تواند برای برنامه ریزی داده ها یا کدها استفاده شود. این بلوک بر خلاف فلش فقط یک بار قابل برنامه ریزی است و پاک نمی شود. مدهای توان حافظه فلش و OTP : مدهای توان حافظه فلش در پردازنده های F2833x میتواند سه حالت مختلف داشته باشد : حالت reset یا sleep : این وضعیت پس از بازنشانی یا همان ریست تراشه فعال می شود. در این حالت بانک و پمپ در حالت sleep (کمترین توان) قرار دارند. هنگامی که فلش در حالت خواب است، خواندن داده ها توسط CPU یا واکشی کد عملیاتی از حافظه فلش یا OTP به طور خودکار باعث تغییر مدهای توان به حالت آماده به کار (استندبای) و سپس به حالت فعال می شود. در طی زمان انتقال به حالت فعال، CPU به طور خودکار متوقف می شود. هنگامی که انتقال به حالت فعال کامل شد، دسترسی CPU به طور معمول برقرار می شود. حالت آماده به کار یا اسندبای : در این حالت بانک و پمپ در حالت آماده به کار هستند. این حالت توان بیشتری نسبت به حالت خواب مصرف می کند، اما زمان کوتاه تری برای انتقال به حالت فعال یا خواندن طول می کشد. هنگامی که فلش در حالت آماده به کار است، خواندن داده توسط CPU یا واکشی کد opcode به فلش یا حافظه OTP به طور خودکار باعث تغییر در حالت های توان به حالت فعال میشود. در طول زمان انتقال به حالت فعال، CPU به طور خودکار متوقف می شود. هنگامی که فلش/OTP به حالت فعال رسید، دسترسی CPU به طور معمول انجام می شود. حالت فعال یا خواندن: در این حالت بانک و پمپ در مد توان فعال (بیشترین توان) هستند. وضعیتهای انتظار دسترسی خواندن یا واکشی CPU به منطقه نقشه حافظه فلش/OTP توسط رجیسترهای FBANKWAIT و FOTPWAIT کنترل میشود. یک مکانیسم پیش واکشی به نام خط لوله فلش نیز وجود دارد که می تواند برای بهبود عملکرد واکشی برای اجرای کدهای خطی نیز فعال گردد. نکته :در طول فرآیند بوت، Boot ROM یک عملیات خواندن ساختگی از محل ذخیره سازی رمز عبور ماژول امنیتی کد (CSM) واقع در فلش انجام می دهد. علت این خواندن باز کردن قفل پردازنده جدید یا پاک شده ای انجام می شود که هیچ رمز عبوری در آن ذخیره نشده است تا بتوان برنامه نویسی فلش یا بارگذاری کد را در SARAM محافظت شده توسط CSM انجام داد. در پردازنده هایی که رمز عبور ذخیره شده دارند، این خواندن تأثیری ندارد و CSM قفل می ماند. یکی از اثرات این خواندن این است که فلاش از حالت خواب (پیش فرض ریست) به حالت فعال می رود. بانک حافظه فلش/OTP و پمپ همیشه در مد توان یکسان هستند.شما می توانید وضعیت فعلی مد حافظه فلش/OTP را به صورت زیر تغییر دهید: برای انتقال به مد توان پایین تر : بیت های حالت رجیستر PWR را از حالت توان بالاتر به حالت توان کمتر تغییر دهید. این تغییر فورا بانک فلش/OTP را به حالت توان پایین تر منتقل می کند. رجیستر PWR فقط با کدی که خارج از حافظه فلش/OTP اجرا می شود قابل دسترسی می باشد. برای انتقال به یک مد توان بالاتر برای انتقال از حالت توان کمتر به حالت توان بالاتر، دو گزینه وجود دارد. رجیستر FPWR را از حالت پایین به حالت بالاتر تغییر دهید. این دسترسی حافظه فلش/OTP را به حالت بالاتر می رساند. با اجرای یک دستورخواندن یا دسترسی به منظور واکشی opcode به حافظه فلش یا OTP دسترسی پیدا کنید. این دسترسی به طور خودکار حافظه فلش/OTP را به حالت فعال می رساند. هنگام انتقال از حالت توان کمتر به حالت بالاتر مقداری تاخیر وجود دارد. شکل زیر را ببینید. این تاخیر برای تثبیت فلش در مد توان بالاتر لازم است. در صورت دسترسی به حافظه فلش/OTP در طول این تاخیر CPU به طور خودکار متوقف می شود تا زمانی که تاخیر کامل شود. مدت زمان تأخیر توسط رجیسترهای FSTDBYWAIT و FACTIVEWAIT تعیین می شود. حرکت از مد خواب به حالت آماده به کار با شمارش تعیین شده توسط رجیستر FSTDBYWAIT به تاخیر می افتد. در حالت حرکت از مد آماده به کار به مد فعال میزان تاخیر توسط رجیستر FACTIVEWAIT تعیین میشود. حرکت از مد خواب (کمترین توان) به مد فعال (بالاترین توان) به اندازه مجموع دو رجیستر FSTDBYWAIT + FACTIVEWAIT به تاخیر می افتد. این رجیسترها باید در حالت پیش فرض خود باقی بمانند. عملکرد فلش و OTP: عملیات خواندن CPU یا واکشی داده در فلش/OTP می تواند یکی از اشکال زیر باشد: واکشی دستورالعمل 32 بیتی خواندن فضای داده 16 بیتی یا 32 بیتی خواندن فضای برنامه 16 بیتی هنگامی که فلش در حالت توان فعال است، یک دسترسی خواندن یا واکشی به منطقه بانک حافظه را می توان به عنوان دسترسی فلش یا دسترسی OTP طبقه بندی کرد. حافظه فلش به صورت آرایه ای و در ردیف ها و ستون ها سازماندهی شده است. هر سطر حاوی 2048 بیت اطلاعات هستند. دسترسی به فلش و OTP به صورت یکی از سه نوع زیر است: دسترسی تصادفی به حافظه فلش: اولین دسترسی به یک ردیف 2048 بیتی یک دسترسی تصادفی در نظر گرفته می شود. دسترسی صفحه ای به حافظه فلش : در حالی که اولین دسترسی به یک ردیف یک دسترسی تصادفی در نظر گرفته می شود، دسترسی های بعدی در همان ردیف، دسترسی های صفحه بندی شده نامیده می شوند. تعداد حالت های انتظار برای هر دو دسترسی تصادفی و صفحه ای را می توان با برنامه ریزی رجیستر FBANKWAIT پیکربندی کرد. تعداد حالت های انتظار استفاده شده توسط یک دسترسی تصادفی توسط بیت های RANDWAIT و تعداد حالت های انتظار استفاده شده توسط یک دسترسی صفحه شده توسط بیت های PAGEWAIT کنترل می شود. رجیستر FBANKWAIT به صورت پیشفرض تعداد حالت انتظار را در بدترین حالت تنظیم میکند و بنابراین، برای بهبود عملکرد بر اساس نرخ ساعت CPU و زمان دسترسی فلش، باید برای تعداد مناسبی از حالتهای انتظار مقداردهی اولیه شود. پردازنده های F2833x/F2823x برای دسترسی به فلش به صورت PAGE/RANDOM به حداقل 1 حالت انتظار نیاز دارند. با فرض اینکه سرعت CPU به اندازه کافی پایین است تا زمان دسترسی تطبیق یابد. دسترسی OTP : دسترسیهای خواندن یا واکشی به OTP توسط بیتهای OTPWAIT در رجیستر FOTPWAIT کنترل میشوند. دسترسی به OTP بیشتر از حافظه فلش طول می کشد و حالت صفحه بندی وجود ندارد. برای تعیین الزامات زمان دسترسی OTP، به داکیومنت راهنمای برای پردازنده خاص خود مراجعه کنید. نکات دیگری که هنگام کار با فلش باید به آنها توجه داشت: نوشتن CPU در فلش یا نقشه حافظه OTP از قائده بالا طبعیت نمیکند. عملیات نوشتن در یک چرخه کامل می شوند. هنگامی که ماژول امنیت کد (CSM) ایمن است، خواندن از منطقه نقشه حافظه فلش/OTP از خارج از منطقه امن به همان تعداد چرخه یک دسترسی معمولی نیاز دارد. با این حال، عملیات خواندن در صورت قفل بودن حافظه فلش /OTP صفر را برمی گرداند. خواندن مکان های رمز عبور CSM به اندازه 16 حالت انتظار ثابت شده است. بیت های PAGEWAIT و RANDOMWAIT هیچ تأثیری روی این مکان ها ندارند. حالت خط لوله فلش: حافظه فلش معمولاً برای ذخیره کد برنامه استفاده می شود. در طول اجرای کد، دستورالعملها از آدرسهای حافظه متوالی واکشی میشوند، مگر اینکه ناپیوستگی (دستورات پرش یا فراخوانی ) رخ دهد. معمولا بخشی از کد که در آدرس های متوالی قرار دارد اکثر کد برنامه را تشکیل می دهد و به آن کد خطی می گویند. برای بهبود عملکرد اجرای کد خطی، یک مد خط لوله فلش تعبیه شده است. قابلیت خط لوله فلش به طور پیش فرض غیرفعال است. تنظیم بیت ENPIPE در رجیستر FOPT این حالت را فعال می کند. حالت خط لوله فلش مستقل از خط لوله CPU است. حداکثر دو دستورالعمل 32 بیتی یا حداکثر چهار دستورالعمل 16 بیتی می توانند در یک دسترسی 64 بیتی واکشی شوند. اکثر دستورات C28x به صورت 16 بیتی هستند، بنابراین برای هر دستورالعمل 64 بیتی که از بانک فلش واکشی می شود بنابراین احتمال دارد که حداکثر چهار دستورالعمل در بافر پیش واکشی به صورت آماده وجود داشته باشد تا برای پردازش تحویل CPU داده شود. در طول مدت زمانی که برای پردازش این دستورالعمل ها طول می کشد، خط لوله فلش به طور خودکار دسترسی دیگری را به بانک فلش برای واکشی 64 بیت بعدی آغاز می کند. به این ترتیب، مد خط لوله فلش در پسزمینه کار میکند تا بافرهای پیش واکشی دستورالعمل تا حد امکان پر باشد. با استفاده از این تکنیک، کارایی کلی اجرای کد متوالی از فلش یا OTP به طور قابل توجهی بهبود می یابد. پیش واکشی خط لوله فلش فقط در یک ناپیوستگی در شمارنده برنامه (PC) که با اجرای دستورالعملی مانند انشعاب، BANZ، فراخوانی یا حلقه ایجاد می شود، متوقف می شود. هنگامی که این اتفاق می افتد، پیش واکشی متوقف می شود و محتویات بافر پیش واکشی تخلیه (flush)می شود. در صورت وقوع این اتفاق دو حالت ممکن است اتفاق بیافتد: اگر آدرس مقصد در فلش یا OTP باشد، پیش واکشی لغو می شود و سپس در آدرس مقصد از سر گرفته می شود. اگر آدرس مقصد خارج از فلش و OTP باشد، پیش واکشی متوقف می شود و تنها زمانی که یک دستور انشعاب اجرای برنامه را دوباره به فلش یاOTP باز می گرداند، پیش واکشی دوباره شروع می شود. مکانیزم پیش واکشی خط لوله فلش فقط برای واکشی دستورالعمل از فضای برنامه اعمال می شود. داده های خوانده شده از حافظه داده و از حافظه برنامه از قابلیت پیش واکشی بافر استفاده نمی کند و در نتیجه بافر پیش واکشی را دور می زند. به عنوان مثال، دستورالعمل هایی مانند MAC، DMAC، و PREAD یک مقدار داده را از حافظه برنامه می خوانند. وقتی این خواندن اتفاق می افتد، بافر پیش واکشی دور زده می شود اما بافر تخلیه نمی شود. اگر زمانی که عملیات خواندن داده ها آغاز می شود، پیش واکشی دستورالعمل در حال انجام باشد، خواندن داده متوقف می شود تا زمانی که پیش واکشی کامل شود. مکان های رزرو شده در Flash و OTP : هنگام تخصیص کد و داده به حافظه فلش و OTP موارد زیر را در نظر داشته باشید: مکان های آدرس 0x33FFF6 و 0x33FFF7 برای دستورالعمل پرش "ورود به فلش" رزرو شده است. هنگامی که از گزینه بوت "boot to flash" استفاده می شود، رام بوت به آدرس 0x33FFF6 می پرد. اگر یک دستورالعمل انشعاب را در اینجا برنامه ریزی کنید، اجرای کد را دوباره به نقطه ورودی برنامه هدایت می کند. برای عملیات امنیت کد، تمام آدرسهای بین 0x33FF80 و 0x33FFF5 را نمیتوان برای کد یا دادههای برنامه استفاده کرد، اما زمانی که رمز عبور کد امنیتی برنامهریزی میشود باید این آدرس ها روی 00000 برنامهریزی شوند. اگر امنیت نگران کننده نیست، آدرس های 0x33FF80 تا 0x33FFF5 ممکن است برای کد یا داده استفاده شود. آدرسهای 0x33FFF0 تا 0x33FFF5 برای متغیرهای داده محفوظ است و نباید حاوی کد برنامه باشد. مراحل تغییر رجیسترهای پیکربندی فلش : در طول پیکربندی فلش، هیچ دسترسی به حافظه فلش یا OTP نمی تواند انجام پذیرد. این محدودیت شامل دستورالعمل هایی است که هنوز در خط لوله CPU، خواندن داده ها، و عملیات پیش واکشی دستورالعمل ها در حال اجرا هستند. برای اطمینان از اینکه هیچ دسترسی در طول تغییر پیکربندی صورت نمی گیرد، باید رویه نشان داده شده در شکل زیر را برای هر کدی که رجیسترهای FOPT، FPWR، FBANKWAIT یا FOTPWAIT را تغییر می دهد، دنبال کنید. رجیسترهای Flash و OTP : حافظه فلش و OTP را می توان با رجیسترهای نشان داده شده در جدول زیر پیکربندی کرد. پیکربندی رجیسترها همگی توسط دستور EALLOW محافظت می شوند. توضیحات بیتها در ویدئو این قسمت گقته شده است. بخش کلاک و کنترل سیستم : در این بخش مکانیسم های نوسان ساز، PLL و کلاکینگ، عملکرد تایمر سگ نگهبان و حالت های کم مصرف رابا هم بررسی میکنیم. در تصویر زیر میتوانید نحوه پخش کلاک در قسمتهای مختلف سری 2000 رو مشاهده نمایید. همانطور که در شکل بالا مشخص است CLKIN کلاک ورودی به CPU میباشد و بعد از گذشتن از آن با نام SYSCLKOUT از CPU خارج میشود. نکته مهم اینست که فرکانس هر دو کلاک یکسان است. در ادامه لیست رجیسترهای مربوط به PLL، کلاکینگ،تایمر سگ نگهبان و مدهای توان پردازنده را مشاهده میکنید که در ادامه به بررسی اولیه آنها پرداخته و در ویدئو آموزشی این بخش به طور مفصل توضیح داده خواهد شد. فعال/غیرفعال کردن کلاک واحدهای جانبی : سه رجیستر PCLKCR0 /1/3 کلاکها را برای ماژول های مختلف جانبی فعال/غیرفعال می کند. یک تاخیر به اندازه 2 سیکل کلاک SYSCLKOUT از زمانی که نوشتن در رجیسترهای PCLKCR0 /1/3 رخ می دهد تا زمانی که عملیات تکمیل شود وجود دارد. این تأخیر باید قبل از تلاش برای دسترسی به رجیسترهای پیکربندی ماژولهای جانبی در نظر گرفته شود. با توجه به مالتی پلکسینگ واحدهای جانبی/GPIO، نمی توان از همه لوازم جانبی به طور همزمان استفاده کرد. اما میتوان کلاک را روی همه واحدهای جانبی به طور همزمان فعال کرد، که مسلم است چنین پیکربندی مفید نیست. و اگر این کار انجام شود، جریان کشیده شده بیش از نیاز خواهد بود و تنها باعث مصرف توان اضافی خواهد شد. برای جلوگیری از این امر، بهتر است فقط کلاک های مورد نیاز برنامه را فعال کنید. دو رجیستر HISPCP و LOSPCP برای تنظیم کلاکهای HSPCLK و LSPCLK استفاده میشوند. وظیفه این دو رجیستر تنظیم کلاک پرسرعت و کم سرعت بر اساس نیاز ماژولهای جانبی است. هر ماژول بسته به نوع کارگرد خود نیاز به یک سطح کلاک خاصی دارد به عنوان مثال پورتهای سریال و یا SPI نیازی نیست که با کلاک بالا تغذیه شوند.ولی در مقابل واحد ADC نیاز به کلاک بالا برای داشتن عملکرد مطلوب دارد. بدین منظور کلاک ورودی به هر واحد جانبی از طریق HSPCLK یا LSPCLK تامین میشود که در شکل بالا کاملا مشخص میباشد. بلوک OSC و PLL : بلوک نوسان ساز روی تراشه و حلقه قفل فازشونده (PLL) وظیفه تامین سیگنال های کلاک را برای پردازنده و همچنین کنترل ورود حالت کم توان (LPM) را فراهم می کند. ماژول کلاک مبتنی بر PLL : پردازنده های 2833x، 2823x دارای یک ماژول کلاک روی تراشه و مبتنی بر PLL هستند. PLL دارای یک رجیستر کنترل نسبت 4 بیتی برای انتخاب نرخ های مختلف ساعت CPU است. در شکل زیر بلوک OSC و PLL را مشاهده می کنید. ماژول کلاک مبتنی بر PLL دو حالت کاری را ارائه می دهد: عملکرد کریستال/رزوناتور: اسیلاتور روی تراشه امکان استفاده از یک کریستال/رزوناتور خارجی را برای اتصال به DSP فراهم می کند تا پایه زمانی پردازنده فراهم شود. کریستال/رزوناتور به پینهای X1/X2 وصل شده و XCLKIN به زمین متصل میشود. منبع کلاک خارجی: اگر از اسیلاتور روی تراشه استفاده نشود، در این حالت میتوانید نوسانگر داخلی را دور بزنید. کلاکهای پردازنده از ورودی منبع کلاک خارجی روی پین X1 یا XCLKIN تولید میشوند. که دو حالت در دسترس میباشد : انتخاب اول: کلاک خارجی روی پین XCLKIN: هنگام استفاده از XCLKIN به عنوان منبع کلاک خارجی، باید X1 را زمین کنید و X2 را بدون استفاده رها کنید. در این حالت، یک نوسان ساز خارجی به پین XCLKIN متصل می شود که امکان استفاده از منبع کلاک با دامنه 3.3 ولت را فراهم می کند.به عنوان مثال در این حالت کلاک میتواند از یک فانکشن ژنراتور یا یک برد دیگر تامین شود.نکته مهم در این حالت داشتن دامنه 3.3 ولتی کلاک میباشد. انتخاب دوم: کلاک خارجی روی پین X1: هنگام استفاده از X1 به عنوان منبع کلاک، باید XCLKIN را به زمین متصل و X2 را رها کنید. در این حالت، یک سیگنال نوسان ساز خارجی به پایه X1 متصل می شود که امکان استفاده از منبع کلاک 1.8 ولتی را فراهم می کند. به عنوان مثال میتوانید یک اسیلاتور خارجی با دامنه نوسان 1.8 ولتی را به این پایه متصل کنید. نکته :مدار OSC اتصال یک کریستال را با استفاده از پین های X1 و X2 برای کاربر امکان پذیر می کند. اگر از کریستال استفاده نمی شود، می توان یک نوسان ساز خارجی را مستقیماً به پایه XCLKIN متصل کرد، پایه X2 بدون اتصال رها می شود و پایه X1 به زمین متصل می شود. کلاک ورودی و بیت های PLLCR[DIV] باید به گونه ای انتخاب شوند که فرکانس خروجی PLL (VCOCLK) از 300 مگاهرتز تجاوز نکند. مکانیزم تشخیص خرابی اسیلاتور اصلی : ممکن است به دلیل ارتعاشات،ضربه و یا هر عامل خارجی دیگری، منبع کلاک خارجی متصل به DSP جدا شده و دستگاه را کلاک نکند. هنگامی که PLL غیرفعال نیست، منطق تشخیص خطای نوسان ساز اصلی به پردازنده اجازه می دهد تا این شرایط را تشخیص دهد و به طور پیش فرض به حالت شناخته شده ای که در ادامه توضیح داده شده است، تغییر وضعیت دهد. همانطور که در شکل زیر نشان داده شده است از دو شمارنده برای نظارت بر وجود سیگنال OSCCLK استفاده می شود. شمارنده اول توسط خود سیگنال OSCCLK یا از ورودی X1/X2 یا XCLKIN افزایش می یابد. هنگامی که PLL خاموش نیست، شمارنده دوم توسط VCOCLK که از بلوک PLL خارج می شود، افزایش می یابد. این شمارنده ها به گونه ای پیکربندی شده اند که وقتی شمارنده OSCCLK که یک شمارنده 7 بیتی سرریز می کند، شمارنده 13 بیتی VCOCLK را پاک می کند. در حالت کارکرد عادی، تا زمانی که OSCCLK وجود دارد، شمارنده VCOCLK هرگز سرریز نخواهد شد. اگر سیگنال ورودی OSCCLK وجود نداشته باشد، PLL یک فرکانس پیشفرض "مد limp " را تامین میکند و شمارنده VCOCLK به افزایش خود ادامه میدهد. از آنجایی که سیگنال OSCCLK وجود ندارد، شمارنده OSCCLK افزایش نمی یابد و بنابراین شمارنده VCOCLK به صورت دوره ای پاک نمی شود. در نهایت، شمارنده VCOCLK سرریز می شود و در صورت نیاز، پردازنده ورودی CLKIN به CPU را به فرکانس خروجی حالت limp از PLL تغییر می دهد. هنگامی که شمارنده VCOCLK سرریز می شود، منطق تشخیص کلاک از دست رفته، CPU و تجهیزات جانبی دستگاه را بازنشانی می کند. تنظیم مجدد ایجاد شده به عنوان بازنشانی منطقی تشخیص کلاک گمشده (MCLKRES) شناخته می شود. MCLKRES فقط یک ریست مجدد داخلی است. پین XRS خارجی پردازنده توسط MCLKRES پایین نمی آید و رجیسترهای PLLCR و PLLSTS ریست نمی شوند. علاوه بر تنظیم مجدد پردازنده، منطق کلاک از دست رفته بیت رجیستر PLLSTS[MCLKSTS] را ست می کند. وقتی بیت MCLKCSTS برابر 1 باشد، نشان دهنده آنست که کلاک ورودی از دست رفته، پردازنده ریست شده است و CPU اکنون در فرکانس یا نیمی از فرکانس حالت limp کار میکند. فرکانس مد limp بین 1 تا 5 مگاهرتز میباشد. برنامه کاربر باید بیت PLLSTS[MCLKSTS] را پس از بازنشانی بررسی کند تا تعیین کند که آیا دستگاه توسط MCLKRES به دلیل عدم وجود شرایط کلاک بازنشانی شده است یا خیر. اگر MCLKSTS یک شده باشد، برنامه باید اقدام مناسب را انجام دهد به عنوان مثال خاموش کردن سیستم. وضعیت کلاک از دست رفته را می توان با نوشتن یک عدد 1 در بیت PLLSTS[MCLKCLR] پاک کرد. با این کار مدارها و شمارنده های تشخیص کلاک از دست رفته ریست می شود. اگر OSCCLK هنوز پس از نوشتن در بیت MCLKCLR وجود نداشته باشد، شمارنده VCOCLK دوباره سرریز می شود و این روند تکرار می شود. نکته :برنامه هایی که در آنها فرکانس کاری صحیح CPU کاملاً حیاتی است، باید مکانیزمی را اجرا کنند که به وسیله آن DSP در صورت خرابی کلاک های ورودی، مجدداً تنظیم شود. برای مثال، ممکن است از یک مدار R-C برای راه اندازی پین XRS DSP استفاده شود خازن همیشه به طور کامل شارژ می شود. برای جلوگیری از شارژ کامل خازن، ممکن است از یک پایه ورودی/خروجی برای تخلیه دوره ای خازن استفاده شود. چنین مداری به تشخیص خرابی حافظه فلش و خط تغذیه VDD3VFL نیز کمک می کند. ملزومات و محدودیت های زیر را باید در مورد PLL و کلاک همواره در نظر داشت : هنگام تغییر PLL Control Register از روش مناسب استفاده کنید: هنگام اصلاح رجیستر PLLCR، همیشه از رویه مشخص شده در شکلی که در ادامه آمده است پیروی کنید. هنگامی که دستگاه در مد limp کار می کند، روی رجیستر PLLCR ننویسید. هنگام نوشتن در رجیستر PLLCR، پردازنده به ورودی CLKIN با تنظیم OSCCLK/2 سوئیچ می کند. هنگامی که پردازنده پس از شناسایی حالت limp کار می کند، OSCCLK ممکن است وجود نداشته باشد و کلاک های سیستم متوقف شود.بنابراین همیشه قبل از نوشتن در رجیستر PLLCR همانطور که در نمودار پایین وضیح داده شده است، ابتدا بررسی کنید که بیت PLLSTS[MCLKSTS] = 0 باشد. تایمر سگ نگهبان بدون ساعت خارجی کارایی ندارد. Watchdog کاربردی نیست و نمیتواند سیگنال ریست را زمانی که OSCCLK وجود ندارد ایجاد کند. در صورتی که OSCCLK گم شود، هیچ سخت افزار خاصی برای تغییر کلاک سگ نگهبان به کلاک حالت limp اضافه نشده است. مد limp ممکن است پس از روشن شدن پردازنده کار نکند. در صورتی که OSCCLK از ابتدا و قبل از روشن شدن پردازنده وجود نداشته باشد، ممکن است PLL کلاک حالت limp را ایجاد نکند. تنها در صورتی که OSCCLK از ابتدا وجود داشته باشد، یک کلاک حالت limp توسط PLL بعد از گم شدن کلاک ورودی ایجاد می شود. هنگامی که پردازنده در مد limp کار می کند، به مد کم مصرف HALT وارد نشوید. اگر بخواهید وارد حالت HALT شوید زمانی که پردازنده از قبل در حالت limp کار می کند، ممکن است تراشه به درستی وارد HALT نشود. ممکن است دستگاه در عوض وارد حالت STANDBY شود یا هنگ کند و ممکن است نتوانید از حالت HALT خارج شوید. به همین دلیل، همیشه قبل از ورود به حالت HALT بررسی کنید که بیت PLLSTS[MCLKSTS] = 0 باشد. لیست زیر رفتار منطق تشخیص کلاک از دست رفته را در حالت های مختلف عملیاتی پردازنده شرح می دهد: مد بای پس PLL : هنگامی که رجیستر کنترل PLL روی 0x0000 تنظیم می شود، PLL بای پس می شود. بسته به وضعیت بیت PLLSTS[DIVSEL]، مقدار کلاک OSCCLK، OSCCLK/2 یا OSCCLK/4 مستقیماً به ورودی CPU، CLKIN متصل می شود. اگر OSCCLK به عنوان گمشده تشخیص داده شود، پردازنده به طور خودکار به PLL سوئیچ میکند، بیت وضعیت تشخیص کلاک گمشده را تنظیم میکند و ریست کلاک مفقود را ایجاد میکند. پردازنده اکنون در فرکانس حالت limp یا نیمی از فرکانس حالت limp کار می کند. حالت PLL فعال : هنگامی که رجیستر کنترل PLL غیر صفر باشد (PLLCR = n، جایی که n ≠ 0x0000)، PLL فعال می شود. در این حالت، OSCCLK*n، OSCCLK*n/2 یا OSCCLK*n/4 به CLKIN CPU متصل می شود. اگر OSCCLK گم شده تشخیص داده شود، بیت وضعیت تشخیص کلاک مفقود ست می شود و پردازنده یک ریست کلاک مفقود ایجاد می کند. پردازنده اکنون در یک دوم فرکانس حالت limp کار می کند. حالت STANDBY : در این حالت،سیگنال CLKIN به CPU متوقف می شود. اگر کلاک ورودی گم شده تشخیص داده شود، بیت وضعیت کلاک مفقود ست می شود و دستگاه یک ریست کلاک از دست رفته ایجاد می کند. اگر زمانی که این اتفاق می افتد PLL در حالت بای پس باشد، نیمی از فرکانس limp به طور خودکار به CPU هدایت می شود. بسته به وضعیت بیت PLLSTS[DIVSEL]، پردازنده اکنون در فرکانس حالت limp یا در نیم یا یک چهارم فرکانس حالت limp کار می کند. مد HALT : در حالت کم مصرف HALT، تمام کلاک های پردازنده خاموش میشوند. هنگامی که پردازنده از حالت HALT خارج می شود، نوسانگر و PLL روشن می شوند. شمارندههایی که برای تشخیص کلاک ورودی گمشده (VCOCLK و OSCCLK) استفاده میشوند، تنها پس از اتمام فرایند روشن شدن مجدد نوسانگر و PLL فعال میشوند. اگر شمارنده VCOCLK سرریز شود، بیت وضعیت تشخیص کلاک از دست رفته ست می شود و دستگاه یک ریست کلاک از دست رفته ایجاد می کند. اگر PLL هنگام سرریز در حالت بای پس باشد، نیمی از فرکانس limp به طور خودکار به CPU هدایت می شود. بسته به وضعیت بیت PLLSTS[DIVSEL]، پردازنده اکنون در فرکانس حالتlimp یا در نیم یا یک چهارم فرکانس حالت limp کار می کند. تولید کلاک XCLKOUT : سیگنال XCLKOUT مستقیماً از ساعت سیستم SYSCLKOUT همانطور که در شکل زیر نشان داده شده است مشتق می شود. XCLKOUT می تواند برابر، یک دوم یا یک چهارم SYSCLKOUT باشد. به طور پیشفرض، هنگام روشن شدن پردازنده، XCLKOUT = SYSCLKOUT/4 یا XCLKOUT = OSCCLK/16. توجه داشته باشید که رام بوت SYSCLKOUT را از OSCCLK/4 به OSCCLK/2 تغییر می دهد. بنابراین، اگر رام بوت پس از تنظیم مجدد، execut شده باشد، XCLKOUT برابر OSCCLK/8 خواهد بود. سیگنال XCLKOUT هنگامی که ریست پردازنده فعال است نیز کار میکند. از آنجایی که XCLKOUT باید برابر SYSCLKOUT/4 در زمانی که پایه ریست زمین است باشد، می توانید از این سیگنال برای تشخیص اینکه آیا دستگاه در حین دیباگ به درستی کلاک شده است، استفاده نمایید. اگر از XCLKOUT استفاده نمی کنید، می توان آن را با تنظیم بیت CLKOFF روی 1 در رجیستر XINTCNF2 غیر فعال کرد. رجیستر تنظیمات PLL : رجیستر PLLCR برای تغییر ضریب PLL پردازنده استفاده می شود. قبل از نوشتن در رجیستر PLLCR، شرایط زیر باید رعایت شود: بیت PLLSTS[DIVSEL] باید 0 باشد (تقسیم CLKIN بر 4 فعال است). PLLSTS[DIVSEL] را فقط پس از تکمیل قفل شدن PLL، یعنی بعد از PLLSTS[PLLLOCKS] = 1 تغییر دهید. پردازنده نباید در "حالت limp" کار کند. یعنی بیت PLLSTS[MCLKSTS] باید 0 باشد. هنگامی که PLL پایدار است و در فرکانس مشخص شده جدید قفل می شود، PLL CLKIN را به مقدار جدید تغییر دهید. وقتی این اتفاق می افتد، بیت PLLLOCKS در ثبات PLLSTS ست می شود،که نشان می دهد فرایند قفل شدن PLL به پایان رسیده است و پردازنده اکنون در فرکانس جدید کار می کند. نرم افزار کاربر می تواند بیت PLLLOCKS را نظارت کند تا مشخص کند که چه زمانی PLL قفل کامل شده است. هنگامی که PLLSTS[PLLLOCKS] = 1، میتوان DIVSEL را تغییر داد. هر زمان که در حال نوشتن در رجیستر PLLCR هستید، رویه شکل زیر را دنبال کنید. سگ نگهبان : هر زمان که شمارنده 8 بیتی Watchdog به حداکثر مقدار خود رسید، ماژول Watchdog یک پالس خروجی به عرض 512 کلاک نوسانگر (OSCCLK) تولید می کند. برای جلوگیری از این امر، کاربر میتواند شمارنده را غیرفعال کند یا نرمافزار باید به صورت دورهای یک توالی 0x55 + 0xAA را در ثرجیستر کلید تایمر سگ نگهبان بنویسد که شمارنده سگ نگهبان را ریست میکند. شکل زیر بلوک های عملکردی مختلف را در ماژول سگ نگهبان نشان می دهد. سرویس تایمر Watchdog: WDCNTR زمانی بازنشانی میشود که توالی مناسب در رجیستر WDKEY قبل از سرریز شدن شمارنده نگهبان 8 بیتی (WDCNTR) نوشته شود. هنگامی که مقدار 0x55 در WDKEY نوشته شود، WDCNTR مجدداً فعال می شود. وقتی مقدار بعدی نوشته شده در رجیستر WDKEY 0xAA باشد، WDCNTR ریست می شود. هر مقداری که در WDKEY به غیر از 0x55 یا 0xAA نوشته شود هیچ اقدامی رخ نمیدهد. هر دنباله ای از مقادیر 0x55 و 0xAA را می توان بدون ایجاد بازنشانی سیستم در WDKEY نوشت. فقط نوشتن 0x55 بعد ازنوشتن 0xAA در WDKEY WDCNTR را بازنشانی می کند. به تصویر زیر دقت نمایید. مرحله 3 در جدول بالا اولین اقدامی است که WDCNTR را قادر به تنظیم مجدد می کند. WDCNTR در واقع تا مرحله 6 ریست نمی شود. مرحله 8 مجدداً WDCNTR را مجدداً فعال می کند و مرحله 9 WDCNTR را بازنشانی می کند. مرحله 10 مجدداً WDCNTR را تنظیم می کند. نوشتن مقدار کلید اشتباه روی WDKEY در مرحله 11 باعث هیچ اقدامی نمی شود، اما WDCNTR دیگر برای ریست فعال نیست و 0xAA در مرحله 12 هیچ تاثیری ندارد. اگر Watchdog برای بازنشانی دستگاه پیکربندی شده باشد، سرریز WDCR یا نوشتن مقدار نادرست روی بیتهای WDCR[WDCHK] پردازنده را ریست کرده و پرچم تایمر سگ نگهبان (WDFLAG) را در رجیستر WDCR ست میکند. ریست Watchdog یا حالت وقفه Watchdog: تایمر سگ نگهبان را می توان در رجیستر SCSR پیکربندی کرد تا دستگاه را ریست کند (WDRST) یا در صورتی که شمارنده سگ نگهبان به حداکثر مقدار خود برسد، یک وقفه (WDINT) ایجاد کند. رفتار هر یک از این شرایط در زیر شرح داده شده است : حالت ریست : اگر Watchdog برای تنظیم مجدد پردازنده پیکربندی شده باشد، سیگنال WDRST زمانی که شمارنده Watchdog به حداکثر مقدار خود می رسد، پین ریست پردازنده (XRS) را به مدت 512 سیکل OSCCLK پایین می کشد. حالت وقفه : اگر سگ نگهبان طوری پیکربندی شده باشد که یک وقفه ایجاد کند، سیگنال WDINT برای 512 سیکل OSCCLK پایین میآید و در صورتی که در ماژول PIE فعال باشد، وقفه WAKEINT در PIE گرفته میشود. وقفه نگهبان در لبه پایین رونده WDINT فعال می شود. بنابراین، اگر قبل از غیرفعال شدن WDINT، وقفه WAKEINT دوباره فعال شود، بلافاصله وقفه دیگری دریافت نخواهید کرد. وقفه بعدی WAKEINT در مهلت زمانی بعدیتایمر سگ نگهبان رخ خواهد داد. اگر Watchdog قبل از غیرفعال شدن WDINT غیرفعال شود، شمارش سیکل 512 متوقف می شود و WDINT فعال باقی می ماند. وقتی سگ نگهبان دوباره فعال شود، شمارش از سر گرفته میشود.اگر تایمر سگ نگهبان از حالت وقفه به حالت ریست پیکربندی شود در حالی که WDINT هنوز فعال است، پردازنده بلافاصله ریست میشود. بیت WDINTS در رجیستر SCSR را می توان برای تعیین وضعیت فعلی سیگنال WDINT قبل از تنظیم مجدد سگ نگهبان در مد ریست خواند. عملکرد Watchdog در مدهای کم مصرف: در حالت STANDBY، تمام کلاک های واحد های جانبی خاموش میشوند. از آنجایی که ماژول سگ نگهبان از کلاک نوسانگر (OSCCLK) کلاک خود را تامین میکند، تنها وسیله جانبی که همچنان کاربردی باقی می ماند، سگ نگهبان است. سیگنال WDINT به بلوک حالت های کم مصرف (LPM) وارد می شود تا بتوان از آن برای بیدار کردن پردازنده از حالت کم مصرف STANDBY (در صورت فعال بودن) استفاده کرد. در حالت IDLE، سیگنال وقفه نگهبان (WDINT) می تواند یک وقفه برای CPU ایجاد کند تا CPU را از حالت IDLE خارج کند. تایمر سگ نگهبان به وقفه WAKEINT در PIE متصل است. نکته :اگر از وقفه سگ نگهبان برای بیدار شدن از حالت کم مصرف IDLE یا STANDBY استفاده می شود، مطمئن شوید که سیگنال WDINT قبل از تلاش برای بازگشت به حالت IDLE یا STANDBY دوباره به حالا HIGH برگردد. سیگنال WDINT برای 512 چرخه OSCCLK زمانی که وقفه سگ نگهبان تولید می شود، پایین نگه داشته می شود. شما می توانید وضعیت فعلی WDINT را با خواندن بیت وضعیت وقفه سگ نگهبان (WDINTS) در رجیستر SCSR تعیین کنید. WDINTS وضعیت WDINT را با دو سیکل SYSCLKOUT دنبال می کند. ملاحظات شبیه سازی : ماژول Watchdog تحت شرایط مختلف دیباگ به شرح زیر عمل می کند: CPU Suspended: هنگامی که CPU تعلیق می شود، کلاک تایمر سگ نگهبان (WDCLK) به حالت تعلیق در می آید. حالت Run-Free: هنگامی که CPU در حالت Run-free قرار می گیرد، ماژول Watchdog کار خود را به صورت عادی ادامه میدهد. حالت تک مرحله ای بلادرنگ: وقتی CPU در حالت تک مرحلهای بیدرنگ است، کلاک تایمر سگ نگهبان (WDCLK) به حالت تعلیق در می آید. سگ نگهبان حتی در وقفه های بیدرنگ نیز معلق می ماند. حالت بدون درنگ Run-Free: هنگامی که CPU در حالت اجرا در زمان واقعی است، Watchdog به طور معمول کار می کند. وقتی پایه XRS زمین شده باشد، بیت WDFLAG به اجبار LOW می شود. بیت WDFLAG تنها در صورتی ست میشود که یک لبه افزایشی در سیگنال WDRST مشاهده شود (پس از همگامسازی و تأخیر به اندازه 8192 سیکل SYSCLKOUT) و سیگنال XRS در وضعیت HIGH باشد. اگر هنگامی که WDRST بالا می رود سیگنال XRS در وضعیت LOW باشد، بیت WDFLAG روی 0 باقی می ماند. در یک برنامه عادی ، سیگنال WDRST به ورودی XRS متصل می شود. از این رو برای تمایز بین تنظیم مجدد سگ نگهبان و ریست خارجی پردازنده، سیگنال ریست خارجی باید مدت زمان بیشتری نسبت به پالس سگ نگهبان معتبر باشد. تایمرهای 32 بیتی CPU 0/1/2 : پردازنده های سری 2000 دارای 3 عدد تایمر 32 بیتی هستند که میتوان از آنها برای کارهای عمومی مانند زمان بندی و یا محاسبه زمان اجرای یک روتین و غیره استفاده کرد. این تایمرها به هیچ پایه فیزیکی از DSP متصل نیستند. CPU-Timer 0 و CPU-Timer 1 را می توان در برنامه کاربر استفاده کرد. تایمر 2 برای DSP/BIOS رزرو شده است. اگر برنامه از DSP/BIOS استفاده نمی کند، می توان از Timer 2 در برنامه استفاده کرد. سیگنال های وقفه تایمر (TINT0، TINT1، TINT2) همانطور که در شکل زیر نشان داده شده است به CPU متصل می شوند. عملکرد کلی تایمر CPU به شرح زیر است: رجیستر شمارنده 32 بیتی TIMH:TIM با مقدار رجیستر پریود PRDH:PRD بارگذاری می شود. شمارنده هر بار یک عدد کاهش می یابد (TPR[TDDRH:TDDR]+1) سیکل کاهش برابر است با سیکل SYSCLKOUT تقسیم بر مقدار رجیستر TDDRH:TDDR . هنگامی که شمارنده به 0 می رسد، سیگنال خروجی وقفه تایمر یک پالس وقفه ایجاد می کند.