Top.Mail.Ru

Быстрый старт с микроконтроллерами MSP430.

Немного отвлечемся от 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. В появившемся окне выбираем следующее:

Создание нового проекта для MSP430.

В результате получаем пустой проект, в который уже включен файл 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 может работать в режиме внешнего прерывания. То есть при изменении сигнала на каком-либо выводе программа ускачет на обработку прерывания. Но мы пока не будем на этом останавливаться, а перейдем уже наконец-то к написанию кода программы. Осталось лишь разобраться, что и как подключено на отладочной плате:

Схема отладочной платы MSP430 LaunchPad.

Видим, что кнопка висит на ножке 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 мы разобрались.

Подписаться
Уведомить о
guest

3 комментариев
Старые
Новые
Межтекстовые Отзывы
Посмотреть все комментарии
Сергей
Сергей
10 лет назад

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

Александр
Александр
9 лет назад

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

3
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x