MSP430? Прямо сейчас!

Сегодня я хотел бы рассказать о новой (по крайней мере, для меня) отладочной плате от Texas Instruments, а именно о LaunchPad, или, по-другому, MSP-EXP430G2, а также собственно о серии контроллеров MSP430G2XXX и своих первых впечатлениях от работы с ними.
Первое, что бросается в глаза — не обременяющая даже студенческий карман цена комплекта. Непосредственно у TI он стоит всего $4.30! Я же приобрел его в местном магазине по цене немногим более двухсот рублей, изначально зайдя туда за двумя супрессорами… При этом, кроме собственно отладочной платы (естесственно, со встроенным отладчиком), в комплект входят два контроллера — MSP430G2231, уже установленный в плату и запрограммированный демопрошивкой, и MSP430G2211. Также в аккуратных пакетиках в коробку вложены две PLS линейки и кварц на 32768Гц (их предлагается впаять самостоятельно по необходимости). Кроме того, в той же коробке лежит USB-кабель и всякие мелочи, вроде наклеек с логотипом LaunchPad. Софта в коробке нет, его предлагается выкачивать из интернета.
Чем примечательны сами контроллеры? Прежде всего, они шестнадцатибитные, т.о., тип integer для них естесственен. MSP430 имеют Фон-Неймановскую архитектуру — единое адресное пространство для прошивки и RAM, что может быть удобно во многих случаях. Например, обращение к массивам констант во flash выполняется совершенно естесственно, не требуется никаких хитрых процедур, как, например, в Гарвардских AVR. Кроме того, язык C изначально разрабатывался именно под Фон-Неймановские машины, что позволяет надеяться на эффективную генерацию кода компилятором. Также MSP430 имеют чрезвычайно гибкие опции тактирования — в системе присутствуют целых три тактовых сигнала, которые могут генерироваться разными генераторами и в реальном времени независимо подключаться/отключаться к любой периферии и ядру. Ну и, опять же, цена — самый продвинутый в серии, MSP430G2231, имеет стоимость ~ $0.5 за кристалл. Правда, это в партии от 1000 штук… В розницу же он стоит ~50р. (там же, где я покупал отладочный комплект). Что немаловажно, на сайте TI доступны семплы.
Оба комплектных контроллера — близнецы-братья, отличающиеся лишь периферией. Которая, кстати, в этой серии по-настоящему спартанская — самый продвинутый в линейке МК, MSP430G2231 имеет один шестнадцатибитный таймер с двумя блоками сравнения/захвата, один модуль I2C/SPI, один десятибитный АЦП с прикрученным к нему температурным сенсором. И все. Ну и порты ввода-вывода, в количестве десяти ножек. Flash — 2Кб, RAM — 128 байт. Что меня удивило, так это отсутствие UART, при том, что на отладочной плате он есть. В остальных все еще суровее. Самый младший в серии, MSP430G2001 вообще имеет 512 байт flash и таймер.
Как уже было упомянуто, на плате есть UART, подведенный к контроллеру. Комплект создает в системе виртуальный COM-порт, через который и можно организовать обмен. Все драйвера устанавливаются вместе с предлагаемыми средами разработки — тут на выбор либо IAR MSP430 Kickstart Edition, либо собственное творение
товарищей из TI — Code Composer Studio. Последнее я настоятельно не рекомендую — это Eclipse, обвешанный красивостями в невообразимых количествах, что делает его до чрезвычайности неспешным на неигровых компьютерах. Кроме того, он попросту показался мне гораздо менее удобным. Одним словом, после мучений с CCS я выбрал для себя IAR.
Самой большой проблемой, мучившей меня после распаковки комплекта, подключения платы к компьютеру, установки IAR и написания первой тестовой программки был вопрос «А где тут кнопка „Прошить“?». Для всех, кто будет мучаться так же, скажу — ее нет. Совсем. После долгих мучений и раскуривания тонн мануалов мне открылась страшная правда: плата укомплектована внутрисхемным отладчиком. И IAR, равно как и CCS, работает с ним именно как с отладчиком. Т.е., чтобы
переместить прошивку в МК надо начать сеанс отладки с использованием FET (так называется тот отладчик, который там распаян), в ходе запуска которого прошивка и будет зашита в память контроллера. Т.е., надо жать кнопку «Download and debug», после чего IAR соединится с отладчиком и зальет прошивку в контроллер. А дальше можно вживую играться с кодом — ставить точки останова, выполнять его по шагам, руками ставить флаги… Кто еще не понял — все это делается прямо в железе. Да, прикольно. Но все же мне больше понравилась бы скромная кнопочка вроде «Download to target». Мне вообще представляется сомнительной необходимость внутрисхемной отладки для такого контроллера. Разве только помигать светодиодом, глядя, как на экране красивая стрелочка синхронно с ним перепрыгивает с команды на команду...
Однако в жизни все еще сложнее. IAR сначала надо заставить работать именно с платой, а не с софтовым эмулятором. На эту тему я сделал небольшой мультик.
Итак, даже чтобы просто загрузить код в МК, надо начать отладку, нажав «Download and debug»,

потом, собственно, запустить код на исполнение, нажав «Go» (1). Потом можно жать «Stop Debugging» (2), при нажатой «Leave Target Running» (3) — IAR отключится от отладчика, МК продолжит выполнять залитую прошивку.

В целом отладочный комплект и сами контроллеры оставляют чрезвычайно благоприятное впечатление. Несмотря на воистину спартанскую периферию, сочетание шестнадцатибитности, простоты и наличия подобных невероятно дешевых средств разработки позволяет считать эту серию MSP430 идеальной для домашних поделок.
А теперь бонус всем, кто дочитал до этого места и заинтересовался.
Итак, товарищи, я хочу представить на суд общественности свое творение для LaunchPad — программную реализацию UART.
Надо сказать, что я с самого начала был изумлен тем, что на отладочной плате UART присутствует, а в контроллерах, к ней прилагающихся — нет. Мне сразу же показалось, что так изумился не только я, потому я стал искать готовую программную реализацию UART под эту платформу. Я бы соврал, если бы сказал, что не нашел ничего, что-то было, был найден даже похожий аппноут от TI на эту тему, однако, то ли я плохо искал, то ли что-то еще — но все найденное с трудом тянуло на приличную и достаточно прозрачную реализацию. Воистину, хочешь, чтобы что-то было сделано хорошо — сделай это сам. Собственно, я так и поступил.
Для реализации протокола используется таймер A, который должен быть сконфигурирован следующим образом: счет до 65536, тактирование от внешнего кварца 32768Гц (пример есть в заголовочном файле). В этом случае UART работает на скорости 4800bps, без четности, один стоп-бит (4800bps 8N1). В принципе, можно перестроить его на другую скорость, поменяв константы в заголовочном файле. Поскольку в MSP430G2231 таймер всего один, при реализации ставилась задача оставить одно прерывание для пользовательских целей. Побочным эфектом этого стало то, что эта реализация UART полудуплексная, т.е., может работать либо в режиме передачи, либо в режиме приема, которые нужно переключать руками. Файлы обильно прокомментированы.
Модуль содержит функции:
UART_SetTxMode(), UART_SetRxMode()
Как уже говорилось, UART полудуплексный, что стало следствием того, что одно прерывание оставлено для пользовательских нужд. Потому режимы приема/передачи надо явно переключать, что и делается этими функциями.
UART_WaitTxCpl()
Ожидание конца передачи.
UART_SendByte(unsigned char byte)
Отправка байта. Перед отправкой функция ждет конца предыдущей передачи, так что вызовы UART_SendByte(...) могут следовать непосредственно один за другим или в цикле.
UART_SendStr(char str[])
Отправка строки/массива. Строка/массив должны заканчиваться нулем (стандартное соглашение С о хранении строк).
UART_SendByte(...) и UART_SendStr(...) нельзя вызывать в прерывании — они отслеживают флаг, который также обновляется в прерывании, и потому в случае такого вызова контроллер с большой вероятностью повиснет.
UART_SetRxHandler(void (*_new_rx_handler)(unsigned char))
Устанавливает отбработчик приема. Принимает указатель на функцию вида void <имя>(unsigned char rx_byte), вызываемую после приема байта. Ее параметр — принятый байт. Функция вызывается из прерывания, потому должна быть по-возможности короткой.
В архивах лежат собственно реализация и проект-пример для IAR.
Софт-UART для MSP430GXXXX
Пример его использования (IAR)
- +4
- 02 марта 2011, 23:37
- _YS_
У этой линейки — нету. Что, еще раз скажу, до крайности меня удивило. Потому я сразу ринулся испрвлять этот недостаток. :-) Еще более удивительно то, что, как уже было сказано, на самой демоплате он разведен к МК! Вот так.
Есть в других, у которых лап поболе. У них обозначение в последнем поле трехцифровое (1хх, 2хх, 4хх) или четырехцифирьное с 1 в конце (1хх1, 2хх1), к примеру MSP430F149 или MSP430F1491 и т.п.
Кстати говоря, я, к стыду своему ВНЕЗАПНО, обнаружил в даташите пункт «Universal Serial Communication Interface,
UART Mode». Только пока не разобрался, относится ли он именно к MSP430GXXXX. Буду раскуривать… Но пока я ковыряю термодатчик.
UART Mode». Только пока не разобрался, относится ли он именно к MSP430GXXXX. Буду раскуривать… Но пока я ковыряю термодатчик.
Елисей, я тебе говорил и повторюсь ещё раз, кнопка прошивания в IAR есть, и их там целых 2. Project->Download(самая нижняя строка)->Download active application или Download from file…
- khloponin_v
- 03 марта 2011, 21:14
- ↓
Билин! Вы меня опередили!
Я хотел предложить учебный курс по MSP430.
Может, объеденим усилия?
С уважением, Сергей.
Я хотел предложить учебный курс по MSP430.
Может, объеденим усилия?
С уважением, Сергей.
Так вы тоже можете писать в этот раздел! Будет две статьи об одном и том же? Не беда! Оформим друг за другом (даты подправлю вручную) и одна дополнит другую. Тем более тема даже одного контроллера практически неисчерпаема. Там можно написать десятки, если не сотни статей, а тому кто врезается в это с нуля и этого будет мало.
Заказал сабж у TI, получил. Прикольненько — дешево (оно стоит дешевле собственной доставки) и шустро приехало (слоупочта по России дольше везет!). Упаковано и скомплектовано побогаче, чем STM32VL Discovery.
Кстати, вложенная бумажка гласит, что демопрошивка сливает данные с термодатчика в UART. Что-то видимо там все-таки есть на эту тему?
Кстати, вложенная бумажка гласит, что демопрошивка сливает данные с термодатчика в UART. Что-то видимо там все-таки есть на эту тему?
Ну и порты ввода-вывода, в количестве десяти ножек.Точно десять? MSP430G2231 в DIP14, а шелкография под него на плате показывает только наличие P1 на 8 линий.
Мне вообще представляется сомнительной необходимость внутрисхемной отладки для такого контроллера.Да ну, отладка в живом железе — это классно. Особенно если не тормозит, как JTAG на меге16.
Кстати, вложенная бумажка гласит, что демопрошивка сливает данные с термодатчика в UART. Что-то видимо там все-таки есть на эту тему?
Там обкоцанная программная реализация. Законченным модулем и не пахнет. По крайней мере, я не нашел.
Точно десять?
Есть еще P2 на два пина:

MSP430 — контроллеры для работы от батарейки в течение нескольких лет. Поэтому мало памяти, урезаны интерфейсы, нет толерантности к +5В. У меня в ящике провалялась плата во включенном состоянии с литиевой батарейкой 3V. Лежала пару лет. Случайно коснулся рукой — загорелся светодиод.(сенсорные кнопки на демоплате) Переключил джампер в положение OFF и обратно в ящик закинул.
Вопрос к знатокам MSP430 — с помощю этой платки можна програмировать всю линейку контролеров MSP430, или только MSP430Gxxx?
Ребята, а на какие скорости рассчитан встроенный usb-uart? Ну и какую скорость максимально можно выжать из программного uart. Сегодня прислали плату, просто есть идея, куда ее запихнуть… Но там скорость нужна 19200бод.
1.
В официальном User Guide написано следующее:
Стр. 6, раздел 1.1 (Overview).
2.
4800 бод — самый работоспособный вариант, все упирается в кварц. Можно, наверное, попробовать и чуть больше, но не факт, что ошибка будет приемлема. Можно попробовать запустить таймер от внутреннего генератора, но не факт, что хватит стабильности.
В общем, берите МК с аппаратным UART. Я писал программную реализацию для случаев, когда на кристалле нет, но очень хочется. :-)
И да, в этой версии есть баг. Если нужно, используйте версию 1.1.
на какие скорости рассчитан встроенный usb-uart?
В официальном User Guide написано следующее:
USB debugging and programming interface featuring a driverless installation and application UART serial communication with up to 9600 Baud
Стр. 6, раздел 1.1 (Overview).
2.
какую скорость максимально можно выжать из программного uart
4800 бод — самый работоспособный вариант, все упирается в кварц. Можно, наверное, попробовать и чуть больше, но не факт, что ошибка будет приемлема. Можно попробовать запустить таймер от внутреннего генератора, но не факт, что хватит стабильности.
В общем, берите МК с аппаратным UART. Я писал программную реализацию для случаев, когда на кристалле нет, но очень хочется. :-)
И да, в этой версии есть баг. Если нужно, используйте версию 1.1.
- DeusExMachina
- 06 сентября 2011, 14:07
- ↓
Мда, не ожидал я такого отвратительного поведения от эклипса… Это что же с ним сделали такое? На вполне игровом компе (4x3ГГц, 4ОЗУ, R6850) работает плохо, убивают не тормоза (их то особо и нет), а страшные глюки! Видать зря гиг скачивал :)
Ну я же говорил:
:)
IAR MSP430 Kickstart Edition, либо собственное творение товарищей из TI — Code Composer Studio. Последнее я настоятельно не рекомендую — это Eclipse, обвешанный красивостями в невообразимых количествах… после мучений с CCS я выбрал для себя IAR.
:)
Гм, а там где я работал — его даже покупали. Причем предварительно попробовав. И компы там были не игровые. Видать таки понравился.
Я в любом случае сильно много под msp430 писать пока не собираюсь :) Пока не понял, как эту штуку активировать и как вернуть вид окон в дефолтный!?
Какую? Код композер? Не знаю, я еще сам не ставил. А ты платный с бесплатным случайно не спутал? Платный активировать тока креком. Ну или отстегнув TI.
Как смотреть температуру, которую измеряет мк msp430g2231 идущий в комплекте? Есть какая-то утилитка?
Товарищи, меня контроллер очень приятно порадовал! Особенно понравилась grace, для быстрого старта — самое оно!
Сейчас заинтересовал местный ассемблер (честно говоря ни разу в жизни не писал на ASM для МК, только для винды), есть желание по-разбираться. Подскажите пожалуйста, где можно почитать подробное описание команд?
Сейчас заинтересовал местный ассемблер (честно говоря ни разу в жизни не писал на ASM для МК, только для винды), есть желание по-разбираться. Подскажите пожалуйста, где можно почитать подробное описание команд?
Подскажите пожалуйста, где можно почитать подробное описание команд?
В User guide, конечно. Раздел 3.4 — Instruction set.
Было бы что изучать, тамошняя система команд в статью на википедии влезла :) Два с половиной десятка настоящих команд и стока же эмулированных.
Почитал про адресацию. Вроде ничего мозгосносного, режимов не так много и они вполне стандартные. На х86-м поболе будет. Да и у MCS-51 режимов адресации вдвое больше.
MCS-51 — тоже. Причем там минимум три АП. Да и в самом AVR вроде не так мало режимов. По крайней мере, двумя командами STR и LDR он не ограничивается.
И еще один вопрос. Расскажите пожалуйста, что происходит в тех строках, которые комментированы как "???".
P.S. а тут кстати можно как-нибудь код прятать под спойлер?
;---------------------------------------------------------
; Подключение библиотек
;---------------------------------------------------------
.cdecls C,LIST, "msp430G2211.h" ; подключение библиотек "C"
;---------------------------------------------------------
; Main - начало программы
;---------------------------------------------------------
.text ;???
Reset mov #0280h,SP ;???
mov #WDTPW+WDTHOLD,&WDTCTL ;делаем так, чтобы WDT больше не мешал
mov #001h,&P1DIR ;инициализация светодиода
mov #000h,&P1OUT ;гасим светодиод
Main
call #Delay ;пауза
mov #001h,&P1OUT ;зажигаем светодиод
call #Delay ;пауза
mov #000h,&P1OUT ;гасим светодиод
jmp Main ;возврат к основному циклу
;---------------------------------------------------------
; Процедура ожидания
;---------------------------------------------------------
Delay mov #000h, R5 ;обнуляем счетчик
Loop add #001h, R5 ;инкрементируем счетчик
nop ;пауза в один такт
cmp #0c350h, R5
jne Loop ;если R5 != 50000, то возврат к Loop
ret ;выход из процедуры
;---------------------------------------------------------
; Некие конечные строки программы
;---------------------------------------------------------
.sect ".reset" ;???
.short Reset ;???
.end
P.S. а тут кстати можно как-нибудь код прятать под спойлер?
.text; секция .text (нуна линкеру для распинывания кода по памяти
Reset mov #0280h,SP; инит стека — пихаем туда константу 0280h
Остальное (две последние строки) специфично, надо ман на конкретный ассемблер курить. Похоже на инициализацию таблицы векторов прерываний. Конкретно там всего одно прерывание — ресет.
Reset mov #0280h,SP; инит стека — пихаем туда константу 0280h
Остальное (две последние строки) специфично, надо ман на конкретный ассемблер курить. Похоже на инициализацию таблицы векторов прерываний. Конкретно там всего одно прерывание — ресет.
Ага, разобрался. Вот только теперь из-за недостатка опыта — проблема на проблеме… Вот думаю, как инициализировать массив содержащий «Hello world». Пока я только понял, что создать массив можно так:
.bss Array,200
Понятия не имею. На x86 это делалось директивой .db 'H', 'e',… (не совсем так, но как — не помню). Ищи похожее для своего. И вообще, кури ман по ассемблеру (это который msp430-as.exe, или как его там у TI кличут), а не ядру. В ядре тока про команды, регистры и карту памяти. А как заставить конкретный ассемблер засунуть конкретные данные в конкретный тип памяти — нужно смотреть в его мане.
Опять же есть С, там подобных «смотри конкретный ман» меньше. Хотя там зато нужно скуривать ман на библиотеку.
Опять же есть С, там подобных «смотри конкретный ман» меньше. Хотя там зато нужно скуривать ман на библиотеку.
geovas, это читали?
we.easyelectronics.ru/msp430/msp430---uchebnyy-kurs.html
we.easyelectronics.ru/msp430/msp430-uchebnyy-kurs-chast-2-prostenkaya-programma.html
we.easyelectronics.ru/msp430/msp430-uchebnyy-kurs-chast-3-yadro-pamyat-i-rezhimy-adresacii.html
we.easyelectronics.ru/msp430/msp430-uchebnyy-kurs-chast-4-generator-konstant-i-sistema-taktirovaniya.html
we.easyelectronics.ru/msp430/msp430---uchebnyy-kurs.html
we.easyelectronics.ru/msp430/msp430-uchebnyy-kurs-chast-2-prostenkaya-programma.html
we.easyelectronics.ru/msp430/msp430-uchebnyy-kurs-chast-3-yadro-pamyat-i-rezhimy-adresacii.html
we.easyelectronics.ru/msp430/msp430-uchebnyy-kurs-chast-4-generator-konstant-i-sistema-taktirovaniya.html
Этот ваш иар — блокнот с компилятором, однако. Как человек, начавший с прикладного программирования — не люблю я такие Intergrated Development Notepad.
Есть еще кстати MSPGCC. У этих обычно с оптимизацией весьма неплохо, под AVR нередко IAR уделывает.
А у CCS компилер свой? Врядли он кстати так уж плох, там где я работал — его купили, причем с подачи пощупавших его триалку программистов. Видать, по вкусу пришелся.
Есть еще кстати MSPGCC. У этих обычно с оптимизацией весьма неплохо, под AVR нередко IAR уделывает.
А у CCS компилер свой? Врядли он кстати так уж плох, там где я работал — его купили, причем с подачи пощупавших его триалку программистов. Видать, по вкусу пришелся.
Для этого в нормальных иде есть возможность настройки интерфейса — убираешь все ненужное, выволакиваешь все нужное. Можно ту же дельфи до состояния блокнота довести — мейн окно с тулбаром и окно редактора. Правда, никакой блокнот, включая N++, с редактором дельфи и рядом не валялся. Не думаю что эклипс в этом плане менее гибок, по крайней мере CoIDE встречает как раз таки довольно спартанским интерфейсом.
КодБлокс неплохая IDE, еще бы там нормально работали дебаг и особенно CodeInsight. Хотя я сильно подозреваю, что C::B в моей настройке ты бы тоже назвал елкой.
КодБлокс неплохая IDE, еще бы там нормально работали дебаг и особенно CodeInsight. Хотя я сильно подозреваю, что C::B в моей настройке ты бы тоже назвал елкой.
_YS_ скажите, а существует возможность тактировать MSP430 с помощью стабильного сигнала 10МГц? Я что-то никак не пойму, возможно ли тактирование извне чем-то более быстрым, нежели часовой кварц…
У этой серии — нет. В смысле, в документации не специфицировано. Но попробовать можно.
В этой серии входные цепи специфицированы для работы на низкой частоте. В более старших сериях есть дополнительный ВЧ блок.
В этой серии входные цепи специфицированы для работы на низкой частоте. В более старших сериях есть дополнительный ВЧ блок.
Подскажите, где в среде IAR можно увидеть объем скомпилированного кода заливаемого в МК? в частности объем занятой области Программы и ОЗУ?
Написал вот инструкцию по применению ИДЕ Code::Blocks для msp430:http://www.shelezyakin.ru/?p=816
- shluzzzoid
- 24 марта 2013, 00:36
- ↓
Вариант, конечно, я думал об этом уже, пока не нашёл подобную статью здесь, описывающую эту ИДЕ. Там из каментов создаётся впечатление, что я ничего нового не открыл, новое это только для меня оказалось.
- shluzzzoid
- 24 марта 2013, 00:57
- ↑
- ↓
В принципе да, но конкретные готовые настройки для конкретного таргета тоже полезны. Типа «взял и работай».
Хорошо, чуть погодя запубликую :) Только я пока не разобрался, как там дебаггер прикрутить. Информацию пока только англоязычную вижу по этому поводу, и весьма разрозненную.
- shluzzzoid
- 24 марта 2013, 11:04
- ↑
- ↓
Комментарии (117)
RSS свернуть / развернуть