CMSIS для Cortex-M1
К сожалению, я вынужден использовать и скрывать микроконтроллер на основе ядра ARM Cortex-M1. Я только что узнал, что последний CMSIS (5.2) не поддерживает его, и официальные документы CMSIS говорят это:
CMSIS поддерживает весь спектр процессоров Cortex-M (за исключением Cortex-M1) и архитектуру ARMv8-M, включая расширения безопасности.
Я думаю, Cortex-M1 не очень популярен. Но что мне делать без CMSIS? Мой поставщик поставляет пакет поддержки, который, как ни странно, включает файлы CMSIS для этого ядра, а именно, core_cm1.h; он полон авторских прав ARM и, по-видимому, не написан напрямую указанным поставщиком. В файле комментария указана версия CMSIS V3.20 от 25 февраля 2013 года. Но я не могу найти ее нигде, ни в более высоких версиях CMSIS, ни в более низких.
В "Полном руководстве по ARM Cortex-M0" Джозефа Ю я нашел эту цитату:
Существует также небольшая вероятность того, что программное обеспечение нуждается в незначительной корректировке из-за различий во времени выполнения. На момент написания, для Cortex-M1 нет программного пакета CMSIS. Однако вы можете использовать те же файлы CMSIS для Cortex-M0 при программировании на Cortex-M1, поскольку они основаны на одной и той же версии архитектуры ARMv6-M.
Я обнаружил, что core_cm0.h от CMSIS 4.0 и core_cm1.h от моего поставщика, и нашел только очень незначительные отличия (например, 1 << smthn стал 1u << smthn в нескольких местах). Чем я отличил core_cm0.h от CMSIS 5.0.2 и core_cm1.h от моего поставщика и обнаружил много различий, структуры разные, встроенные функции для NVIC разные и так далее.
Поэтому мой вопрос: действительно ли безопасно использовать core_cm0 для Cortex-M1 даже для самой последней CMSIS? Или я должен играть осторожно и придерживаться файлов моего поставщика (хотя я понятия не имею, где он их взял)?
2 ответа
Вы можете использовать заголовок CMSIS-CORE Cortex-M0 на Cortex-M1. Есть несколько вещей, которые вы должны знать: - Инструкции WFI, WFE и SEV недоступны в Cortex-M1. - Cortex-M1 имеет вспомогательный регистр управления для управления включением I-TCM. Вам необходимо указать это вручную, если вам нужно включить I-TCM. - Регистр идентификатора ЦП имеет другое значение - Время выполнения команды отличается - Задержка прерывания не постоянна.
Существует много изменений кода с CMSIS-CORE 4 на CMSIS-CORE 5. Но эти изменения направлены на поддержку дополнительных инструментов, общих стилей кодирования и для будущего расширения CMSIS. Надеюсь это поможет.
Cortex-M1 очень похож на Cortex-M0 с точки зрения программного обеспечения. На уровне CMSIS использование core_cm0.h (последняя версия CMSIS) будет работать нормально.
Вы также можете обнаружить, что переключатели компилятора не поддерживают Cortex-M1 - в этом случае рассматривайте его как M0.