Быстрый старт с MSP430.

Немного отвлечемся от микроконтроллеров STM32 и сегодня займемся устройствами от Texas Instruments – контроллерами MSP430. И эта статья будет посвящена так называемому быстрому старту с этими девайсами. Все опыты и эксперименты будут ставиться на недорогой отладочной платке – MSP430 LaunchPad.

Микроконтроллеры MSP430

Итак, открываем коробку с платой и достаем все, что нам понадобится. На данном этапе нам нужна лишь сама плата и 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 (P1DIR, P2DIR..)

Каждый бит этого регистра отвечает за режим работы соответствующего вывода микроконтроллера. Если в регистре бит равен 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;
}

Осталось совсем немного – а именно настроить наш проект и отладчик. Идем в настройки проекта и выбираем наш контроллер:
Настройка проекта в IAR
В этом же окне идем во вкладку Debugger и выбираем FET Debugger вместо Simulator. Теперь мы готовы прошивать программу в контроллер!
Прошивка MSP430

В итоге при нажатии на кнопку мы должны увидеть горящий зеленый светодиод, а если кнопка не нажата, то горит красный. На этом, собственно, и все, с быстрым стартом для MSP430 мы разобрались!

Понравилась статья? Поделись с друзьями!

Быстрый старт с MSP430.: 3 комментария
  1. Повторил проект в CCS (альтернатива IAR). Работает. Интересно повозиться со встроенной графической средой
    программирования Grace . Расставляем галочки на блок-схеме чипа
    и получаем документированный-комментированный код на С ! Изменить
    конфигурацию пина,осцилятора ,таймера и т.д – 2 мин!
    http://focus.ti.com/general/docs/video/Portal.tsp?lang=en&entryid=0_r1o3fdca

  2. У мена прошивка залилась через Download and Debug, а не через Download active application никак не хотела. Вероятно надо было джампрепы как-то по другому поставить.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *