Немного отвлечемся от STM32 и сегодня займемся устройствами от Texas Instruments - микроконтроллерами MSP430. И эта статья будет посвящена так называемому быстрому старту с этими девайсами. Все опыты и эксперименты будут ставиться на недорогой отладочной платке - MSP430 LaunchPad.
Итак, открываем коробку с платой и достаем все, что нам понадобится. На данном этапе нам нужна лишь сама плата и USB-кабель для подключения ее к компьютеру. Смело втыкаем шнур в USB-разъем и ждем пока заботливый Windows установит нам необходимые драйвера. Но тут есть одна неприятность - драйвер MSP430 Application UART надо найти и установить самим.
Идем на официальный сайт Texas Instruments и качаем IDE (я остановил свой выбор на IAR Embedded Workbench for MSP430). Архив скачан, распаковываем и идем в диспетчер устройств. Там находим наш девайс и указываем вручную пути к файлам драйвера, которые находятся в скачанном архиве в папке Drivers. В случае успеха отладочная плата будет определяться в диспетчере устройств следующим образом:
Первый этап позади, теперь необходимо установить IAR Embedded Workbench. После чего запускаем IAR и создаем новый проект. Для этого идем в Project->Create New Project. В появившемся окне выбираем следующее:
В результате получаем пустой проект, в который уже включен файл main.c. Теперь мы можем переходить к написанию собственного кода. Давайте по традиции начнем с портов ввода-вывода. На отладочной плате есть пользовательская кнопка и парочка светодиодов - а точнее два, красный и зеленый. Давайте так - если кнопка нажата горит зеленый, иначе красный. Но перед тем как писать программу, посмотрим, какие же регистры отвечают в MSP430 за порты ввода-вывода.
Регистр PxDIR.
Каждый бит этого регистра отвечает за режим работы соответствующего вывода микроконтроллера. Если в регистре бит равен 0, то ножка контроллера является входом, если бит равен 1 - выходом. Пусть, например, второй бит регистра P1DIR равен 1. Что это значит? А то, что вывод P1.1 работает в режиме выхода.
Регистр PxREN.
А этот регистр отвечает за включение/отключение подтяжки вверх/вниз. Тут больше и сказать то нечего.
Регистр PxOUT.
А вот здесь поинтереснее. Если вывод у нас работает в режиме выхода, то биты этого регистра отвечают за уровень сигнала на ножке контроллера. Пусть у нас P1.3 работает как выход. Если мы выставим четвертый бит регистра P1OUT в 1, то на выводе P1.3 появится сигнал высокого уровня (логическая единица), если 4-ый бит P1OUT равен 0, то и сигнал на ножке контроллера низкого уровня.
Другое дело, если пин работает как вход. В этом случае биты этого регистра отвечают за подтяжку вывода. Вот небольшой примерчик, чтобы сразу все стало понятно. Пусть P1.0 - вход. Если нулевой бит P1OUT = 1, то подтяжка вверх, если нулевой бит равен 0, подтяжка вниз. Все очень логично!
Регистр PxIN.
Тут все просто - биты этого регистра соответствуют уровню сигнала на соответствующих пинах микроконтроллера. На входе - 1, в регистре - 1, на входе 0, и в регистре - 0. Каждому выводу, например, порта 1 (P1.0, P1.1...) соответствует свой бит регистра P1IN.
Регистры PxSEL и PxSEL2 отвечают за альтернативные функции выводов при использовании какой-либо периферии микроконтроллера.
Кроме всего вышеперечисленного, каждый пин портов 1 и 2 может работать в режиме внешнего прерывания. То есть при изменении сигнала на каком-либо выводе программа ускачет на обработку прерывания. Но мы пока не будем на этом останавливаться, а перейдем уже наконец-то к написанию кода программы. Осталось лишь разобраться, что и как подключено на отладочной плате:
Видим, что кнопка висит на ножке P1.3, а светодиоды на P1.0 и P1.6.
/***************************************************************************************/ #include "io430.h" /***************************************************************************************/ int main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; // Выводы P1.0 и P1.6 работают в качестве выходов P1DIR = BIT6 | BIT0; // Обнуляем значение регистра P1OUT и все светоды гаснут P1OUT = 0x00; // Как видно из схемы кнопка у нас замыкает вывод на землю, // поэтому активируем для вывода P1.3 подтяжку вверх P1REN |= BIT3; P1OUT |= BIT3; while(1) { // Проверяем состояние кнопки if ((P1IN & BIT3) == 0) { // Зажигаем зеленый, гасим красный, если нажата P1OUT |= BIT6; P1OUT &= ~BIT0; } else { // Не нажата - гасим зеленый, зажигаем красный P1OUT |= BIT0; P1OUT &= ~BIT6; } } return 0; } /***************************************************************************************/
Осталось совсем немного - а именно настроить наш проект и отладчик. Идем в настройки проекта и выбираем контроллер:
В этом же окне идем во вкладку Debugger и выбираем FET Debugger вместо Simulator. Теперь мы готовы прошивать контроллер:
В итоге при нажатии на кнопку мы должны увидеть горящий зеленый светодиод, а если кнопка не нажата, то горит красный. На этом, собственно, и все, с нашим первый проектом для MSP430 мы разобрались.
Повторил проект в CCS (альтернатива IAR). Работает. Интересно повозиться со встроенной графической средой
программирования Grace . Расставляем галочки на блок-схеме чипа
и получаем документированный-комментированный код на С ! Изменить
конфигурацию пина,осцилятора ,таймера и т.д - 2 мин!
http://focus.ti.com/general/docs/video/Portal.tsp?lang=en&entryid=0_r1o3fdca
О, прикольная штука ))
У мена прошивка залилась через Download and Debug, а не через Download active application никак не хотела. Вероятно надо было джампрепы как-то по другому поставить.