Cortex-M0+ – не самый новый, маленький малопотребляющий процессор, и, на самом деле, некоторые новые продукты могут превосходить его. Однако его широкое распространение и развитая экосистема продолжают делать процессор привлекательным предложением для приложений с низким энергопотреблением.
Итак, что важно знать о Cortex-M0+ (см. Рисунок 1)? Серия процессоров Cortex-M в целом призвана удовлетворить потребность рынка в устройствах с ограниченным энергопотреблением и низкой стоимостью, а значит, подходящих для широкого спектра приложений. Процессор Cortex-M0+ еще больше расширяет возможности семейства, предъявляя наименьшие требования к площади платы и энергопотреблению. Благодаря этому Cortex-M0+ хорошо подходит для носимых устройств и датчиков.
Рисунок 1. | 32-разрядный Cortex-M0+ – это микропроцессор в миниатюрном корпусе. |
Cortex-M0+ был оптимизирован под конкретные задачи, и по набору инструкций полностью совместим с Cortex-M0. Это означает, что для обоих можно использовать идентичные инструменты компиляции и отладки.
Кристалл Cortex-M0+ имеет опцию, называемую Micro Trace Buffer (MTB) – простой буфер микротрассировки инструкций. Он дополняет возможности отладки в Cortex-M0. Также могут быть добавлены опции, заимствованные из Cortex-M3 и -M4.
Главное, что нужно знать о Cortex-M0+, – это то, что он основан на архитектуре ARMv6-M и имеет общие наборы инструкций с Cortex-M0. Применимы наборы подкоманд: Thumb-1 (большинство); отсутствуют CBZ, CBNZ, IT и Thumb-2 (некоторые); и только BL, DMB, DSB, ISB, MRS, MSR.
Cortex-M0+ имеет 32-битный целочисленный аппаратный умножитель с 32-битными результатами, от 1 до 32 прерываний, а также немаскируемые прерывания.
Функция блока защиты памяти Cortex-M0+ (MPU) заключается в наблюдении за тем, чтобы никакая задача, выполняемая процессором, не повредила память или не повлияла на другие активные задачи. Блок MPU, обычно управляемый с помощью RTOS, может обнаруживать попытки несанкционированного доступа к памяти.
Конвейеризация в Cortex-M0+
Оригинальные ядра Cortex-M0 (а также Cortex-M3 и -M4) построены с использованием трехступенчатого конвейера. Cortex-M0+ отличается тем, что в нем используется двухступенчатый конвейер. В Cortex-M0+ снижено энергопотребление и повышена производительность за счет сокращения конвейеризации с трех до двух ступеней. Большее количество инструкций, выполняемых за цикл, связано с тем, что ветвления занимают на один цикл меньше. Этап 1 – это выборка и предварительное декодирование, а этап 2 – основное декодирование и выполнение.
Почему двухступенчатый? Использование двухступенчатого конвейера вместо трехступенчатого сокращает количество обращений к флэш-памяти. Это важно, поскольку потребление энергии флэш-памятью часто является основным фактором энергопотребления микроконтроллера. Таким образом, сокращение числа обращений к флэш-памяти может значительно снизить общее энергопотребление.
Сколько уровней приоритета прерываний поддерживает Cortex-M0+?
Контроллер вложенных векторных прерываний (NVIC), который функционирует как интерфейс между ядром и любыми внешними источниками прерываний, является частью Arm Cortex-M0+. Он может поддерживать немаскируемые прерывания (NMI) со свойствами, аналогичными свойствам других внешних прерываний, и подключаться к запросу NMI процессора, но отдельно.
Аналогично, контроллер внешних прерываний (EIC) может генерировать событие и позволяет настраивать каждую линию прерываний индивидуально. Также поддерживаются обнаружение сигналов прерываний по импульсу и уровню, быстрая обработка исключений и сцепление прерываний.
NVIC обеспечивает интерфейс между внешними по отношению к ядру источниками прерываний (например, периферийными устройствами и внешними выводами) и самим ядром.
Приоритету каждого источника прерываний программно присваивается один из четырех уровней. Это можно использовать, например, когда два отложенных прерывания имеют одинаковый приоритет. В таком случае приоритет отдается прерыванию с наименьшим номером исключения, также известному как наименьший адрес вектора прерывания.
Характеристики и использование Cortex-M0+
Coretex-M0+ считается одним из самых энергоэффективных процессоров Arm для встраиваемых приложений с урезанными возможностями. M0+ имеет двухступенчатый конвейер ядра, что позволяет ему достичь энергопотребления 11.2 мкВт/МГц при сохранении производительности 2.42 CoreMark/МГц. Процессор также имеет три режима пониженного энергопотребления, которые можно использовать для экономии энергии в зависимости от требований к обработке данных.
Согласно опубликованным источникам, ядро Cortex-M0+ широко внедрено в отрасли. Примеры включают:
- ABOV Semiconductor A31G11x, A31G12x, A31G314;
- Cypress PSoC 4000S, 4100S, 4100S+, 4100PS, 4700S, FM0+;
- Epson S1C31W74, S1C31D01, S1C31D50;
- Holtek HT32F52000;
- Microchip SAM C2, D0, D1, D2, DA, L2, R2, R3; and PIC32CM JH and MC[31];
- NXP LPC800, LPC11E60, LPC11U60;
- NXP (Freescale) Kinetis E, EA, L, M, V1, W0, S32K11x;
- Raspberry Pi RP2040 (два ядра M0+);
- Renesas S124, S128, RE, RE01;
- Silicon Labs (Energy Micro) EFM32 Zero, Happy;
- STMicroelectronics STM32 L0, G0, C0, WL (одно ядро Cortex-M4 + одно ядро Cortex-M0+) (92).
В ряде других устройств Cortex-M0+ используется в качестве вторичного ядра. Примечательно, что малая площадь ядра Cortex-M0+ позволяет ему успешно функционировать в качестве отдельного ядра, встроенного в более крупное устройство в качестве дополнительного ядра. В такой компоновке Cortex-M0+ может обеспечивать разделение задач и/или изоляцию оборудования.