Рейтинг
14.79
голосов: 11

О блоге

Работа с контроллерами LPC на ядре Cortex от NXP

Администраторы (1)

Модераторы (0)

Модераторов здесь не замечено

Читатели (40)

marvin_yorke Vga mzw neiver anwi angel5a redhead bdpcvit Lifelover lleeloo Rh1N0 Vishen lexanet glukerr BigLeha Zov abigsam Nebel shum_inc PPetrovich

Все читатели блога

Месяц HAL продолжается: HAL для LPC

В продолжение месяца постов о HAL решил написать и о своей библиотеке, правда, в отличие от предыдущих она в основном специализируется на контроллерах от NXP. Библиотека не использует дополнительных прослоек и работает напрямую с регистрами. Она состоит из двух обязательных частей, которые собираются с помощью GCC ARM, make и kconfig, и затем статически линкуются с основным проектом.


Читать дальше

mbed LPC1768 + IAR + CMSIS-DAP (шаблон проекта)



Всем привет!

Думаю что тем, кто среди вас является поклонниками IAR и у кого внезапно завалялся mbed LPC1768 (он же mbed обыкновенный), может пригодиться шаблон, который я состряпал и оформил на днях.

Почему рабочий и такой весь распрекрасный mbed может внезапно заваляться? Ну хотя-бы потому, что он, сикут эт ардуинус вульгарис, не поддерживает нормальную отладку из коробки со своим онлайн-компилятором. Именно поэтому он завалялся и у меня, после того, как я с ним наигрался. Что уж поделать — жирую я, привык к нормальной отладке :)

Так вот, относительно недавно у mbed было феерическое обновление прошивки интерфейса, в которую добавили поддержку CMSIS-DAP. Кто следит за событиями и в теме — тот знает. Кто не следит и не в теме — это такой специальный стандарт, разработанный ARM, который описывает универсальный отладчик.
Таким образом, mbed получил возможность полноценно отлаживаться по евойному USB проводочку, что есть очень хорошо. Но бида заключалась в том, что на тот момент, когда я обновил свой mbed и решил испробовать этот функционал, единственной средой, которая поддерживала CMSIS-DAP была среда Keil MDK (кто бы сомневался!). Я далеко не фанат этой среды, но чисто для интереса, поставил ее и решил попробовать. Действительно, отладка работала и делала это очень хорошо. Тем не менее, MDK я удолил, а все попытки узнать что-то про поддержку CMSIS-DAP у IAR приводили ко вполне обоснованным предположениям, что IAR тесно повязан с Segger и такую поддержку реализует не скоро. Если вообще реализует. По крайней мере интернеты были именно такого мнения и настроя.

Но на днях, обновив IAR на относительно последний, я узрел, что чудо свершилось! Поддержка CMSIS-DAP появилась и в IAR. Естественно, я сразу же начал запиливать блинки, который можно было бы отлаживать на mbed в IAR'е. Очень помогло то, что все библиотеки mbed с некоторого времени лежат с открытыми исходниками — это замечательно. Тем не менее, после создания и первичной настройки/нафаршировки проекта, простой блинки не то чтобы отлаживаться, он и компилироваться-то не особо хотел. Вот тут-то и начались грабли.
Проблемы компиляции были решены небольшим допилом mbed'овской либы. Также, либа была немного реструктурирована для упрощения. Был убран либовский CMSIS, ибо в IAR есть возможность подключить встроенный. После этих шаманств дело пошло, блинки загружался и работал нормально. Но вот отлаживаться упорно не хотел.
В результате долгих мудовых рыданий была обнаружена совершенно неочевидная вещь, связанная со скриптом линкера, о которой, походу, никто не в курсе. По всей видимости, это такая специфическая особенность работы связки mbed, IAR и CMSIS-DAP. Дело в том, что если оставить скрипты линкера как у всех, в частности, начало региона ROM в 0x00000000, то программа успешно компилируется, запускается и работает, но вот отлаживаться (именно в IAR'e) не желает — отладка жутко глючит и проц периодически ресетится и валится. Я так и не понял с чем это связно, но мне кажется, что это всяко связано с механизмом защиты кода NXP. Поэтому, ставим начало региона ROM в 0x00000300 (за областью защиты) и радуемся — отладка начинает работать как часы. Вот так.
Было еще несколько разных мелких нюансов, которые я причесал в шаблоне, и которые уже не упомню. Но тем не менее, можете качать на здоровье и пользоваться. Вполне себе мило и работает.

Да. Вот еще что. У IAR'a то-ли такая специфическая реализация CMSIS-DAP, то-ли просто баг на первой версии библиотеки поддержки этого типа отладчиков, то-ли просто какая-то несовместимость с mbed, но просто так, через механизмы отладки, загрузить прошивку в mbed не получается. Вообще никак. Загрузка только ручками на диск mbed, как обычно.
На самом деле это не сильно большая проблема, т.к. решается она просто — в свойствах проекта задается команда автоматического копирования исполняшки на диск mbed после сборки, а в свойствах отладки ставится галка, что загрузку производить не надо. Вот и все. Процедура работы при этом такая: собираем исполняшку (она автоматически грузится на диск mbed), жмем на mbed кнопу reset (исполняшка шьется в контроллер), жмем отладку в IAR, отлаживаем. В общем-то, не сильно много неудобств. Но я на всякий случай написал в суппорт mbed об этой шняге — посмотрим, что они ответят.

LPCXpresso Урок 15. I2C. Работа с термометром LM75.

Представляю вашему вниманию ранее отменённую статью курса для начинающих посвященную шине I2C на примере работы с датчиком температуры LM75. Сам датчик имеет небольшую стоимость (25р в Чип-НН на момент покупки мной, да и в наборе I2C от NXP присутствовал), что в 2-3 раза дешевле популярного термометра от Dallas. Про LM75 имеется описание в сообществе и вне его в инете (благо есть поиск).


Читать дальше

LPCXpresso Урок 14. PWM. Синхронный ШИМ на таймере.

Прежде чем завершить курс для новичков рассмотрим такую всеми любимую и всем надоевшую тему как ШИМ.

Схема

Для данного урока нам надо подключить пару светодиодов к выводам P1.9 и P1.10 платы, через ток ограничительные резисторы (номиналом 100 Ом – 1 кОм):

Если вдруг под рукой у вас не завалялось ни одного светодиода, то можно поступить и так:



Читать дальше
  • +2
  • 23 сентября 2011, 08:49
  • angel5a
  • 1

LPCXpresso Урок 13. Debug. Погружаемся в отладку на примере UART.

Я в курсе для новичков предлагаю вам уже избавленный от ошибок код, но что делать, когда пишешь код сам. Отладчик это мощное средство, давайте же изучим его ещё немного лучше. До сих пор мы только наблюдали в нем за ходом выполнения программы, в этом же уроке мы будем им управлять.


Читать дальше
  • +2
  • 22 сентября 2011, 09:08
  • angel5a
  • 1

LPCXpresso Урок 12. UART. Взаимодействуем с компьютером.

Предлагаю вашему вниманию поверхностное знакомство с UART интерфейсом в контроллере. Данный урок является вступлением к наиболее важной части (следующий урок) курса для новичков.


Читать дальше

LPCXpresso Урок 11. USB+SPI. Делаем картридер.

Курс для новичков продолжается ознакомлением с SPI на примере работы с SD/MMC карточками. А поскольку USB-MSC мы уже проходили, то соорудим пародию на картридер. Пользоваться им я категорически запрещаю, т.к. размер карты зашит в коде и при установки другой карты вы можете потерять ваши данные.


Читать дальше

LPCXpresso Урок 10. USB-MSC. Разбираем пример.

Продолжим знакомство с LPC13xx в среде разработки CodeRed. На сей раз в рамках курса для новичков изучим пример использования встроенного класса USB mass storage (или попросту USB-флешки).


Читать дальше

Используем отладку LPC-Link без CodeRed IDE

Всем привет,
Дошли наконец руки до валяющейся уже год экспрессы с 1768 на борту. Но поскольку CodeRed IDE мне категорически не нравится, появилось стойкое желание завести отладку под любой другой IDE. Что мне отчасти удалось. Опишу, что я сделал, может у кого-то появится идея, как быть дальше.



Читать дальше

LPCXpresso Урок 9. USB-bootloader. Прошиваем контроллер подручными средствами.

Об использовании USB-загрузчика у NXP имеется аппноут AN10986 (код). Я же попробую в рамках курса для новичков рассказать его по-русски.
На данном этапе отладчик нам не нужен, поэтому отключаем его от USB.


Читать дальше