الکترونیک

معرفی سری ARM Cortex

نوشته شده توسط احسان

تا همین شش یا هفت سال گذشته یکی از عمده دغدغه های طراحان میکروکنترلر استفاده از ARM7 یا ARM9 بعنوان هسته مرکزی ( CPU ) برای میکروکنترلرها بود. امروز حدودا ۲۴۰ میکروکنترلر با هسته ARM از طرف سازندگان مختلف در بازار در دسترس هستند. اخیرا ST Microelectronics سری میکرو های خودش با عنوان STM32 رو ارائه کرده ( که تا زمان انتشار این مقاله سری STM32F7xx هم عرضه شده ) که جزء اولین میکرو هاشون با هسته ARM Cortex-M3 هستند. این قطعه استانداردهای جدیدی در کارایی و قیمت و همچنین قابلیت های عملکرد در حالت کم توان و Hard real-time control ارائه کرده که تا زمان خودش بی رقیب بوده است.

خب حالا Cortex چی هست؟

خانواده ARM Cortex نسل جدیدی از پردازنده ها هستن که پاسخگوی تقاضای طیف وسیعی از نیازهای تکنولوژی امروز اند. برعکس بقیه پردازنده های ARM، خانواده Cortex یک هسته کامل پردازنده اس که متشکل از یک CPU استاندارد و معماری سیستم (System Architecture) میشه. خانواده Cortex به سه دسته اصلی تقسیم میشه:

  1. سری A برای مصارف پرهزینه و کاربردهای تجاری (مثلا در موبایل ها و تبلت ها و …)
  2. سری R برای مصارف real-time
  3. سری M برای موارد کم هزینه و کاربردهای میکروکنترلری

STM32 بر پایه سری Cortex-M3 شروع بکار کرده که این سری مخصوصا برای تلفیق کارایی بالا و مصرف توان پایین طراحی شده. قیمت بسیار پایین باعث شده بتونه با میکروکنترلرهای ۸ و ۱۶ بیتی سنتی رقابت کنه!

شایان ذکره که میکروی جدید و بسیار ارزون قیمتی که اخیرا وارد بازار کشور شده STM32F030F4P با قیمت تقریبا برابر با attiny13 ولی با فرکانس کلاک ۴۸ مگاهرتز و حافظه ۱۶kb فلش و ۲kb رم واقعا مجالی به ما برای استفاده دوباره از attiny تو پروژه های ساده و کم هزینه نداد!

وقتی پردازنده های ARM7 و ARM9 راهشون رو با موفقیت برای رسیدن به میکروکنترلرهای استاندارد باز کردن، هر کدوم میراث SoC (سیستم روی چیپ) خودشون رو عرضه کردن. این موضوع بیشتر در حوزه ی رسیدگی به وقفه ها و رد خطاها ( Exception and Interrupt Handling ) بیشتر حائز اهمیت شد، چونکه هر تولید کننده میکروکنترلر راه حل خودش رو ارائه کرد. ولی Cortex-M3 هسته میکروکنترلر استانداردی رو عرضه کرد که خیلی بیشتر از یه پردازنده اس تا تمام قلب یک میکروکنترلر رو اعم از سیستم وقفه، تایمر SysTick، سیستم دیباگ – عیب یابی – و نقشه حافظه شامل بشه و سیستم یکپارچه ای رو ارائه کنه. فضای ۴ گیگابایتی آدرس دهی Cortex-M3 به بخش های کاملا مشخص شده و جدا شده که شامل بخش کد، SRAM، تجهیزات داخلی میکرو ( Peripherals ) و تجهیزات سیستمی میکرو تقسیم شده اند. برخلاف ARM7، هسته Cortex-M3 بر مبنای معماری هاروارد ساخته شده و به همین خاطر چندین باس دیتا داره که اجازه میده پردازش هارو بطور موازی انجام بده(!) و عملکرد کلی رو بشدت افزایش بده. برخلاف معماری های قبلی ARM، خانواده Cortex اجازه دسترسی بدون صف ( unaligned data access ) به دیتا رو میده که این موضوع باعث میشه دسترسی به حافظه داخلی SRAM بسیار موثرتر باشه. خانواده Cortex همچنین قابلیت ست و ریست کردن ( ۱ و ۰ کردن بیت های حافظه ) بیتها رو تو دو محدوده ۱ مگابایتی از حافظه با عنوان متد بیت-بندینگ ( bit banding ) میده که اجازه میده دسترسی موثری به رجیسترهای ابزارهای جانبی و پرچم ها ( flags ) روی حافظه SRAM داشته باشیم بدون اینکه به پردازنده تمام باینری – دودویی ( binary ) –  نیازی باشه.

پروسسور Cortex-M3 تو قلب میکروکنترلر STM32
Cortex-M3 یه پروسسور استاندارد شده متشکل از پردازنده ۳۲ بیتی،
ساختار باس، واحد وقفه تودرتو، سیستم عیب یابی و ترکیب حافظه استاندارد

یکی از نقاط قوت هسته Cortex-M3 کنترلر NVIC اون هست. NVIC ساختار استانداردی رو برای تمام میکروکنترلرهای برپایه Cortex عرضه میکنه. تا ۲۴۰ بردار وقفه برای منابع جانبی ( peripheral ها ) که هر کدوم با اولویت ( priority ) خاص خودشون اجرا بشن. NVIC برای پاسخگویی خیلی سریع به رویدادهای وقفه طراحی و بهینده شده ( با میکروی STM32F103CBT و کلاک ۷۲مگاهرتز، حداکثر ۰٫۵ میکروثانیه تا اجرای وقفه فاصله است! ). زمان دریافت سیگنال رویداد تا اجرای اولین خط از دستور روتین سرویس (تابع مرتبط شده به بردار وقفه) فقط ۱۲ پالس ساعت فاصله است. قسمتی از این رویه به کمک رسیدگی اتوماتیک به stack  و توسط میکروکد های CPU انجام میشه. تو حالتی که وقفه ها پشت سر هم باشن، NVIC از متد “tail chaining” که باعث میشه وقفه ها با فاصله فقط ۶ کلاک پالس از هم اجرا بشن بهره میگیره. طی فاز پشته سازی وقفه ها، یه وقفه با ارزش میتونه اول صف قرار بگیره بدون اینکه نیاز به پالس اضافه ای برای CPU باشه. ساختار وقفه همینطور خیلی خوب جمع و بهینه شده تا تو حالت کم مصرف ( low power ) هسته Cortex-M3 هم کار کنه. میشه رجیسترهارو تنظیم کرد که CPU بطور اتوماتیک بعد اجرای وقفه به حالت کم مصرف برگرده و هسته تا زمان وقفه بعدی تو حالت خواب بمونه.

هرچند Cortex-M3 طراحی شده تا یه هسته ارزون قیمت باشه، اما هنوز یه CPU با پردازنده ۳۲ بیتی داره و به همین خاطر دو تا حالت فعالیت رو پشتیبانی میکنه: حالت Thread و حالت Handler، که هر کدوم میتونن با پشته های خودشون کانفیگ بشن. این اجازه میده که طراحی های نرم افزاری خیلی پیچیده هم امکان پذیر باشه و بشه سیستم عامل های بلادرنگ ( real-time ) رو هم روی این میکروها داشته باشیم. علاوه بر اینها هسته Cortex دارای یک تایمر اتوماتیک ۲۴ بیتی که هدفش وقفه مداوم و منظم برای هسته ی RTOS هست. پردازشگر های ARM7 و ARM9 دو دسته دستور دارن ( دستورات ۳۲ بیتی ARM و دستورات ۱۶ بیتی Thumb ) خانواده Cortex طراحی شدن که دستورات Thumb-2 رو پشتیبانی کنن. Thumb-2 ترکیب Thumb و ARM هست و هم از مزیت کم شدن حجم کد تو حالت Thumb بهره میگیره و هم دستورات پیچیده ARM رو تو خودش داره. مجموعه دستورات Thumb-2 دستورات غنی هستن که مخصوصا برای کامپایلرهای ++C/C طراحی شدن. این یعنی برنامه Cortex میتونه کاملا به زبان C نوشته بشه.

درباره نویسنده

احسان

یه علاقمند به حوزه علم و فناوری که دوست داره با به اشتراک گذاشتن دانشش قدم کوچکی برای کمک به جامعه فنی برداره :)

نظر بگذارید