Первая программа для MSP430 — Моргаем светодиодом

Когда речь заходит о энергосбережении, то не вспомнить о контроллерах семейства MSP430 от TI просто невозможно. Это просто монстр минимального энергопотребления.
Производитель заявляет потребление:
Активный режим: 160 мкА при работе с частотой 1 МГц от питания 2.2 В
Ждущий режим: 0.7 мкА
Off Mode (RAM Retention): 0.1 мкА

Но сейчас не об этом.

Как создать первое приложение для MSP430

Давайте рассмотрим процесс создания приложения — моргалки диодом для MSP430 в IAR.
IAR можно скачать бесплатно с официального сайта. Есть два вида ограничений: 30 дневной триал или ограничение по размеру куда, тот или иной вариант выбирается при установке среды.

Итак, откройте IAR Workbench.
Создайте новый проект: Project — Create New Project — C — main
Перед вами откроется окно с начальным кодом.

Теперь необходимо выбрать конкретный контроллер, под который мы будем разрабатывать.
Я выбрал MSP430F1121 наугад. Он есть в Proteus (как и многие другие), что существенно облегчит жизнь тем, кто не хочет (или не может) тратить деньги на приобретение отладочных средств.
Перейдите в меню Project — Options — General Option и установите название контроллера в поле Device.

Если вы хотите промоделировать работу контроллера в Proteus, то задайте в настройках генерацию hex файла.
Войдите в меню Project — Options — Linker. Установите галочку Overrite Default и впишите название выходного файла (у меня main.hex), затем установите радио-кнопку Other и выберите Intel-extended.

Теперь перейдем к коду.
MSP430 устроен так, что его сторожевой таймер по умолчанию включен. Чтобы не вносить неразбериху в работу нашей (самой первой) программы, выключим его.

Нам нужно настроить один пин любого порта на вывод. Делается это методом очень похожим на метод используемый в контроллерах AVR.
Есть три регистра для каждого порта. Например для первого:

P1DIR — определяет направление ввода/вывода (1 — выход, 0 — вход).
P1IN — доступен только для считывания. Когда контакт настроен на вход из этого регистра вы можете считать состояние контакта (0 — GND, 1 — VCC).
P1OUT — доступен только для записи. Когда контакт настроен на выход, записав в этот регистр данные вы устанавливаете потенциал контакта (0 — GND, 1 — VCC).

Для простоты примера будем «моргать» первой ножкой первого порта.
Итак программа:

#include "io430.h"

int main( void ) {
  // выключаем сторожевой таймер
  WDTCTL = WDTPW + WDTHOLD;

  unsigned int count; // будет нужна для задержки

  P1OUT = 0; // обнуляем регистр
  P1DIR |= 0x01; // настраиваем P1.0 как выход

  while(1) {
    P1OUT ^= 0x01; // переключаем состояние вывода P1.0
    for(count=0; count<60000; count++){ /* задержка */ }
  }
}

Как видите мы установили первый бит регистра P1DIR в 1, тем самым заявив, что P1.0 — работает как выход. После этого мы в бесконечном цикле переключаем первый бит регистра P1OUT при помощи исключающего или.

Откомпилируйте: Project — Make

При симуляции вы должны увидеть что-то вроде этого.

Похожий код:

Фото аватара
Алексей Петров

Программист, разработчик с 5 летним опытом работы. Учусь на разработчика игр на Unity и разработчика VR&AR реальности (виртуальной реальности). Основные языки программирования: C#, C++.

Оцените автора
Бла, бла код
Добавить комментарий