Как стать автором
Обновить

Комментарии 12

За труд спасибо!
Кстати, а как на счет скорости? стал быстрее?
Специальных тестов не проводил. «В рекламе» у Cortex-M3 обещано 1.25DMIPS/MHz против 0.95DMIPS/MHz у ARM7TDMI-S. В реальности же есть сомнения, что компилятор нормально оптимизирует под ядро, да и синтетические это цифры. Что реально дает прирост производительности — это возросшие частоты.
Кстати, забыл упомянуть, ядро Cortex-M3 намного экономичнее. Даже старший LPC1700 холодный на 72МГц, когда как LPC2100 становится теплым после активной работы.
а обвязки сколько надо? кварц и все?
Для LPC1300 (Cortex-M3) из обвязки фактически ничего не нужно, только подать питание 3.3В. Тактировать можно от внутренней RC-цепочки (собственно от нее он и стартует). Мало того, внутренний генератор можно подключать к PLL-модулю. Что самое интересное, при тактировании от внутреннего генератора даже заработал USB, хотя в документации так поступать не рекомендуют (точность недостаточная для стабильной работы шины).

Для LPC2100 (ARM7TDMI-S) требуется питание 3.3В и кварц, встроенных цепей тактирования нет. Для некоторых чипов из серии LPC210x вообще требуется 2 питания (3.3В для периферии и 1.8В для ядра), но они уж совсем древние.
я читал, что стека все-таки два — для Thread и Handler режимов свой…
Да, и правда, в офф. документации в регистрах указано 2 стека: SP_main и SP_process. Только с ходу не понимаю, каким образом использовать эти стеки, надо читать глубже. Но в обычной обработке прерываний периферии в отличие от ARM7 они не участвуют.
Да, стеки переключаются при входе в программное прерывание (инструкция SVC, соответсвенно переход в привилегированный режим), т.е. при системном вызове. Как сейчас понимаю, пользуюсь только привилегированным режимом, в пользовательский не переключаюсь, поэтому наличие 2ого стека и не заметил… Собственно можно сделать так: «MSR PSP, r0», где в r0 состояние стека, эти инициализирует 2ой стек, а вызов «MSR CONTROL, r0», где r0 = 0x03 переведет в непривелегированный режим (т.е. режим Process, он же Thread), при этом переключимся на 2ой стек. При системном вызове и прерываниях, соответственно, после этого будем переключаться в привилегированный режим (он же Main/Handler) и использовать стандартный стек.

Спасибо за вопрос, оказалось выпустил довольно важную особенность.
Не за что, сейчас тоже пытаюсь кортексы изучать, в целях робототехнических применений. У вас, я вижу, опыт есть с ними и с ARM вобще, может посоветуете какую-нибудь литературу или интернет-ресурсы? А то я только с AVR пока работал
По ресурсам сказать тяжело. Есть книги по Atmel и NXP чипам, но они по большому счету — перевод даташитов. Сам начинал с книги: «Микроконтроллеры ARM7 семейство LPC2000 компании Philips» Тревора Мартина, позволяет в общих чертах познакомиться с возможностями и особенностями чипов. Но в основном даташиты и официальная документация, примеры и апноуты.
Совсем забыл написать: в ARMv7-M была закрыта «проблема» с доступом к невыровненным данным. В ARMv4T была «фича»: при чтении слов и двойных инструкцией LDR/LDRH читалось не значение по адресу, а некое смещенное значение по ближайшему снизу выровненному адресу. Иногда приходилось для корректной работы использовать директиву компилятора __packed (в Realview). В Cortex об этом помнить не надо.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации