- •Микроконтроллеры msp430 Введение
- •1. Центральный процессор msp430
- •1.1. Адресное пространство микроконтроллеров msp430f1xx
- •1.2. Регистровый файл
- •1.3. Байтовая и словная формы инструкций.
- •1.4. Режимы адресации
- •1.4.1 Регистровая адресация
- •1.4.2. Индексная адресация
- •1.4.3 Символьная адресация
- •1.4.4 Абсолютная адресация
- •1.4.5. Косвенная адресация
- •1.4.6. Косвенная адресация с автоинкрементом
- •1.4.7 Непосредственная адресация
- •2. Система команд msp микроконтроллеров
- •2.1. Двухадресные команды
- •2.2 Одноадресные команды
- •2.3 Команды переходов
- •2.4. Эмулируемые команды
- •3. Периферийные устройства микроконтроллеров msp430f1xx
- •3.1 Внешние выводы микроконтроллера msp430f149
- •3.2 Система прерываний
- •3.3 Система тактирования
- •3.4 Сторожевой таймер
- •3.5 Аппаратный умножитель
- •3.6 Порты ввода/вывода
- •3.7 Таймер a3
- •3.8 Таймер b7
- •3.9 Интерфейс usart
- •3.9.1 Режим uart
- •3.9.1.1 Передача данных
- •3.9.1.2 Прием данных
- •3.9.1.3 Поддержка коммуникации в многопроцессорных системах
- •3.9.1.4 Обнаружение стартового бита при приеме
- •3.9.1.5 Скорость передачи
- •3.9.1.6 Регистры usart
- •3.9.2 Режим spi
- •3.9.3 Режим i2c
- •3.9.3.1 Общие сведения о шине i2c
- •3.9.3.2 Режимы работы usart в режиме i2c
- •3.9.3.3 Арбитраж
- •3.9.3.4 Тактирование i2c модуля
- •3.9.3.4 Инициализация модуля i2c
- •3.9.3.5 Регистры модуля usart в режиме i2c
- •3.10 Аналоговый компаратор
- •3.11 Аналого-цифровой преобразователь adc12
- •3.12 Flash контроллер
- •3.12.1 Стирание Flash памяти
- •3.12.2 Запись Flash памяти
- •3.12.3 Регистры Flash контроллера
- •3.13 Цифро-аналоговый преобразователь
- •Контроллер dma
3.6 Порты ввода/вывода
Модель MSP430F149 имеет 6 двунаправленных 8-ми битных порта ввода/вывода P1 – P6. Каждая линия порта может быть настроена для ввода или вывода цифровой информации или поддержки работы периферийных устройств. Кроме того, все линии портов P1 и P2 способны работать как выводы внешних прерываний. Следует заметить, однако, что прерывания от линий каждого порта сгруппированы в общий вектор прерывания: для порта P1 – вектор с адресом FFE8h, а для P2 – FFE2h. Поэтому в подпрограмме обработки прерывания необходимо анализировать флаги прерывания с целью определения его источника.
Работа всех портов регистров ввода/вывода определяется содержимым ряда регистров управления, при этом каждый бит в этих регистрах соответствует одноименной линии порта.
Имеются следующие регистры, управляющие всеми портами ввода/вывода (x – индекс порта):
PxSEL (Port Select) – выбирает функцию линии:
0 – линия предназначена для ввода/вывода;
1 – линия предназначена для периферийного устройства.
PxDIR (Port Direction) – направление передачи данных. Как правило, воздействует на линии порта только в том случае, если соответствующий бит в регистре PxSEL равен 0.
0 – линия настроена на ввод;
1 – линия настроена на вывод;
PxOUT – вывод. В том случае, если линия настроена вывод, содержимое битов этого регистра будет задавать логическое состояние внешнего вывода.
PxIN – ввод. Содержимое бит этого регистра отражает логическое состояние линий порта. Регистр доступен только для чтения.
Для обеспечения функционирования линий портов P1 и P2 в качестве источников прерывания имеются ряд дополнительных регистров:
PxIE (Interrupt Enable) – разрешение прерывания
0 – запрещает прерывание;
1 – разрешает прерывание.
PxIES (Interrupt Edge Select) – выбор активного фронта прерывания
0 – растущий активный фронт;
1 – падающий активный фронт.
PxIFG (Interrupt Flag) – флаг прерывания. Устанавливается в 1 аппаратно, если на линии порта зарегистрировано событие, определенное соответствующим битом регистра PxIES. Сбрасывается в 0 программно.
Полный перечень регистров портов ввода/вывода приведен в таблице 11.
Таблица 11
-
Регистр
Назначение
Адрес
P1IN
Состояние порта P1
20h
P1OUT
Установка порта P1
21h
P1DIR
Направление порта P1
22h
P1IFG
Флаги прерывания порта P1
23h
P1IES
Выбор фронта прерывания порта P1
24h
P1IE
Разрешение прерывания порта P1
25h
P1SEL
Выбор функции порта P1
26h
P2IN
Состояние порта P2
28h
P2OUT
Установка порта P2
29h
P2DIR
Направление порта P2
2Ah
P2IFG
Флаги прерывания порта P2
2Bh
P2IES
Выбор фронта прерывания порта P1
2Ch
P2IE
Разрешение прерывания порта P1
2Dh
P2SEL
Выбор функции порта P2
2Eh
P3IN
Состояние порта P3
18h
P3OUT
Установка порта P3
19h
P3DIR
Направление порта P3
1Ah
P3SEL
Выбор функции порта P3
1Bh
P4IN
Состояние порта P4
1Ch
P4OUT
Установка порта P4
1Dh
P4DIR
Направление порта P4
1Eh
P4SEL
Выбор функции порта P4
1Fh
P5IN
Состояние порта P5
30h
P5OUT
Установка порта P5
31h
P5DIR
Направление порта P5
32h
P5SEL
Выбор функции порта P5
33h
P6IN
Состояние порта P6
34h
P6OUT
Установка порта P6
35h
P6DIR
Направление порта P5
36h
P6SEL
Выбор функции порта P6
37h
ПРИМЕР.
Сконфигурировать порт P1:
линии 0 и 5 – поддержка периферии;
линии 7, 6,4 –вывод;
линии 3 – ввод;
линия 1 – растущий фронт прерывания;
линия 2 – падающий фронт прерывания;
на линиях 7, 6 – выставить 1, на линии 4 -0
Для удобства определения содержимого регистров представим таблицу
-
7
6
5
4
3
2
1
0
0
0
1
0
0
0
0
1
P1SEL
1
1
0
1
0
0
0
0
P1DIR
1
1
0
0
0
0
0
0
P1OUT
0
0
0
0
0
1
1
0
P1IE
0
0
0
0
0
1
0
0
P1IES
mov.b #0C0h, &P1OUT
mov.b #0D0h, &P1DIR
mov.b #21h, &P1SEL
mov.b #4, &P1IES
mov.b #6, &P1IE
ПРИМЕР
Ожидать растущий фронт на выводе P3.5, после чего инвертировать вывод P1.2
L1: bit.b #20h, &P3IN ; проверяем, P3.5=1 ?
jnz L1 ; если да, ждем
L2: bit.b #20h, &P3IN ; P3.5 = 0 ?
jz L2 ; если да, ждем
xor.b #4, &P1OUT ; инвертируем P1.2
