close

Вход

Забыли?

вход по аккаунту

?

1208332

код для вставкиСкачать
Размещено на http://www.allbest.ru/
Микроконтроллеры MSP430
1
Размещено на http://www.allbest.ru/
Содержание
Введение
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
2
Размещено на http://www.allbest.ru/
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.10 Аналоговый компаратор
3.11 Аналого-цифровой преобразователь ADC12
3.12 Flash контроллер
3.12.1 Стирание Flash памяти
3.12.2 Запись Flash памяти
3.12.3 Регистры Flash контроллера
3
Размещено на http://www.allbest.ru/
Введение
Микроконтроллеры семейства MSP430 - серия 16-ти разрядных
микроконтроллеров фирмы Texas Instruments (www.ti.com). Американская
фирма TI является мировым лидером по производству цифровых сигнальных
процессоров. Ею также производятся микроконтроллеры индустриального
применения, аналоговые и цифровые микросхемы широкого применения.
Микроконтроллеры семейства MSP430 имеют одинаковое 16-разрядное
процессорное ядро и отличаются друг от друга объемом встроенной памяти
программ и данных, набором периферийных устройств, количеством
внешних выводов.
Как и AVR микроконтроллеры, MSP реализует RISC (Reduced
Instruction Set Computer) идеологию (всего 27 базовых команд). Однако, а
отличие от AVR, данная серия построена по фон-неймановской (von
Neumann) архитектуре, предполагающей, что память программ и память
данных находятся в одном адресном пространстве. Основными чертами
рассматриваемых микроконтроллеров являются широкий набор встроенных
периферийных устройств, высокая производительность процессора и крайне
низкая мощность потребления, что делает их идеальными для применения в
портативных измерительных индустриальных и биомедицинских приборах.
В настоящее время имеется 5 групп микроконтроллеров MSP430:

MSP430C3xx - имеет производительность до
4 миллионов
инструкций в секунду (4 MIPS), память программ – ПЗУ до 32 kB, память
данных (ОЗУ)– до 1 kB, имеется аппаратная поддержка ЖК индикаторов. В
настоящее время эта серия считается устаревшей и в новых разработках не
используется.

MSP430F1xx – имеет производительность 8 MIPS, Flash память
программ до 60 kB, ОЗУ- до 2 kB (ОЗУ модели MSP430F1610 - 10 kB);

MSP430F4xx - производительность 8 MIPS, Flash память программ
до 120 kB, ОЗУ-до 8 kB, имеется аппаратная поддержка ЖКИ;
4
Размещено на http://www.allbest.ru/

MSP430F2xx - производительность 16 MIPS, Flash память программ
до 120 kB, ОЗУ-до 8 kB, имеет усиленную по отношению к MSP430F1xx
периферию;

MSP430F5xx – новейшая серия, анонсированная во 2 квартале
2008г, имеет производительность до 25 MIPS, Flash память программ до 256
kB, ОЗУ-до 16 kB, имеет усиленную по отношению к MSP430F2xx
периферию;
Новейшие микроконтроллеры, имеющие объем встроенной Flash
памяти больше 64 kB, оснащены усиленным процессорным ядром MSP430X,
поддерживающим 20-ти разрядную арифметику и имеют расширенную
систему команд. В данном курсе будут рассматриваться только микросхемы
группы MSP430F1xx .
Микроконтроллеры серии MSP430F1xx строятся по модульному
принципу, включая в себя набор однотипных функциональных устройств.
Все микроконтроллеры серии содержат следующие функциональные
модули:
- память программ типа Flash ;
- память данных RAM (Random Access Memory);
- сторожевой таймер (Watch Dog Timer);
- супервизор питания;
- аналоговый компаратор;
- 16-разрядный таймер A с тремя модулями захвата/сравнения
(Capture/Compare);
- перестраиваемый RC – генератор DCO (Digitally Controlled Oscillator).
Модели микроконтроллеров внутри семейства отличаются друг от
друга
объемами
периферийных
встроенной
устройств.
В
памяти
таблице
и
1
набором
сведены
дополнительных
характеристики
микроконтроллеров серии MSP430F1xx.
В таблице 1 приняты следующие обозначения:

Int (interrupt) – количество источников прерывания;
5
Размещено на http://www.allbest.ru/

I/O (input/output) – количество внешних линий портов ввода/вывода;

Mul (multiplier) – наличие аппаратного умножителя;

#CC (capture/compare) – количество модулей захвата/сравнения;

ADC# (Analog to Digital Converter) – разрядность аналого-
цифрового преобразователя;

DAC (Digital to Analog Converter) – количество цифро-аналоговых
преобразователей;

DMA (Direct Memory Access) – количество каналов контроллера
прямого доступа в память.
Таблица 1
Flash,
RAM
Mu
Timer
UART/
kB
,B
l
B
SPI
MSP430F1101
1
14
-
-
MSP430F1121
7
14
-
256
9
24
8
256
9
MSP430F1222
4
256
MSP430F1232
8
MSP430F133
Модель
Int
I/O
128
7
4
256
MSP430F122
4
MSP430F123
Выв.
ADC
DAC
DMA
-
-
-
-
20
-
-
-
-
-
20
-
-
1
-
-
-
28
24
-
-
1
-
-
-
28
10
24
-
-
1
ADC10
-
-
28
256
10
24
-
-
1
ADC10
-
-
28
8
256
15
54
-
3CC
2
ADC12
-
-
64
MSP430F135
16
512
15
54
-
3CC
2
ADC12
-
-
64
MSP430F147
32
1k
15
54
+
7CC
2
ADC12
-
-
64
MSP430F148
48
2k
15
54
+
7CC
2
ADC12
-
-
64
MSP430F149
60
2k
15
54
+
7CC
2
ADC12
-
-
64
MSP430F155
16
512
16
54
-
3CC
1
ADC12
2
3
64
MSP430F156
24
1k
16
54
-
3CC
1
ADC12
2
3
64
MSP430F157
32
1k
16
54
-
3CC
1
ADC12
2
3
64
MSP430F167
32
1k
16
54
+
7CC
2 +I2C
ADC12
2
3
64
MSP430F168
48
2k
16
54
+
7CC
2 +I2C
ADC12
2
3
64
MSP430F169
60
2k
16
54
+
7CC
2 +I2C
ADC12
2
3
64
MSP430F1610
32
5k
16
54
+
7CC
2 +I2C
ADC12
2
3
64
MSP430F1611
48
10k
16
54
+
7CC
2 +I2C
ADC12
2
3
64
корпуса
6
Размещено на http://www.allbest.ru/
1. Центральный процессор MSP430
1.1 Адресное пространство микроконтроллеров MSP430F1xx
Т.к.
MSP
микроконтроллеры
построены
по
фон-неймановской
архитектуре, все классы памяти, включающие Flash-память программ, ОЗУ,
регистры управления периферийных устройств, отображены на единое
адресное
пространство
общей
емкостью
64
килобайта.
Типовое
распределение памяти приведено на рис.1.
В е кто р а п р е р ы в н и й
FFFFh
FFE0h
F la sh п а м я ть п р о гр а м м
Н е и сп о л ь зуе тся
F la sh д а н н ы х
10FFh
1000h
0FFFh
BSL
0C 00h
Н е и сп о л ь зуе тся
П а м я ть д а н н ы х
1 6 -б и т п е р и ф е р и я
8 -б и т п е р и ф е р и я
SFR
0200h
01FFh
0100h
00FFh
0010h
000Fh
0000h
Рисунок 1. Распределение памяти микроконтроллеров MSP430F1xx
Младшие адреса памяти занимает область SFR (Special Function
Registers)
в
которой
находятся
несколько
8-битных
регистров,
предназначенных для конфигурации некоторых периферийных устройств.
В диапазоне адресов FFh – 10h находятся регистры управления 8битных периферийных устройств, таких как порты ввода/вывода, UART и
т.д. К этим регистрам, также как и к регистрам SFR, необходимо обращаться,
используя только байтовые формы инструкций.
7
Размещено на http://www.allbest.ru/
В диапазоне адресов 1FFh – 100h находятся регистры управления 16битных периферийных устройств, таких как таймеры, АЦП и т.д. К этим
регистрам необходимо обращаться, используя только словные (16-ти
разрядные) формы инструкций.
Начиная с адреса 200h, располагается ОЗУ памяти данных. Верхняя
граница этой области зависит от физического объема памяти для данной
модели. Так для устройств, снабженных ОЗУ объемом 2 kB, верхняя граница
имеет адрес 9FFh. К ОЗУ данных можно обращаться, используя как
байтовую, так и словную форму инструкций.
Область BSL (Bootstrap Loader) представляет собой ПЗУ, в которой
записаны специальные отладочные подпрограммы, предназначенные для
загрузки пользовательских программ через встроенный последовательный
порт. Правила работы с BSL в данном документе рассматриваться не будут.
К области BSL примыкает Flash память данных. Эта память может
программироваться так же, как и основная память программ. Различие
заключается в том, что стирание этой памяти осуществляется сегментами
меньшего размера.
Старшие адреса занимает Flash память программ. Адрес начала этого
класса памяти зависит от физического объема памяти для данной модели.
Для моделей, имеющих общий объем памяти программ 60 kB, эта область
примыкает к Flash памяти данных и ее начальный адрес равен 1100h.
Последние 32 байта адресного пространства также реализованы как
Flash память и предназначены для хранения векторов прерывания.
1.2 Регистровый файл
Все микроконтроллеры семейства MSP430 имеют в своем составе
регистровый файл, состоящий из 16 16-ти разрядных регистров. Регистровый
файл не отображается на общее адресное пространство, поэтому к регистрам
можно обращаться только по их именам – R0, R1, … R15. Большинство
8
Размещено на http://www.allbest.ru/
регистров из регистрового файла могут выступать как источник или
приемник данных, или использоваться в качестве указателей. Регистры с
индексами от R0 до R3 имеют специальные предназначения, в то время как
регистры R4-R15 являются регистрами общего назначения.
Регистр R0 является программным счетчиком (Program Counter) и к
нему можно также обращаться по имени PC. Регистр PC содержит адрес
команды, которую должен выполнить процессор в данный момент. Так как
все команды процессора имеют четное количество байт, младший бит этого
регистра всегда имеет значение 0.
Регистр R1 является указателем стека (Stack Pointer) и к нему можно
обращаться по имени SP. Стек – это область памяти ОЗУ, предназначенная,
главным образом, для хранения адресов возврата из подпрограмм. Стек
также может использоваться для временного хранения содержимого
регистров и ячеек памяти. В MSP контроллерах используется падающая
модель стека, т.о. ячейки памяти стека заполняются от старших адресов к
младшим. Регистр SP всегда содержит адрес последней (с младшим адресом)
ячейки стека, в которую производилась запись. В начале прикладной
программы необходимо инициализировать регистр SP. Т.к. при сохранении
данных на стеке, например с помощью команды PUSH, содержимое SP
всегда уменьшается на 2, необходимо чтобы его начальное значение было бы
четным. Обычно SP настраивают так, чтобы он указывал на самую верхнюю
область ОЗУ. Для моделей, содержащих 2 килобайта памяти данных, в
регистр SP записывается значение, равное 0A00h.
Регистр R2 является статусным регистром (Status Register) и к нему
можно обращаться по имени SR. Регистр SR содержит, во-первых, биты
управления режимами работы центрального процессора и, во-вторых, флаги,
сигнализирующие о результате последней операции. Структура регистра SR
представлена ниже.
Зарезервировано
V
SCG1
SCG0
OSCOFF
CPUOFF
GIE
N
Z
C
9
Размещено на http://www.allbest.ru/
Регистр SR содержит следующие биты:

Бит 8: V (oVerflow) – переполнение. Устанавливается аппаратно
если в результате последней операции зарегистрировано арифметическое
переполнение, т.е. произошел перенос в старший, знаковый бит. Если
переполнения не было, бит аппаратно сбрасывается.

Биты 7 и 6: SCG1, SCG0 – (System Clock Generator) –
предназначены
для
управления
системным
тактовым
генератором.
Назначение этих бит будет рассмотрено позже (п.3.3).

Бит 5: OSCOFF – выключение осциллятора. Устанавливается
программно для отключения
тактового генератора. В этом
случае
останавливается центральный процессор и вся тактируемая периферия.
Уровень электрического потребления падает до долей микроампер.

Бит
4:
CPUOFF
–
выключение
центрального
процессора.
Программная установка этого бита отключает тактирование центрального
процессора, при этом периферийные устройства могут находиться в
активном режиме. Комбинация состояний битов 7…4 дает возможность
гибкого
управления
режимами
пониженного
потребления
всего
микроконтроллера. Различные режимы потребления будут рассмотрены
ниже (п.3.3).

Бит 3: GIE (Global Interrupt Enable) – глобальное разрешение
прерываний.
Устанавливается/сбрасывается
программно
для
разрешения/запрещения всех прерываний процессора.

Бит 2: N (Negative) – бит фиксации отрицательного результата.
Устанавливается аппаратно, если в качестве результата последней операции
было получено отрицательное значение, в противном случае – сбрасывается.
Фактически в бит N переписывается старший значащий бит результата: 15-й
бит для словной формы или 7-й бит для байтовой формы данных.

Бит
1:
Z
(Zero)
–
бит
фиксации
нулевого
результата.
Устанавливается аппаратно, если в качестве результата последней операции
было получено нулевое значение, в противном случае – сбрасывается.
10
Размещено на http://www.allbest.ru/

Бит 0: С (Carry) – бит переноса. Устанавливается аппаратно, если
результат последней операции не умещается в разрядной сетке операции (16
бит для словной формы или 8 бит для байтовой данных), в противном случае
сбрасывается.
Все
биты
флагов
в
регистре
SR
также
могут
устанавливать/сбрасываться программно.
Ассемблер использует ссылку на регистр R2 для генерации некоторых
констант (см. ниже).
Регистр R3 является генератором констант. Он используется неявно
ассемблером для генерации часто используемых констант: 0, 1, 2, 4, 8, -1. Для
этого при кодировании ассемблер достаточно хитроумно используют
различные способы адресации к регистрам R2 и R3. Использование в коде
команды ссылки на регистр R2 при генерации констант становится
возможным, т.к. использование R2 в качестве регистра-указателя не имеет
смысла.
Использование генератора констант в некоторых случаях приводит к
сокращению объема кода программы и увеличению скорости исполнения
определенных фрагментов программы. Программисту нет необходимости
задумываться об использовании данных констант, подстановку нужного кода
производит ассемблер автоматически. Вместе с тем, программист не должен
явно использовать регистр R3 в своих программах.
Регистры R4 - R15 программист может использовать свободно по
своему усмотрению.
1.3 Байтовая и словная формы инструкций.
16-ти разрядное арифметико-логическое устройство процессора имеет
возможность оперировать как с 16-ти разрядными, так и с 8-ми разрядными
данными. Для того чтобы показать, с данными какой разрядности должен
работать процессор, большинство команд (инструкций процессора) имеют
11
Размещено на http://www.allbest.ru/
байтовую (8 бит) и словную (16 бит) формы. Для этого используются
суффиксы ‘b’ (byte) и ‘w’ (word), записываемые после мнемоники
инструкции и отделенные от нее десятичной точкой. Например, запись
‘mov.b’ определяет байтовую, а запись ‘mov.w’ – словную форму команды
‘mov’. В том случае, если после мнемоники команды суффикс вообще не
ставится, по умолчанию, подразумевает словная форма.
Все ячейки памяти ОЗУ могут быть рассмотрены как массив байт, в
случае обращения к ним с использования байтовой формы инструкции или
как массив слов – для словной формы. То же самое можно сказать о Flash
памяти, т.к. для микроконтроллеров с фон-неймановской архитектурой, по
крайней мере, чтение данных из памяти программ, ничем не отличается от
чтения ОЗУ. Однако адресация памяти в MSP микроконтроллерах всегда
производится побайтно. При этом младшие байты 16-ти разрядных слов
всегда должны иметь четные адреса, а старшие байты – адрес на единицу
больше адреса его младшего байта. Адрес 16-ти разрядной ячейки памяти
совпадает с адресом ее младшего байта. Например, словная ячейка памяти с
адресом 200h состоит из младшего байта, который также имеет адрес 200h, и
старшего байта с адресом 201h. Использование словных инструкций
применительно к ячейкам памяти с нечетными адресами может вызвать либо
ошибку трансляции при явном определении адреса, либо непредсказуемое
поведении процессора при косвенной адресации.
Регистры регистрового файла не имеют деления на старший и младший
байты и всегда воспринимаются как 16-ти разрядные. Однако это не значит,
что к ним не применимы байтовые формы инструкций, при этом регистр
может выступать как в качестве источника данных, так и в качестве
приемника. В том случае, если регистр выступает в качестве источника в
байтовой инструкции, используется только содержимое его младших 8-ми
бит, при этом содержимое всего регистра не меняется. Если регистр
используется как приемник, данные записываются в его младшие 8 разрядов,
при этом старшие разряды обнуляются.
12
Размещено на http://www.allbest.ru/
Пример.
Пусть изначально регистр R4 содержит шестнадцатеричное значение
1234h, байт с адресом 200h – ABh, а байт с адресом 201h – значение 89h.
Если при этих исходных данных содержимое регистра R4 переслать
как байт (команда mov.b) по адресу 200h, то содержимое этой ячейки станет
34h. Содержимое ячейки по адресу 201h не изменится.
Если содержимое R4 переслать как слово (команда mov.w), ячейка с
адресом 200h будет содержать значение 34h, а 201h – 12h.
Если байт с адресом 200h пересылается в R4, регистр после операции
будет содержать значение ABh. Если использовать словную пересылку,
содержимое регистра будет равно 89ABh.
1.4 Режимы адресации
Микроконтроллеры MSP имеют ортогональную систему команд. Это
означает, что каждая команда может адресовать данные, используя любой
доступный режим адресации. Поэтому, прежде чем рассматривать систему
команд, необходимо описать все режимы адресации к данным. Как
указывается
в
технической
документации
Texas
Instruments,
MSP
микроконтроллеры поддерживают следующие режимы адресации к данным:
- регистровый;
- индексный;
- символьный;
- абсолютный;
- косвенный;
- косвенный с автоинкрементом;
- непосредственный.
При этом для источника данных доступны все режимы адресации, а для
приемника – только четыре первых режима. Следует заметить, однако, что
символьный и абсолютный режимы адресации являются частными случаями
13
Размещено на http://www.allbest.ru/
более общего индексного режима, а непосредственный кодируется с
помощью автоинкрементного косвенного режима.
Иллюстрацию работы различных режимов адресации будем проводить
на примере инструкции ‘mov’ (переслать). Данная команда относится к
группе двух-операндных команд и производит пересылку содержимого
операнда-источника по адресу операнда-приемника. Следует помнить, что
каждая инструкция на языке ассемблера записывается в одной строке, при
этом сначала записывается мнемоника команды, затем через пробелы или
символы табуляции указывается операнд-источник и, через запятую,
операнд-приемник.
1.4.1 Регистровая адресация
В регистровой адресации операндом-источником и/или операндомприемником является регистр регистрового файла. Признаком регистровой
адресации является имя регистра, записанное в качестве операнда.
Пример:
mov R5, R10 - содержимое регистра R5 (как слово) пересылается в
регистр R10.
mov.b SP, R5 - содержимое младшего байта указателя стека
пересылается в регистр R5.
mov PC, R7 - в регистре R7 запоминается текущее состояние
программного счетчика.
1.4.2 Индексная адресация
С помощью индексной адресации производится обращение к ячейке
памяти, адрес которой вычисляется как сумма содержимого регистра и
постоянного
смещения.
Признаком
индексной
адресации
является
использование одного из операндов в виде X(Rn), где n – индекс
используемого регистра (n=0..15), а X – произвольное целое число,
14
Размещено на http://www.allbest.ru/
записанное в десятичной или шестнадцатеричной форме, и находящееся в
диапазоне 0..65535 (0..FFFFh).
Пример:
mov 12(R5), 100h(R8) - содержимое ячейки памяти (как слово), адрес
которой равен сумме содержимого регистра R5 и константы 12 (десятичное)
переслать в ячейку памяти, адрес, которой равен сумме содержимого
регистра R8 и константы 100h (шестнадцатеричное).
Рассмотрим этот пример более подробно. Пусть на момент выполнения
этой команды содержимое R5 = 200h, а содержимое R8 = 456h.
Тогда адрес источника равен 200h+12 = 200h+0Ch = 20Ch
Адрес приемника равен 456h+100h = 556h
Таким образом, при данных начальных условиях, исполнение этой
команды приведет к пересылке содержимого слова по адресу 20Ch в ячейку
памяти с адресом 556h.
В одной команде можно комбинировать регистровый и индексный
способы адресации.
Например
mov.b 8(R10), R5 - содержимое байта по адресу, равному сумме
содержимого R10 и константы 8, записывается в регистр R5.
mov.w R12, 0(R14) - содержимое регистра R12 записывается в ячейку
памяти (слово), адрес которой содержится в R14.
1.4.3 Символьная адресация
Признаком символьной адресации является упоминание символьного
имени ячейки памяти как операнда-приемника и/или операнда-источника. В
качестве символьного имени ячейки памяти используется метка, описанная в
сегменте кода или данных при написании программы.
Пример:
mov Lab1, R5
...
15
Размещено на http://www.allbest.ru/
Lab1: dw 10
Содержимое ячейки памяти, помеченной как Lab1, пересылается в
регистр R5. Адрес Lab1 зарезервирован с помощью директивы компилятора
dw (define word). В данном случае по адресу, соответствующему метке Lab1,
располагается константа 10.
Символьная
адресация
является
частным
случаем
индексной
адресации, где в качестве базового регистра используется PC, а постоянное
смещение рассчитывается ассемблером на этапе трансляции как разность
адресов ячейки памяти Lab1 и текущего адреса команды, которая использует
символьную адресацию.
Предположим, что данная команда занимает ячейки памяти программ,
начиная с адреса 1234h, а метка Lab1 соответствует адресу 23AEh. Тогда
смещение относительно PC можно рассчитать как 23AEh – 1234h = 117Ah, и
данная команда будет оттранслирована как mov 117Ah(PC), R5
Таким образом, после исполнения команды в регистр R5 будет
записано значение 10.
Использовать символьный режим адресации имеет смысл тогда, когда
необходимо
получить
перемещаемый,
т.е.
адресно-независимый
программный код. Этот прием применяется, например, в случае, если
программе необходимо перепрограммировать часть собственной Flash
памяти. В этом случае управляющая подпрограмма должна выполняться не
из Flash памяти, а из ОЗУ. Для этого необходимо, чтобы подпрограмма
программирования сначала располагалась во Flash, после чего ее тело
необходимо скопировать в ОЗУ, и передать ей управление. Находясь в ОЗУ,
подпрограмма может очистить Flash, возможно включая ту область, откуда
она была скопирована. Таким образом, перемещаемый программный модуль,
работающий относительно PC, может быть транслирован в привязке к одним
адресам, а исполняться из другой области памяти.
16
Размещено на http://www.allbest.ru/
1.4.4 Абсолютная адресация
Абсолютной адресацией пользуются при обращении к ячейкам памяти,
имеющим фиксированные и известные на момент трансляции адреса. С
помощью
абсолютной
адресации
обычно
обращаются
к
регистрам
управления периферийных устройствами или ячейкам памяти ОЗУ, в том
случае, если не используются перемещаемые программные модули.
Признаком абсолютной адресации является символ ‘&’, после которого
записывается адрес требуемой ячейки памяти. Пример: mov &200h, 10(R5)
В данном примере используется абсолютная адресация для источника и
индексная адресация для приемника. Команда выполняет пересылку слова,
расположенного по адресу 200h в ячейку памяти, адрес которой вычисляется
как сумма содержимого R5 и смещения 10.
Абсолютная адресация также является частным случаем индексной
адресации, в котором в качестве базового регистра используется генератор
констант. При этом трансляция проводится с таким режимом, что в регистр
R3 аппаратно подставляется нулевое значение. Таким образом, данная
команда транслируется как mov 200h(R3), 10(R5)
При этом содержимое R3 на момент выполнения команды равно 0.
Если быть более точным, то транслятор подставляет в коде команд ссылку
(косвенная адресация) не на R3, а на R2. Программист, однако, может не
вникать в нюансы кодирования, автоматически проводимым ассемблером, и
просто использовать символ ‘&’ для обозначения абсолютного режима
адресации.
1.4.5 Косвенная адресация
Косвенная адресация применима только к операнду-источнику.
Признаком косвенной адресации является символ ‘@’ за которым следует
имя регистра. В этом случае в качестве операнда-источника используется
содержимое ячейки памяти, адрес которой содержится в данном регистре.
Пример: mov.w @R12, &200h
17
Размещено на http://www.allbest.ru/
Содержимое ячейки памяти (слово), адрес которой содержится в
регистре R12, пересылается в ячейку памяти с абсолютным адресом 200h. По
своей логике эта команда эквивалентна команде mov.w 0(R12), &200h,
однако команды, использующие косвенную адресацию вместо индексной,
занимают в памяти меньше места и исполняются быстрее.
1.4.6 Косвенная адресация с автоинкрементом
Этот режим адресации применим только к операнду-источнику. Для
обозначения режима используется нотация косвенной адресации, где после
записи операнда-источника записывается символ ‘+’. Действие этого режима
аналогично работе простой косвенной адресации, однако после выполнения
команды, содержимое регистра указателя увеличивается на 1 для байтовой
формы, или на 2 – для словной. Пример mov.b @R6+, R10
В данной команде содержимое ячейки памяти (байт), адрес которой
содержится в регистре R6, пересылается в регистр R10, после чего
содержимое R6 увеличивается на 1.
Предположим, что на момент исполнения команды, регистр R6
содержал значение 21Ah, тогда в регистр R10, будет переслано содержимое
ячейки с адресом 21Ah, а сам регистр после исполнения команды будет
содержать значение 21Bh. Если использовать команду mov.w, то содержимое
R6 оказалось бы равным 21Ch.
Данный режим адресации удобно использовать для циклической
обработки содержимого массивов, т.к. после выполнения команды региструказатель автоматически содержит адрес следующей ячейки памяти.
1.4.7 Непосредственная адресация
Данный режим применяется только для операндов-источников и
предназначен
для
использования
констант,
определенных
на
этапе
компиляции программы. Для обозначения этого режима используется символ
‘#’, за которым следует численное значение самой константы.
18
Размещено на http://www.allbest.ru/
Пример mov #1234, R12
В этом примере число 1234 загружается в регистр R12.
Абсолютная адресация не является самостоятельным типом. При
кодировке данной команды ассемблер заменяет эту инструкцию следующей
последовательностью:
mov @PC+, R12
dw 1234
В данной реализации код команды mov занимает в памяти два байта.
После вычитывания кода команды содержимое регистра PC автоматически
увеличивается на 2, после чего PC содержит адрес, по которому
располагается константа 1234. Согласно алгоритму работы косвенной
адресации, содержимое ячейки памяти, адрес которой находится в PC (т.е.
значение 1234), пересылается в R12, после чего содержимое PC опять
увеличивается на 2, т.к. задан режим с автоинкрементом. Таким образом,
после исполнения команды PC будет содержать адрес следующей за
директивой dw инструкции.
Следует заметить, однако, что в том случае, если в качестве константы
в программе указано одно из значений, генерируемых генератором констант,
ассемблер автоматически подставит более короткий код, со ссылкой на
регистры R2/R3 в зависимости от значения этой константы.
19
Размещено на http://www.allbest.ru/
2. Система команд MSP микроконтроллеров
Все команды MSP можно разделить на основные (базовые) и
эмулированные. Основные команды – это инструкции, которые собственно
исполняет
процессор.
Эмулированные
команды
представляют
собой
мнемоники, которые на этапе компиляции автоматически заменяются
ассемблером на ту или другую команду из основного набора. Всего имеется
27 базовых команд и 24 эмулируемых.
Базовые команды условно делятся на 3 группы: это двухадресные
команды, одноадресные команды и команды переходов.
Для описания действий процессора при исполнении инструкций введем
некоторые обозначения:
src (source) – операнд источник, может быть представлен любым типом
адресации;
dst (destination) – операнд приемник, может быть представлен
регистровым,
индексным,
символьным
или
абсолютным
режимами
адресации;
label – метка в теле программы;
LSB (less significant bit) - младший значащий бит;
MSB (most significant bit) - старший значащий бит;
+ операция арифметического сложения;
- операция арифметического вычитания;
& операция ЛОГИЧЕСКОЕ И;
| операция ЛОГИЧЕСКОЕ ИЛИ;
^ операция ИСКЛЮЧАЮЩЕЕ ИЛИ;
~ операция ЛОГИЧЕСКОЙ ИНВЕРСИИ;
 записать.
20
Размещено на http://www.allbest.ru/
2.1 Двухадресные команды
 Команда: MOV - MOVe – пересылка.
Синтаксис: mov src, dst
Операция: dst  src
Описание: Содержимое src записывается в dst
Флаги: Не модифицируются
Пример: Переслать содержимое R8 в ячейку памяти, адрес которой
хранится в R12
mov R8, 0(R12)
 Команда: ADD - прибавить
Синтаксис: add src, dst
Операция: dst  dst+src
Описание: Содержимое src прибавляется к содержимому dst
Флаги: флаги CZNV модифицируются согласно результату операции
Пример: Прибавить число 35 к содержимому ячейки памяти с адресом
200h
add #35, &200h
 Команда: ADDC - ADD with Carry - прибавить с учетом переноса
Синтаксис: addс src, dst
Операция: dst  st+src+С
Описание: К содержимому dst прибавляется содержимое src и флаг C.
Флаги: флаги CZNV модифицируются согласно результату операции
 Команда: SUB - SUBtract - вычесть
Синтаксис: sub src, dst
Операция: dstdst-src
Описание: Из содержимого dst вычитается содержимое src
Флаги: флаги CZNV модифицируются согласно результату операции
Пример : Из содержимого R12 вычесть содержимое ячейки памяти с
адресом 22Ah
21
Размещено на http://www.allbest.ru/
sub &22Ah, R12
 Команда: SUBC - SUBtract with Carry - вычесть c учетом переноса
Синтаксис: subс src, dst
Операция: dstdst-src-1+C
Описание: Из содержимого dst вычитается содержимое src и инверсия
C
Флаги: флаги CZNV модифицируются согласно результату операции
 Команда: CMP - CoMPare - сравнить
Синтаксис: cmp src, dst
Операция: dst-src
Описание: Из содержимого dst вычитается содержимое src, результат
никуда не заносится
Флаги: флаги CZNV модифицируются согласно результату операции
Пример : Сравнить содержимое ячейки памяти, адрес которой
находится в регистре R12 с числом 100
cmp #100, 0(R12)
 Команда: DADD - Decimal ADDition - сложение операндов в BCD
формате с учетом переноса
Синтаксис: dadd src, dst
Операция: dst dst + src + C
Описание: Команда используется в предположении, что оба операнда
имеют двоично-десятичную кодировку - BCD (Binary Coded Decimal). BCD
кодировка используется в основном для подготовки числовых данных,
поразрядно выводимых на индикатор.
BCD кодировка предполагает, что в каждом полубайте операнда может
находиться число в диапазоне 0 - 9. При сложении двух BCD чисел
результатом исполнения команды является также правильное BCD число.
Флаги: флаги CZNV модифицируются согласно результату операции
Пример : Пусть R5 содержит значение 1234h, а R6 – 6789h. При
выполнении команды
22
Размещено на http://www.allbest.ru/
dadd R5, R6
регистр R6 получит значение 8023h. Т.е. шестнадцатеричные цифры
трактуются как десятичные. В противоположность этому при тех же
исходных условиях команда
add R5, R6
загрузит в R6 значение 79BDh. Это происходит потому, что
1234h+6789h=4660+26505=31165=79BDh
 Команда: AND - логическое И
Синтаксис: and src, dst
Операция: dst dst & src
Описание: В операнд приемник записывается значение побитной
операции ЛОГИЧЕСКОЕ И между содержимым источника src и приемника
dst.
Флаги: флаги ZN модифицируются согласно результату операции, С =
~Z, V=0
Пример: Сбросить 7, 6 и 4 биты в регистре R12
and #2Fh, R12
 Команда: BIT - BIt Test - тестирование бит
Синтаксис: bit src, dst
Операция: dst & src
Описание: Выполняет те же действия, что и команда AND, однако
результат никуда не записывается
Флаги: флаги ZN модифицируются согласно результату операции, С =
~Z, V=0
Пример: Проверить состояние младшего бита регистра R12
bit #1, R12
 Команда: BIS - BIt Set - установка бит
Синтаксис: bis src, dst
Операция: dst  src | dst
23
Размещено на http://www.allbest.ru/
Описание: В приемнике dst устанавливаются в единицы те биты,
которые были установлены в источнике src. Фактически выполняется
операция ЛОГИЧЕСКОЕ ИЛИ.
Флаги: Не модифицируются
Пример: Установить 7-й и 1-й бит в регистре R12
bis.b #82h, R12
 Команда: BIC - BIt Clear - сброс бит
Синтаксис: biс src, dst
Операция: dst  ~src & dst
Описание: В приемнике dst сбрасываются в ноль те биты, которые
были установлены в источнике src. Фактически выполняется операция
ЛОГИЧЕСКОЕ И между приемником и битовой инверсией источника
Флаги: Не модифицируются
 Команда: XOR - eXlusive OR - «исключающее или»
Синтаксис: xor src, dst
Операция: dst  src ^ dst
Описание: В операнд приемник записывается значение побитной
операции ИСКЛЮЧАЮЩЕЕ ИЛИ между содержимым источника и
приемника.
Флаги: флаги ZN модифицируются согласно результату операции,
С = ~Z,
V=1, если оба операнда отрицательные, в противном случае V=0.
Все двухадресные команды поддерживают как байтовую, так и
словную форму.
Объем памяти, занимаемый двухадресными командами, а также
скорость их исполнения не зависит от конкретной команды, а определяется
исключительно режимом адресации приемника и источника. В таблице 2
приведены значения скорости исполнения команды и объем памяти,
занимаемый
командой,
в
зависимости
от
режима
адресации
24
Размещено на http://www.allbest.ru/
источника/приемника. В числителе приведена скорость исполнения в
машинных циклах, в знаменателе – объем памяти в байтах.
Таблица 2
Регистровый
Индексный
Символьный
Абсолютный
Регистровый
1/2
4/4
4/4
4/4
Индексный
3/4
6/6
6/6
6/6
Символьный
3/4
6/6
6/6
6/6
Абсолютный
3/4
6/6
6/6
6/6
Косвенный
2 /2
5/4
5/4
5/4
Косв. с автоинк.
2/2
5/4
5/4
5/4
Непосредственный
2 /4
5/6
5/6
5/6
2.2 Одноадресные команды
 Команда: RRC - Rotate Right through Carry - вращение вправо через
перенос
Синтаксис: rrc src
Операция: C  MSB  .. LSB C
Описание: Содержимое операнда источника сдвигается на один бит
вправо, значение бита переноса записывается в старший значащий бит,
младший бит записывается в бит переноса. Поддерживает байтовую и
словную форму. Для словно формы MSB – 15-й бит, для байтовой – 7-й.
Операнд может иметь любой тип, кроме непосредственного.
Флаги: флаги СZNV модифицируются согласно результату операции,
Пример: Сдвинуть вправо содержимое ячейки памяти, адрес которой
содержится в R5
rrc @R5
 Команда: RRA - Rotate Right Arithmetically - арифметический сдвиг
вправо
Синтаксис: rra src
Операция: MSB  MSB  .. LSB C
25
Размещено на http://www.allbest.ru/
Описание: Содержимое операнда источника сдвигается на один бит
вправо, значение старшего бита не изменяется, младший бит записывается в
бит переноса. Поддерживает байтовую и словную форму. Для словно формы
MSB – 15-й бит, для байтовой – 7-й. Операнд может иметь любой тип, кроме
непосредственного.
Флаги: флаги СZNV модифицируются согласно результату операции,
Пример: сдвинуть вправо содержимое регистра R5
rra R5
 Команда: PUSH - поместить
Синтаксис: push src
Операция: SPSP-2
@SPsrc
Описание: Содержимое операнда источника src записывается в стек.
Поддерживает байтовую и словную форму, но в любом случае на каждую
команду расходуется два байта стека.
Флаги: Не модифицируются
Пример: Поместить на стек число 1234
push #1234
 Команда: SWPB - SWaP Byte - перестановка
Синтаксис: swpb src
Описание: Меняет местами старший и младший байты источника. Не
поддерживает байтовую форму. Не поддерживает непосредственную
адресацию.
Флаги: Не модифицируются
Пример: Поменять местами байты в регистре R9
swpb R9
 Команда: CALL - вызов
Синтаксис: call src
Операция: SP  SP-2
@SP  PC
26
Размещено на http://www.allbest.ru/
PC  src
Описание: Вызывает подпрограмму на исполнение. Для этого сначала
сохраняет на стеке адрес возврата, после чего осуществляет переход на
начало подпрограммы. Не поддерживает байтовую форму.
Флаги: Не модифицируются
Пример:
call #proc - вызов подпрограммы помеченной меткой proc
call proc - вызов подпрограммы, адрес которой содержится в ячейке
памяти с именем proc
call r5 - вызов подпрограммы, адрес которой содержится в регистре R5
call @R5+ - вызов подпрограммы, адрес которой содержится в ячейке
памяти, адрес которой в свою очередь, содержится в регистре R5, после чего
содержимое R5 увеличивается на 2.
 Команда: RETI - RETurn from Interrupt - возврат из подпрограммы
обработки прерывания
Синтаксис: reti
Операция: SR  @SP
SP  SP+2
PC  @SP
SP  SP+2
Описание: Завершает подпрограмму обработки прерывания. Для этого
сначала
восстанавливает
из
стека
содержимое
статусного
регистра,
зафиксированное перед вхождением в прерывании, и передает управление на
прерванный фрагмент программы.
Флаги: восстанавливаются.
 Команда: SXT - Sign eXTend – расширение знака
Синтаксис: sxt src
Описание: Копирует 7-й бит операнда в его старшие биты. Команда
используется для преобразования байта в слово. Не поддерживает байтовую
форму. Не поддерживает непосредственную адресацию.
27
Размещено на http://www.allbest.ru/
Флаги: флаги ZN модифицируются согласно результату операции, С =
~Z, V=0
Данные об объеме памяти, занимаемой командами, и скорость их
исполнения приведена в таблице 3. Формат данных в таблице – такой же как
в таблице 2.
Таблица 3
RRA,RRC,
SWPB,SXT
PUSH
CALL
Регистровый
1/2
3/2
4/2
Индексный
4/4
5/2
5/4
Символьный
4/4
5/4
5/4
Абсолютный
4/4
5/4
5/4
Косвенный
3/2
4/2
4/2
Косв. с автоинк.
3/2
5/2
5/2
Непосредственный
-
4/4
5/4
Команда RETI в памяти занимает 2 байта и исполняется за 5 тактов.
2.3 Команды переходов
Команды переходов могут быть условными и безусловными. Условные
переходы выполняются на основе анализа состояния битов в статусном
регистре SR. Переход осуществляется относительно содержимого регистра
PC на расстояние от -511 до 512 слов.
Для некоторых команд условных переходов ассемблер поддерживает
альтернативную нотацию.
 Команда: JNE/JNZ - Jump if Not Equal / Jump if Not Zero –прыжок
если не равно / прыжок если не ноль
Синтаксис: jne label
jnz label
28
Размещено на http://www.allbest.ru/
Описание: Тестируется состояние бита Z статусного регистра SR. Если
Z=0 осуществляется переход на метку label.
Флаги: Не модифицируются
Пример: Очистить 30 байт ОЗУ начиная с адреса 200h
mov #200h, R5 ; настраиваем указатель на начало блока ОЗУ
Loop: mov.b #0, 0(R5) ; пересылаем число 0 в текущую ячейку ОЗУ
add #1, R5 ; наращиваем указатель
cmp #200h+30, R5 ; проверяем достиг ли указатель границы
; блока ОЗУ
jne Loop ; Если нет – переход на начало цикла.
 Команда: JQE/JZ - Jump if Equal / Jump if Zero –прыжок если равно /
прыжок если ноль
Синтаксис: jeq label
jz label
Описание: Тестируется состояние бита Z статусного регистра SR. Если
Z=1 осуществляется переход на метку label.
Флаги: Не модифицируются
Пример: Тестировать 7-й бит в регистре R10
bit #80h, R10
jz BitIsZero
....
BitIsZero:
 Команда: JN - Jump if Negative –прыжок если минус
Синтаксис: jn label
Описание: Тестируется состояние бита N статусного регистра SR. Если
N=1 осуществляется переход на метку label.
Флаги: Не модифицируются
Пример: В регистр R12 записать сумму всех положительных значений
в блоке ОЗУ с начальным адресом 2A0h и размером 50 байт.
mov #0, R12 ; обнуляем сумму
29
Размещено на http://www.allbest.ru/
mov #2A0h, R10 ; настраиваем указатель на начало блока ОЗУ
mov #50, R11 ; инициализируем счетчик циклов
loop: mov.b @R10+, R8 ; читаем данные во временный регистр
cmp #0, R8 ; сравниваем с 0
jn skip ; если минус, пропустить следующую команду
add R8, R12 ; накапливаем сумму
skip: sub #1, R11 ; считаем количество циклов
jnz loop ; если не все значения, переход на начало цикла
 Команда: JC/JHS - Jump if Carry set / Jump if Higher or Same –прыжок
если флаг С установлен / прыжок если выше или равно
Синтаксис: jc label
jhs label
Описание: Тестируется состояние бита C статусного регистра SR. Если
C=1 осуществляется переход на метку label. Команда JHS обычно
используется после сравнения беззнаковых операндов.
Флаги: Не модифицируются
 Команда: JNC/JLO - Jump if Carry Not set / Jump if Lower –прыжок
если флаг С сброшен / прыжок если ниже
Синтаксис: jnc label
jlo label
Описание: Тестируется состояние бита C статусного регистра SR. Если
C=0 осуществляется переход на метку label. Команда JLO обычно
используется после сравнения беззнаковых операндов.
Флаги: Не модифицируются
Пример: В регистр R15 записать количество единичных бит,
содержащихся в регистре R12.
mov #16, R13 ; загружаем счетчик бит
mov #0, R15 ; обнуляем регистр результата
loop: rrc R12 ; сдвиг данных в бит C
jnc skip ; если C=0, пропустить след. команду
30
Размещено на http://www.allbest.ru/
add #1, R15 ; увеличить результат
skip: sub #1, R13 ; все биты сдвинуты?
jne loop ; если нет – переход на начало цикла
Тот же результат можно получить, если в приведенном фрагменте две
команды
jnc skip
add #1, R15
заменить одной:
addc #0, R15
 Команда: JGE - Jump if Greater or Equal –прыжок если больше или
равно
Синтаксис: jge label
Описание: Если результат операции N^V равен 0, осуществляется
переход на метку label. Команда JGE обычно используется после сравнения
знаковых операндов.
Флаги: Не модифицируются
Пример: В регистр R12 записать максимальное знаковое значение,
содержащееся в блоке памяти ОЗУ со стартовым адресом 200h и размером
100 слов.
mov #-32768, R12 ; инициализируем R12 наименьшим значением
mov #200h, R15 ; настраиваем указатель на начало блока
mov #100, R13 ; инициализируем счетчик циклов
loop: cmp @R15+, R12 ; сравниваем текущее слово с текущим
; максимумом
jge skip ; если меньше, пропускаем след. команду,
mov -2(R15), R12 ; иначе меняем текущий максимум
skip: sub #1, R13 ; проверяем окончание цикла
jne loop ; если цикл не закончен, переход на начало
; цикла
 Команда: JL - Jump if Less –прыжок если меньше
31
Размещено на http://www.allbest.ru/
Синтаксис: jl label
Описание: Если результат операции N^V равен 1, осуществляется
переход на метку label. Команда JGE обычно используется после сравнения
знаковых операндов.
Флаги: Не модифицируются
 Команда: JMP - Jump –прыжок
Синтаксис: jmp label
Описание: Безусловный переход на метку label
Флаги: Не модифицируются
Все команды переходов в памяти занимают 2 байта и исполняются за
два цикла.
2.4 Эмулируемые команды
Как уже указывалось выше, программист может свободно использовать
эмулированные
команды,
однако
на
этапе
трансляции
ассемблер
автоматически заменяет ее аналогом из базового набора. Использование
эмулируемых команд в ряде случаев делает текст программы более
понятным и наглядным. Флаги в статусном регистре модифицируются в
соответствии с замещающими командами.
 Команда: ADC - Add Carry – прибавить перенос
Синтаксис: adc dst
Эмуляция: addc #0, dst
Описание: Если бит С регистра SR равен 1, операнд увеличивается на
1. Значение 0 подставляется из генератора констант.
 Команда: SBC - SuBtract Carry – вычесть перенос
Синтаксис: sbc dst
Эмуляция: sbc #0, dst
Описание: Если бит С регистра SR равен 0, операнд уменьшается на 1.
Значение 0 подставляется из генератора констант.
32
Размещено на http://www.allbest.ru/
 Команда: DADC - Decimal Add Carry – прибавить перенос к BCD
операнду
Синтаксис: dadc dst
Эмуляция: dadd #0, dst
Описание: Если бит С регистра SR равен 1, BCD операнд
увеличивается на 1. Значение 1 подставляется из генератора констант.
 Команда: INC - INCrement – увеличить
Синтаксис: inc dst
Эмуляция: add #1, dst
Описание: Операнд увеличивается на 1. Значение 1 подставляется из
генератора констант.
 Команда: INCD - INCrement Double – увеличить дважды
Синтаксис: incd dst
Эмуляция: add #2, dst
Описание: Операнд увеличивается на 2. Значение 2 подставляется из
генератора констант.
 Команда: DEC - DECrement – уменьшить
Синтаксис: dec dst
Эмуляция: sub #1, dst
Описание: Операнд уменьшается на 1. Значение 1 подставляется из
генератора констант.
 Команда: DECD – DECrement Double – уменьшить дважды
Синтаксис: decd dst
Эмуляция: sub #2, dst
Описание: Операнд уменьшается на 2. Значение 2 подставляется из
генератора констант.
 Команда: INV – INVersion – инверсия
Синтаксис: inv dst
inv.b dst
Эмуляция: xor #0FFFFh, dst
33
Размещено на http://www.allbest.ru/
xor.b #0FFh, dst
Описание: Состояние всех бит операнда инвертируется. Значение
FFFFh/FFh, что соответствует -1 подставляется из генератора констант.
 Команда: RLC – Rotate Left trough Carry – вращение влево через
перенос
Синтаксис: rlc dst
Эмуляция: addc dst, dst
Описание: Все биты аргумента сдвигаются влево на один бит, в
младший бит записывается содержимое бита C, старший бит операнда
записывается в бит C.
 Команда: RLA – Rotate Left Arithmetically – сдвиг влево
арифметический.
Синтаксис: rla dst
Эмуляция: add dst, dst
Описание: Все биты аргумента сдвигаются влево на один бит, в
младший бит записывается 0, старший бит операнда записывается в бит C.
Пример:
Двоичное
значение,
содержащееся
в
регистре
R12
преобразовать в BCD формат. Результат поместить в R15.
mov #16, R13 ; Загрузка счетчика бит
mov #0, R15 ; очистка R15
loop: rla R12 ; сдвиг влево исходного числа
dadd R15, R15 ; сдвиг результата влево с учетом C и
; BCD коррекция
dec R13 ; Если сдвинуты не все биты,
jne loop ; переход на начало цикла
 Команда: TST – TeST – тестирование (на ноль и минус)
Синтаксис: tst dst
Эмуляция: cmp #0, dst
Описание: Содержимое операнда сравнивается с нулем, по результату
сравнения устанавливаются флаги Z и N.
34
Размещено на http://www.allbest.ru/
 Команда: POP – вытолкнуть
Синтаксис: pop dst
Эмуляция: mov @SP+, dst
Описание: В операнд dst загружаются данные из стека, указатель стека
перемещается на следующую позицию.
 Команда: BR – BRanch - ветвление
Синтаксис: br src
Эмуляция: mov src, PC
Описание: Осуществляет безусловный переход на произвольное
адресное расстояние при использовании любого режима адресации.
Пример:
br #Lab ; переход наметку Lab
br Lab ; переход по адресу, содержащемуся в ячейке,
; помеченной как Lab
br R10 ; переход по адресу, содержащемуся в регистре R10
br &200h ; переход по адресу, содержащемуся в ячейке с адресом 200h
br @R10 ; переход по адресу, содержащемуся в ячейке,
; адрес которой содержится в R10
br 4(R10) ; переход по адресу, содержащемуся в ячейке,
; адрес которой равен сумме содержимого R10 и смещения 4
br @R10+ ; переход по адресу, содержащемуся в ячейке, адрес которой
; содержится в R10, после чего содержимое R10 увеличивается
; на 2.
 Команда: RET – RETurn - вернуться
Синтаксис: ret
Эмуляция: mov @SP+, PC
Описание: Осуществляет переход по адресу, сохраненному в стеке,
после чего передвигает указатель стека на следующую позицию. Этой
командой должна завершаться каждая подпрограмма.
 Команда: CLR – CLeaR - очистить
35
Размещено на http://www.allbest.ru/
Синтаксис: clr dst
Эмуляция: mov #0, dst
Описание: Очищает операнд приемник. Значение 0 подставляется из
генератора констант.
 Команда: CLRС – CLeaR Carry – очистить флаг C
Синтаксис: clrc
Эмуляция: bic #1, SR
Описание: Очищает флаг C в статусном регистре. Значение 1
подставляется из генератора констант.
 Команда: SETС – SET Carry – установить флаг C
Синтаксис: setc
Эмуляция: bis #1, SR
Описание: Устанавливает флаг C в статусном регистре. Значение 1
подставляется из генератора констант.
 Команда: CLRZ – CLeaR Zero – очистить флаг Z
Синтаксис: clrz
Эмуляция: bic #2, SR
Описание: Очищает флаг Z в статусном регистре. Значение 2
подставляется из генератора констант.
 Команда: SETZ – SET Zero – установить флаг Z
Синтаксис: setz
Эмуляция: bis #2, SR
Описание: Устанавливает флаг Z в статусном регистре. Значение 2
подставляется из генератора констант.
 Команда: CLRN – CLeaR Negative – очистить флаг N
Синтаксис: clrn
Эмуляция: bic #4, SR
Описание: Очищает флаг N в статусном регистре. Значение 4
подставляется из генератора констант.
 Команда: SETN – SET Negative – установить флаг N
36
Размещено на http://www.allbest.ru/
Синтаксис: setn
Эмуляция: bis #4, SR
Описание: Устанавливает флаг N в статусном регистре. Значение 4
подставляется из генератора констант.
 Команда: DINT – Disable INTerrupts – запретить прерывания
Синтаксис: dint
Эмуляция: bic #8, SR
Описание: Очищает флаг GIE в статусном регистре. Все маскируемые
прерывания
процессора
запрещаются.
Значение
8
подставляется
из
генератора констант.
 Команда: EINT – Enable INTerrupts – разрешить прерывания
Синтаксис: eint
Эмуляция: bis #8, SR
Описание: Устанавливает флаг GIE в статусном регистре. Все
маскируемые
прерывания
процессора
разрешаются.
Значение
8
подставляется из генератора констант.
 Команда: NOP – No OPeration – нет операции
Синтаксис: nop
Эмуляция: mov R3, R3
Описание: Не выполняет никаких операций. Используется для
организации программной задержки на один такт.
37
Размещено на http://www.allbest.ru/
3. Периферийные устройства микроконтроллеров MSP430F1xx
3.1 Внешние выводы микроконтроллера MSP430F149
Каждый микроконтроллер серии MSP кроме процессорного ядра и
встроенной памяти имеет в своем составе ряд периферийных устройств.
Большинство из них для обеспечения своего функционирования должны
иметь внешние выводы для общения с внешним миром. Почти все выводы,
связанные с периферийными устройствами, разделяются с параллельными
портами ввода/вывода. Поэтому все внешние выводы имеют, как минимум,
две альтернативные функции. В качестве примера назначения внешних
выводов рассмотрим модель MSP430F149.
Микроконтроллер MSP430F149 имеет в своем составе следующие
периферийные устройства:
- Flash память программ объемом 60 kB + 256 B информационной
памяти;
- ОЗУ данных объемом 2 kB;
- 6 двунаправленных 8-битных портов ввода/вывода;
- 2 тактовых генератора для подключения внешних резонаторов, плюс
встроенный RC генератор DCO;
- аппаратный умножитель 16х16 бит;
- супервизор питания;
- сторожевой таймер WatchDog;
- 16-ти битный таймер А3 с тремя модулями захвата/сравнения (СС
модули);
- 16-ти битный таймер В7 с семью модулями захвата/сравнения;
- 2 универсальных синхронно-асинхронных последовательных приемопередатчика USART;
- 8-канальный 12-ти разрядный АЦП;
- аналоговый компаратор.
38
Размещено на http://www.allbest.ru/
Микросхема MSP430F149 упакована в миниатюрный пластиковый
квадратный корпус с 64 выводами QFP (Quad Flat Pack). Название,
назначение и номера выводов представлены в таблице 4. В колонке
Ввод/Вывод приняты обозначения: I – вход, O – выход, I/O –
двунаправленный, S – вывод питания
Таблица 4
№
Ввод/
вывода
Вывод
AVCC
64
S
Аналоговое питание для АЦП
AVSS
62
S
Аналоговая земля для АЦП
DVCC
1
S
Питание для цифровой части
DVSS
63
S
Цифровая земля
P1.0/TACLK
12
I/O
Бит 0 порта1 ; Вход тактирования для Таймера А
P1.1/TA0
13
I/O
P1.2/TA1
14
I/O
P1.3/TA2
15
I/O
P1.4/SMCLK
16
I/O
Бит 4 порта1 ; Выход сигнала тактирования SMCLK
P1.5/TA0
17
I/O
Бит 5 порта1 ; Выход модуля сравнения 0 Таймера А
P1.6/TA1
18
I/O
Бит 6 порта 1 ; Выход модуля сравнения 1 Таймера А
P1.7/TA2
19
I/O
Бит 7 порта 1 ; Выход модуля сравнения 2 Таймера А
P2.0/ACLK
20
I/O
Бит 0 порта 2 ; Выход сигнала тактирования ACLK
P2.1/TAINCLK
21
I/O
Бит 1 порта 2 ; Вход тактирования для Таймера А
P2.2/CAOUT/TA0
22
I/O
P2.3/CA0/TA1
23
I/O
P2.4/CA1/TA2
24
I/O
P2.5/ROSC
25
I/O
P2.6/ADC12CLK
26
I/O
Бит 6 порта 2 ; Вход внешнего тактирование АЦП
P2.7/TA0
27
I/O
Бит 7 порта 2 ; Выход модуля сравнения 0 Таймера А
P3.0/STE0
28
I/O
Бит 0 порта 3 ; Разрешение работы передатчика SPI0
P3.1/SIMO0
29
I/O
Бит 1 порта 3 ; Вход/выход приемник-передатчика SPI0
Наименование
Назначение
Бит 1 порта1 ; Вход/Выход модуля 0 захвата/сравнения
Таймера А
Бит 2 порта1 ; Вход/Выход модуля 1 захвата/сравнения
Таймера А
Бит 3 порта1 ; Вход/Выход модуля 2 захвата/сравнения
Таймера А
Бит 2 порта 2; Выход Аналогового компаратора;
Вход/Выход модуля 0 захвата/сравнения Таймера А
Бит 3 порта 2 ; Вход аналогового компаратора; Выход
модуля сравнения 1 Таймера А
Бит 4 порта 2 ; Вход аналогового компаратора; Выход
модуля сравнения 2 Таймера А
Бит 5 порта 2 ; Вывод для подключения внешнего резистора
DCO
39
Размещено на http://www.allbest.ru/
P3.2/SOMI0
30
I/O
Бит 2 порта 3 ; Вход/выход приемник-передатчика SPI0
P3.3/UCLK0
31
I/O
Бит 3 порта 3 ; Вход внешнего тактирования USART/SPI 0
P3.4/UTXD0
32
I/O
Бит 4 порта 3 ; Выход передатчика UART 0
P3.5/URXD0
33
I/O
Бит 5 порта 3 ; Вход приемника UART 0
P3.6/UTXD1
34
I/O
Бит 6 порта 3 ; Выход передатчика UART 1
P3.7/URXD1
35
I/O
Бит 7 порта 3 ; Вход приемника UART 1
P4.0/TB0
36
I/O
P4.1/TB1
37
I/O
P4.2/TB2
38
I/O
P4.3/TB3
39
I/O
P4.4/TB4
40
I/O
P4.5/TB5
41
I/O
P4.6/TB6
42
I/O
P4.7/TBCLK
43
I/O
Бит 7 порта 4; Вход внешнего тактирования Таймера B
P5.0/STE1
44
I/O
Бит 0 порта 5; Разрешение работы передатчика SPI1
P5.1/SIMO1†
45
I/O
Бит 1 порта 5; Вход/выход приемник-передатчика SPI1
P5.2/SOMI1†
46
I/O
Бит 2 порта 5; Вход/выход приемник-передатчика SPI1
P5.3/UCLK1†
47
I/O
Бит 3 порта 5; Вход внешнего тактирования USART/SPI 1
P5.4/MCLK
48
I/O
Бит 4 порта 5; Выходной сигнал тактирования MCLK
P5.5/SMCLK
49
I/O
Бит 5 порта 5; Выходной сигнал тактирования SMCLK
P5.6/ACLK
50
I/O
Бит 6 порта 5; Выходной сигнал тактирования ACLK
P5.7/TBOUTH
51
I/O
P6.0/A0
59
I/O
Бит 0 порта 6; Аналоговый вход 0 АЦП
P6.1/A1
60
I/O
Бит 1 порта 6; Аналоговый вход 1 АЦП
P6.2/A2
61
I/O
Бит 2 порта 6; Аналоговый вход 2 АЦП
P6.3/A3
2
I/O
Бит 3 порта 6; Аналоговый вход 3 АЦП
P6.4/A4
3
I/O
Бит 4 порта 6; Аналоговый вход 4 АЦП
P6.5/A5
4
I/O
Бит 5 порта 6; Аналоговый вход 5 АЦП
P6.6/A6
5
I/O
Бит 6 порта 6; Аналоговый вход 6 АЦП
P6.7/A7
6
I/O
Бит 7 порта 6; Аналоговый вход 7 АЦП
RST/NMI
58
I
Вход внешнего сброса; Вход немаскируемого прерывания
TCK
57
I
Вход тактирования JTAG интерфейса
TDI/TCLK
55
I
Вход данных JTAG интерфейса
Бит 0 порта 4; Вход/Выход модуля 0 захвата/сравнения
Таймера B
Бит 1 порта 4; Вход/Выход модуля 1 захвата/сравнения
Таймера B
Бит 2 порта 4; Вход/Выход модуля 2 захвата/сравнения
Таймера B
Бит 3 порта 4; Вход/Выход модуля 3 захвата/сравнения
Таймера B
Бит 4 порта 4; Вход/Выход модуля 4 захвата/сравнения
Таймера B
Бит 5 порта 4; Вход/Выход модуля 5 захвата/сравнения
Таймера B
Бит 6 порта 4; Вход/Выход модуля 6 захвата/сравнения
Таймера B
Бит 7 порта 5; Вход переключения выходов Таймера В в
треть состояние
40
Размещено на http://www.allbest.ru/
TDO/TDI
54
I/O
Вход/выход данных JTAG интерфейса
TMS
56
I
Вход тестового режима JTAG интерфейса
VeREF+
10
I
Вход внешнего опорного напряжения АЦП
VREF+
7
O
Выход встроенного опорного напряжения АЦП
VREF−/VeREF−
11
I
Общий провод опорного напряжения АЦП
XIN
8
I
Вход тактового генератора LFXT1
XOUT
9
O
Выход тактового генератора LFXT1
XT2IN
53
I
Вход тактового генератора XT2
XT2OUT
52
O
Выход тактового генератора XT2
3.2 Система прерываний
Прерывания
микроконтроллера
генерируются
внешними
и/или
внутренними событиями, такими как, перепад напряжения на внешних
портах, переполнение таймера, получение байта данных на входе USART,
окончание преобразования АЦП и др.
В MSP микроконтроллерах прерывания могут быть маскируемыми,
немаскируемыми (системные сбросы) и условно немаскируемыми. Для
возникновения
маскируемого
прерывания
необходимо,
чтобы
это
прерывание было разрешено индивидуальным битом разрешения, а также
бит GIE в статусном регистре SR, был установлен в 1. Немаскируемые
прерывания не имеют бит индивидуального разрешения, и не зависят от
состояния бита GIE. Условно немаскируемые прерывания имеют биты
индивидуального разрешения, но не зависят от состояния GIE.
Причиной немаскируемых прерываний могут быть:
- включение питания микроконтроллера;
- срабатывания WatchDog таймера;
- внешний сигнал RESET.
Причиной условно немаскируемых прерываний могут быть:
- активный уровень на внешнем выводе NMI;
- срыв генерации тактового генератора;
- доступ к Flash памяти во время ее программирования.
41
Размещено на http://www.allbest.ru/
Маскируемые прерывания генерируются периферийными модулями.
Для
обслуживания
прерываний
используются
подпрограммы
обработки прерываний ISR (Interrupt Service Routine), начальные адреса
которых сведены в таблицу векторов прерываний. Таблица векторов
прерываний занимает самую верхнюю область Flash памяти программы и
состоит из 16 слов (для MSP430F2xxx – 32 слова, для MSP430F5xx – 64
слова). В каждом слове (векторе) должен быть записан адрес ISR, на которую
будет передано управление в случае возникновения прерывания. Каждый
вектор прерывания соответствует одному или нескольким источникам
прерывания. Прерывание вызывается установкой (как правило, аппаратной)
флага требования прерывания того или иного устройства.
В том случае, если прерывание берется, флаг требования прерывания
сбрасывается автоматически, если он является единственным для данного
вектора, в противном случае, этот флаг необходимо сбрасывать программно
в ISR. В этом случае в ISR необходимо программное тестирование флагов
для определения источника, вызвавшего прерывание.
При
одновременном
возникновении
нескольких
прерываний
управление передается по вектору, имеющему более высокий приоритет. В
MSP микроконтроллерах вектора с большим адресом имеют более высокий
приоритет. Различные модели MSP контроллеров могут иметь различные
таблицы векторов прерываний. Назначения векторов прерываний для модели
MSP430F149 приведены в таблице 5.
Таблица 5
Приоритет
Адрес
Источник
Тип
15 высший
FFFEh
Reset, WatchDog, включен.питания
Немаскир.
14
FFFCh
NMI, авария осциллят., доступ к Flash
Услов. немаск.
13
FFFAh
Модуль СС0 таймера B7
Маскир.
12
FFF8h
11
FFF6h
Аналоговый компаратор
Маскир.
10
FFF4h
WatchDog таймер в режиме интервального
Маскир.
Модули СС1-СС6 таймера В7,
переполнение таймера B7
Маскир.
42
Размещено на http://www.allbest.ru/
таймера
9
FFF2h
Приемник USART0
Маскир.
8
FFF0h
Передатчик USART0
Маскир.
7
FFEEh
АЦП
Маскир.
6
FFECh
СС0 таймера А3
Маскир.
5
FFEAh
4
FFE8h
Параллельный порт P1
Маскир.
3
FFE6h
Приемник USART1
Маскир.
2
FFE4h
Передатчик USART1
Маскир.
1
FFE2h
Параллельный порт P2
Маскир.
0 низший
FFE0h
Зарезервирован
Маскир.
СС1,СС2 таймера А3, переполнение
таймера А3
Маскир.
При возникновении прерываний процессор выполняет следующие
действия:
1) если процессор находился в активном режиме, он завершает
исполнение текущей инструкции; если процессор находился в остановленном
режиме – он переходит в активное состояние;
2) программный
счетчик
PC,
указывающий
на
следующую
инструкцию, сохраняется в стеке;
3) статусный регистр SR сохраняется в стеке;
4) вырабатывается прерывание с наивысшим приоритетом;
5) сбрасывается флаг требования прерывания, если данному вектору
соответствует единственному источник;
6) все биты статусного регистра SR кроме SCG0 сбрасываются в 0; т.к.
бит GIE=0 дальнейшие маскируемые прерывания запрещаются;
7) в программный счетчик PC загружается содержимое выбранного
вектора прерывания.
Как правило, индивидуальные биты разрешения и флаги требования
прерывания
сосредоточены
в
регистрах
управления
периферийных
устройств. Однако ряд битов, ответственных за исполнение прерываний
находятся в регистрах, расположенных в области SFR. Ко всем регистрам в
43
Размещено на http://www.allbest.ru/
области SFR можно обращаться, используя только байтовые формы
инструкций. Рассмотрим содержимое этих регистров.
 Регистр IE1 (Interrupt Enable) - разрешение прерываний, адрес - 0,
начальное значение 0.
UTXIE0
URXIE0

ACCVIE
NMIIE
-
-
OFIE
WDTIE
Бит 7 - UTXIE0 (USART0 Transmit Interrupt Enable) – разрешение
прерывания от передатчика USART0.

Бит 6 - URXIE0 (USART0 Receive Interrupt Enable) – разрешение
прерывания от приемника USART0.

Бит 5 – ACCVIE (Access Violation Interrupt Enable) – разрешение
прерывания при нарушении доступа к Flash памяти (см. п. 3.12.2).

Бит 4 – NMIIE (NMI Interrupt Enable) – разрешение прерывание от
внешнего входа NMI (Non Masked Interrupt).

Бит 3,2 – зарезервированы.

Бит 1 – OFIE (Oscillator Fault Interrupt Enable) – разрешение
прерывание при аварии осциллятора.

Бит 0 – WDTIE (WatchDog Timer Interrupt Enable) разрешение
прерывания от сторожевого таймера, если он работает в режиме
интервального таймера.
Все биты регистра IE1 устанавливаются/сбрасываются программно для
разрешения/запрещения соответствующих прерываний.
 Регистр IE2 (Interrupt Enable) - разрешение прерываний, адрес - 1,
начальное значение 0.
-
-

UTXIE1
URXIE1
-
-
-
-
Биты 7,6 – зарезервированы.
44
Размещено на http://www.allbest.ru/

Бит 5 – UTXIE1 (USART1 Transmit Interrupt Enable) – разрешение
прерывания от передатчика USART1.

Бит 4 – URXIE1 (USART1 Receive Interrupt Enable) – разрешение
прерывания от приемника USART1.

Биты 3,2,1,0 – зарезервированы.
Все биты регистра IE2 устанавливаются/сбрасываются программно для
разрешения/запрещения соответствующих прерываний.
 Регистр IFG1 (Interrupt Flag) – флаги прерываний, адрес - 2,
начальное значение 82h.
UTXIFG0
URXIFG0

-
NMIIFG
-
-
OFIFG
WDTIFG
Бит 7 - UTXIFG0 (USART0 Transmit Interrupt Flag) – флаг
требования прерывания от передатчика USART0. Устанавливается аппаратно
при готовности USART0 передать очередной байт данных, или программно.
Сбрасывается аппаратно записью новые данные в буфер передатчика
USART0.

Бит 6 - URXIFG0 (USART0 Receive Interrupt Flag) – флаг
требования прерывания от приемника USART0. Устанавливается аппаратно,
если
USART0
принял
очередной
байт
данных,
или
программно.
Сбрасывается чтением данных из буфера приемника.

Бит 5 – зарезервирован.

Бит 4 – NMIIFG (NMI Interrupt Flag) – флаг требования прерывание
от внешнего входа NMI. Устанавливается аппаратно, если на входе NMI был
зарегистрирован активный фронт, или программно. Вызывает переход на ISR
с адресом FFFCh. Сбрасывается программно.

Бит 3,2 – зарезервированы.

Бит 1 – OFIFG (Oscillator Fault Interrupt Flag) – флаг требования
прерывание при аварии осциллятора. Устанавливается аппаратно, если в
45
Размещено на http://www.allbest.ru/
течение интервала времени, приблизительно равного 50 μs, отсутствуют
импульсы на выходе тактового генератора. Сбрасывается программно.

Бит 0 – WDTIFG (WatchDog Timer Interrupt Flag) флаг требования
прерывания от сторожевого таймера, если он работает в режиме
интервального таймера. Устанавливается аппаратно при переполнении
таймера или программно. Сбрасывается аппаратно, если берется прерывание
с адресом FFF4h, или программно.
 Регистр IFG2 (Interrupt Flag) – флаги прерываний, адрес - 2,
начальное значение 20h.
-
-
UTXIFG1
URXIFG1
-
-
-
-

Биты 7,6 – зарезервированы.

Бит 5 – UTXIFG1 (USART1 Transmit Interrupt Flag) – флаг
требования прерывания от передатчика USART1. Устанавливается аппаратно
при готовности USART1 передать очередной байт данных, или программно.
Сбрасывается аппаратно записью новые данные в буфер передатчика
USART1.

Бит 4 - URXIFG1 (USART1 Receive Interrupt Flag) – флаг
требования прерывания от приемника USART1. Устанавливается аппаратно,
если
USART1
принял
очередной
байт
данных,
или
программно.
Сбрасывается аппаратно чтением данных из буфера приемника.

Биты 3,2,1,0 – зарезервированы.
Ниже приведен пример структуры программы с использованием
прерывания по приему данных от USART0. Текст программы приводиться
для трансляции компилятором фирмы IAR.
#include <msp430x14x.h> ; включаем стандартный файл определений,
чтобы
; можно было обращаться к регистрам и битам по
; их именам
46
Размещено на http://www.allbest.ru/
ORG 1100h ; настраиваем счетчик команд на начало Flash памяти
Start: mov #0A00h, SP ; настраиваем указатель стека на конец ОЗУ
...
bis.b #URXIE0, &IE1 ; разрешаем прерывание от приемника USART0
...
eint ; глобально разрешаем прерывание
loop: ; начало рабочего цикла программы
...
jmp loop ; конец рабочего цикла программы
RxISR: ; начало подпрограммы обработки прерывания от
; приемника USART0
...
reti ; конец подпрограммы обработки прерывания
ORG 0FFF2h
DW RxISR ; инициализация вектора прерывания
; приемника USART0
ORG 0FFFEh
DW Start ; установка адреса начала программы
END ; конец программного модуля
3.3 Система тактирования
Внутреннее тактирование микроконтроллеров MSP430 осуществляется
с помощью трех различных тактовых сигналов:

MCLK
–
Master
Clock
–
используется
для
тактирования
процессорного ядра микроконтроллера;

SMCLK – Sub-Main Clock – используется для тактирования
периферийных устройств;

ACLK – Auxiliary Clock – вспомогательная частота, также может
использоваться для тактирования периферийных устройств.
47
Размещено на http://www.allbest.ru/
В качестве источников для этих частот могут использоваться два
встроенных
генератора,
предназначенных
для
работы
с
внешними
резонаторами – LFXT1 и XT2, и управляемый генератор DCO (Digital
Controlled Oscillator), выполненный на базе встроенного RC- генератора.
Генератор LFXT1 может работать в двух режимах – низкочастотном и
высокочастотном. В низкочастотном режиме он адаптирован на прямое
подключение
стандартного
резонатора
частотой
32768
Hz.
В
высокочастотном режиме он может работать с резонаторами в частотном
диапазоне от 450 kHz до 8 MHz.
Частоту генератора
DCO
можно
перестраивать
программно
в
диапазоне ≈ 120 kHz – 5 MHz. Следует заметить, однако, что частота,
генерируемая DCO, существенно зависит от напряжения питания и
температуры.
В реальных системах для тактирования CPU и быстрой периферии
используются, как правило, высокочастотные сигналы MCLK и SMCLK
соответственно, а для тактирования медленной периферии – сигнал ACLK с
частотой 32768 Hz. Генератор DCO используется для приложений, не
требующих высокой точности и стабильности генерации временных
интервалов.
OSCOFF
XTS
D IV A x
X IN
ACLK
LF X T 1 C LK
1 /1 ,1 /2 , 1 /4 , 1 / 8
LFXT1
XOUT
XT2OFF
D IV M x
X T 2 IN
S E LM x
CPUOFF
X T 2 C LK
XT2
M CLK
1 /1 , 1 /2 , 1 /4 , 1 /8
XT2O U T
V cc
V cc
Rg
R o sc
R sel
SCG0
DCOx
MODx
D IV S x
SCG1
S E LS
DCOR
P 2 .5
SM CLK
R C G en.
DCO
D C O C LK
1 /1 , 1 /2 , 1 /4 , 1 /8
Рисунок 2. Структурная схема модуля тактирования
48
Размещено на http://www.allbest.ru/
Как видно из рисунка, систему тактирования можно гибко настраивать,
исходя из требований прикладной задачи, которая реализуется MSP
микроконтроллером. В качестве источника для частоты MCLK можно
программным образом выбрать частоты, выдаваемые генераторами LFXT1,
XT2 или DCO. Кроме того, входную частоту сигнала MCLK можно снизить,
используя предварительный делитель частоты. Наконец, для уменьшения
потребления микроконтроллера, частоту MCLK можно выключить с
помощью бита CPUOFF статусного регистра SR. Частоты ACLK и SMCLK
также можно понизить с помощью предварительных делителей, а частоту
SMCLK можно выключить с помощью бита SCG1 статусного регистра SR.
Генератор DCO использует частоту встроенного RC генератора, который для
минимизации общего потребления так же может быть выключен с помощью
бита статусного регистра SCG0. Так как центральный процессор тактируется
частотой MCLK, а периферийные устройства частотами ACLK или SMCLK,
имеется возможность использования нескольких режимов пониженного
потребления LPM (Low Power Mode) всего микроконтроллера в зависимости
от комбинации бит CPUOFF, OSCOFF, SCG1, SCG0 статусного регистра.
Различают всего 6 режимов LPM. Комбинации управляющих бит и
описание режимов LPM приведено в таблице 6.
Таблица 6
Режим
SCG1
SCG0
OscOff
CPUOff
Описание
Активный
0
0
0
0
CPU и периферия активны
LPM0
0
0
0
1
CPU выключено; вся периферия активна
CPU выключен; DCO выключен, если не
LPM1
0
1
0
1
используется для MCLK или SMCLK; вся
периферия активна
CPU, SMCLK , DCO выключены; RC генератор и
LPM2
1
0
0
1
LPM3
1
1
0
1
Активен только ACLK
LPM4
X
x
1
1
CPU и вся периферия остановлены
ACLK активны
49
Размещено на http://www.allbest.ru/
Во всех режимах пониженного потребления, включая LPM4, ОЗУ
сохраняет свое содержимое, на портах вывода удерживается логическое
состояние, предшествующее переходу в низко потребляющий режим.
Уровень потребления микросхемы различен для разных режимов LPM.
Его типовое значение при питании в 3 В соответствует следующим
значениям:

Активный – 340 μA/MHz;

LPM0 – 70 μA/MHz;

LPM2 – 17 μA/MHz;

LPM3 – 2 μA/MHz;

LPM4 – 0.1 μA/MHz.
Выход из режимов LPM0-LPM3 осуществляется по прерыванию от
работающих периферийных устройств или сигналом RESET. Выход из
режимов LPM4 может быть осуществлен только по сигналу RESET, т.к. вся
периферия заморожена. Естественно внешний вывод RESET/NMI должен
быть сконфигурирован для функции сброса.
При вхождении в прерывание из режимов LPM процессорное ядро и
вся периферия переходит в активное состояние, т.к. во все биты статусного
регистра записываются нули (см. п. 3.2 ). Интересен тот факт, что при выходе
из подпрограммы обработки прерывания с помощью команды RETI, режим
LPM автоматически восстанавливается, т.к. в SR загружается из стека его
предыдущее состояние. Если после прерывания, необходимо, чтобы CPU
находился в активном режиме, перед выходом из прерывания необходимо
подкорректировать исходное состояние SR, сохраненное в стеке. Это можно
сделать, например, командой bic #CPUOFF, 0(SP)
В этом случае команда RETI загрузит в SR значение со сброшенным
битом CPUOFF.
Кроме битов, расположенных в статусном регистре, на работу модуля
тактирования влияют биты, расположенные в собственных регистрах
управления. Регистры управления модуля тактирования приведены в таблице
50
Размещено на http://www.allbest.ru/
7. Ко всем регистрам следует обращаться с помощью байтовых форм
инструкций.
Таблица 7
Наименование
Назначение
Адрес
Началь. Значение
BCSCTL1
Регистр управления 1 системы тактирования
57h
84h
BCSCTL2
Регистр управления 2 системы тактирования
58h
0
DCOCTL
Регистр управления DCO
56h
60h
IE1
Регистр разрешения прерывания
0
0
IFG1
Регистр флагов прерывания
2
0
 BCSCTL1 (Base Clock System Control 1) – регистр управление
базовой системы тактирования 1.
XT2OFF

XTS
Бит
DIVA 1,0
7
-
XT2OFF
XT5V
–
RSEL 2,1,0
выключение
генератора
XT2.
Устанавливается/сбрасывается программно для запрета/разрешения работы
генератора XT2. По сбросу в этот бит записывается 1, поэтому по умолчанию
генератор XT2 запрещен.

Бит 6 – XTS (XT1 Select) – выбор режима генератора LFXT1.
Устанавливается программно для выбора режима работы LFXT1:
0 – низкочастотный режим (Low Frequency Mode);
1 – высокочастотный режим (High Frequency Mode).

Биты 5 и 4 – DIVA (Divider ACLK) – делитель частоты ACLK.
Устанавливают коэффициент делителя для частоты ACLK
DIVA1
DIVA0
Делитель
0
0
1/1
0
1
1/2
1
0
1/4
1
1
1/8
51
Размещено на http://www.allbest.ru/
Бит 3 – XT5V - всегда должен быть сброшен.

Биты 2, 1, 0 – RSEL (Resistor Select) – выбор резистора. Комбинация
этих бит устанавливает номинал внутреннего резистора RC генератора, что, в
свою очередь, приводит к перестройке диапазона частоты, генерируемой RC
генератором. При сбросе в эту группу бит аппаратно записывается
комбинация 100b, что соответствует среднему диапазону частот. Зависимость
генерируемой частоты DCO от содержимого этих бит будет рассмотрена
позже.
 BCSCTL2 (Base Clock System Control 2) – регистр управление
базовой системы тактирования 2.
SELM 1,0

DIVM 1,0
DIVS 1,0
DCOR
Бит 7, 6 – SELM (Select MCLK) – выбор источника для MCLK
SELM1
SELM0
Источник
0
0
DCOCLK
0
1
DCOCLK
1
0
XT2CLK
1
1
LFXT1CLK

SELS
Биты 5, 4 – DIVM (Divider MCLK) – делитель частоты MCLK.
Устанавливают коэффициент делителя для частоты MCLK
DIVM1
DIVM0
Делитель
0
0
1/1
0
1
1/2
1
0
1/4
1
1
1/8

Бит 3 – SELS (Select SMCLK) – выбор источника для SMCLK
0 – источник DCOCLK;
52
Размещено на http://www.allbest.ru/
1 – источник XT2CLK.

Биты 2 и 1 – DIVS (Divider SMCLK) – делитель частоты SMCLK.
Устанавливают коэффициент делителя для частоты SMCLK
DIVS1
DIVS0
Делитель
0
0
1/1
0
1
1/2
1
0
1/4
1
1
1/8

Бит 0 – DCOR (DCO Resistor) – выбор частотозадающего резистора
для RC генератора DCO
0 – внутренний резистор;
1 – внешний резистор, подключаемый к порту P2.5.
В том случае, если выбран внутренний резистор, его значение
устанавливается битами RSEL регистра BCSCTL1.
 DCOCTL (DCO Control) – регистр управление DCO.
DCO
MOD

Биты 7, 6 , 5 – DCO - содержимое этих бит подстраивает частоту
DCO внутри диапазона RC генератора. Таким образом, частота DCO зависит
как от битов RSEL, так и от рассматриваемых битов. Частоту, генерируемую
DCO, принято обозначать как FDCOXY , где X- значение битов RSEL
регистра BCSCTL1, а Y – значение битов DCO регистра DCOCTL. В
технической документации приведены типовые значения частот FDCO при
напряжении питания 3 В
FDCO03 ≈ 0.13 MHz
FDCO13 ≈ 0.18 MHz
FDCO23 ≈ 0.28 MHz
FDCO33 ≈ 0.47 MHz
53
Размещено на http://www.allbest.ru/
FDCO43 ≈ 0.75 MHz
FDCO53 ≈ 1.3 MHz
FDCO63 ≈ 2.0 MHz
FDCO73 ≈ 3.2 MHz
FDCO77 ≈ 4.9 MHz
При сбросе в эти биты записывается значение 011b для установки
средней
частоты
генерации
DCO.
Таким
образом,
после
сброса
микроконтроллера его тактирование осуществляется от генератора DCO с
частотой FDCO43 ≈ 0.75 MHz.

Биты 4, 3, 2, 1, 0 – MOD (Modulator) – смешивает частоты FDCO и
FDCO+1 в пропорции, определяемой содержанием этих бит. Средний период
генерируемой частоты можно определить по формуле
T = ((32-MODx)*TDCO + MODx *TDCO+1) / 32,
где TDCO и TDCO+1 - периоды частот FDCO и FDCO+1
соответственно.
Усредненную частоту генерации DCO можно определить по формуле:
F = 32* FDCO* FDCO+1/((32-MODx)* FDCO+1 + MODx * FDCO)
Регистры IE1 и IFG1, содержащие бит разрешения прерывания и флаг
аварии осцилляторов, был рассмотрен в разделе 3.2.
Многоступенчатая подстройка частоты DCO позволяет достаточно
точно (11 двоичных разрядов) выставить требуемую частоту генерации. Эта
техника используется при построении программно-аппаратного умножителя
частоты, что позволяет получить частоту DCO в определенное количество
раз больше чем опорная частота. В качестве опорной частоты, как правило,
используется генератор LFXT1 со стабильным внешним резонатором 32768
Hz, а высокие частоты MCLK и SMCLK генерируются с помощью DCO. Для
обеспечения стабильности DCO, необходимо программно организовать
периодическое измерение и подстройку генерируемой частоты таким
54
Размещено на http://www.allbest.ru/
образом, чтобы отношение FDCO и LFXT1CLK оставалось постоянным.
Такая техника, несмотря на некоторую сложность реализации, дает
возможность иметь хорошую производительность процессора при низком
потреблении и уровне излучаемых электромагнитных помех.
Для удобства подстройки частоты при организации умножителя может
потребоваться, чтобы номинальная частота DCO соответствовала средним
значениям полей DCO и MOD регистра DCOCTL. Для достижения этого
можно использовать режим внешнего резистора RC-генератора. Его номинал
подбирается таким образом, чтобы удовлетворить данным условиям.
Следует добавить также, что при перестройке DCO с помощью поля
RSEL его частота изменяется в соотношении F RSEL+1 / F RSEL ≈ 1.65
При перестройке DCO с помощью поля DCO его частота изменяется в
соотношении F DCO+1 / F DCO ≈ 1.12
В качестве демонстрации механизма работы модулятора DCO
приведем следующий пример. Предположим, поля RSEL = 4, DCO = 3 и
MOD = 10.
Тогда FDCO43 = 750 kHz, а FDCO44 = 750 *1.12 = 840 kHz
Так как значение поля MOD отлично от нуля, на выходе DCO получим
периодическую последовательность импульсов, из которых 10 периодов
соответствуют частоте 840 kHz, а 22 периода – частоте 750 kHz. Усредненная
частота определиться как
F=32*750*840/((32-10)*840 + 10*750)=775.98 kHz
ПРИМЕР .
Проинициализировать тактовую систему MSP430F14x.
Исходные данные:
LFXT1 = 32768 Hz
XT2 = 8 MHz
MCLK = 8 MHz
SMCLK = 4 MHz
ACLK = 32768 Hz
55
Размещено на http://www.allbest.ru/
Для инициализации системы тактирования необходимо выполнить
следующие шаги:
1) Включить генератор XT2;
2) Очистить бит OFIFG в регистре IFG1;
3) Выдержать паузу не менее 50 μs ( см. описание IFG1.OFIFG в п.3.2);
4) Проверить состояние бита OFIFG;
5) Если OFIFG=1 (генератор еще не завелся) перейти к пункту 2;
6) Настроить MCLK, SMCLK
7) Выключить DCO.
bic.b #XT2OFF, &BCSCTL1 ; включить XT2
L1: bic.b #OFIFG, &IFG1 ; сбросить OFIFG;
mov #0FFh, R4 ; программная задержка
L2: dec R4 ; пустыми циклами
jnz L2 ; закончена?
bit.b #OFIFG, &IFG ; тестирование OFIFG
jnz L1 ; OFIFG=0 ?;
mov #SELM1+SELS+DIVS1, &BCSCTL2 ; MCLK, SMCLK от XT2,
; для SMCLK – делитель 1 / 2
bis.b #SCG0, SR ; выключить DCO
3.4 Сторожевой таймер
Сторожевой таймер (WatchDog Timer) предназначен для сброса CPU, в
том случае если программа, в результате каких-либо сбоев, начинает
исполнять несанкционированные команды. Сторожевой таймер, как правило,
организуется в виде свободно бегущего таймера-счетчика, который при его
переполнении вызывает аппаратный сброс всего микроконтроллера. Для
исключения
непредусмотренного
сброса,
программа
должна
сама
периодически сбрасывать этот таймер.
56
Размещено на http://www.allbest.ru/
В MSP микроконтроллерах 16-ти битный сторожевой таймер может
работать собственно в режиме WatchDog или в режиме интервального
таймера.
В режиме
интервального
таймера аппаратный
сброс
при
переполнении не производится. Вместо этого генерируется прерывание с
адресом вектора FFF4h.
Период переполнения зависит, во-первых, от частоты тактирования
таймера, и, во-вторых, от коэффициента делителя входной частоты.
Регистры управления модуля сторожевого таймера приведены в
таблице 8.
Таблица 8
Наименование
Назначение
Адрес
Началь. Значение
WDTCTL
Регистр управления
120h
6900h
IE1
Регистр разрешения прерывания
0
0
IFG1
Регистр флагов прерывания
2
0
Регистр управления WDTCTL содержит также биты управления
режимом внешнего вывода RESET/NMI. К этому регистру необходимо
обращаться только с помощью словных форм инструкций. Регистры IE1 и
IFG1, содержащие биты разрешения и флаги прерываний соответственно
были рассмотрены в разделе 3.2
 WDTCTL
(WatchDog
Timer
Control)
–
регистр
управления
сторожевым таймером.
WDTHOLD

WDTNMIES
WDTNMI
WDTMSEL
WDTCNTCL
WDTSSEL
WDTIS 1,0
Биты 15 – 8 – WDTPW ( WDT Password) – пароль для обращения к
регистру WDTCTL. При чтении это поле всегда содержит значение 69h. При
записи в это поле необходимо записывать значение 5Ah, в противном случае
будет генерироваться системный сброс.

Бит 7 – WDTHOLD – остановка сторожевого таймера.
57
Размещено на http://www.allbest.ru/
0 – таймер активен;
1 – таймер остановлен.

Бит 6 – WDTNMIES (NMI Edge Select) – выбор активного фронта
вывода NMI.
0 – активен растущий фронт;
1 – активен падающий фронт.

Бит 5 – WDTNMI – определяет функцию вывода RESET/NMI
0 – вывод функционирует как RESET;
1 – вывод функционирует как NMI.

Бит 4 – WDTMSEL (WDT Mode Select) – выбор режима
сторожевого таймера
0 – сторожевой таймер;
1 – интервальный таймер.

Бит 3 – WDTCNTCL (WDT Counter Clear) – сброс сторожевого
таймера. Запись логической 1 в этот бит приводит к сбросу сторожевого
таймера. В том случае, если сторожевой таймер разрешен (WDTHOLD=0)
программа должна периодически устанавливать этот бит во избежание
системного сброса. Этот бит сбрасывается в 0 автоматически, поэтому при
чтении содержимое этого бита всегда 0.

Бит 2 – WDTSSEL (WDT Source Select) – выбор источника
тактирования.
0 – тактирование осуществляется частотой SMCLK;
1 – тактирование осуществляется частотой ACLK.

Бит 1,0 – WDTIS (WDT Interval Select) – выбор интервала
переполнения сторожевого таймера. Комбинация состояния этих бит дает
возможность установить период переполнения счетчика. Если F – частота
тактирования счетчика в Герцах, то период переполнения в секундах
определиться следующим образом:
58
Размещено на http://www.allbest.ru/
WDTIS1
WDTIS0
Интервал
0
0
32768 / F
0
1
8192 / F
1
0
512 / F
1
1
64 / F
Следует помнить, что даже в тех приложениях, где планируется
использовать сторожевой таймер, подключать его имеет смысл только тогда,
когда вся программы отлажена. Поэтому обычно на этапе разработке
программы его отключают. Сделать это можно, например, командой
mov #5A80h, &WDTCTL
или
mov #WDTPW+WDTHOLD, &WDTCTL
ПРИМЕР. Сбросить сторожевой таймер и установить его режим
работы для интервала переполнения в диапазоне 0.1 – 0.5 секунды.
Тактирование осуществлять от ACLK = 32768 Hz.
Если выбрать комбинацию WDTIS = 01b, то период переполнения
определиться как
T = 8196/32768 = 0.25 s.
Для установки режима и сброса таймера необходимо выполнить
команду
mov #WDTPW+WDTCNTCL+WDTSSEL+WDTIS0, &WDTCTL
или более короткий эквивалент этой команды
mov #5A0Dh, &WDTCTL
3.5 Аппаратный умножитель
В системе команд MSP микроконтроллеров нет команд, производящих
умножение и деление. Однако в старших моделях имеется периферийное
устройство, с помощью которого можно производить 8-ми и 16-ти разрядные
операции умножения. Наличие быстрого аппаратного умножителя с
59
Размещено на http://www.allbest.ru/
возможностью накопления результата диктуется необходимостью, в ряде
случаев, использования MSP микроконтроллеров для цифровой обработки
сигналов в реальном времени, например для реализации цифровых фильтров.
Встроенный
аппаратный
умножитель
позволяет
производить
умножение и умножение с накоплением знаковых и беззнаковых 8-ми и 16ти битных операндов с получением 32-ти разрядного результата.
Для того чтобы выполнить операцию умножения необходимо первый
операнд записать в определенный регистр умножителя, в зависимости от
того, какая именно требуется операция, после чего записать второй операнд в
специальный регистр. Практически сразу после этого из регистра результата
можно вычитывать продукт умножения. Операция умножения с накоплением
производит перемножение содержимого регистров первого и второго
операндов и сложение полученного произведения с текущим содержимым
регистра результата. Результат умножения сохраняется в трех 16-ти
разрядных регистрах – младшего и старшего слова произведения, и регистре
расширения, где фиксируется переполнение при сложении или знак
результата.
Регистры аппаратного умножителя приведены в таблице 9
Таблица 9
Наименование
MPY
MPYS
MAC
MACS
Назначение
Регистр первого операнда для беззнакового
умножения
Регистр первого операнда для знакового
умножения
Регистр первого операнда для беззнакового
умножения с накоплением
Регистр первого операнда для знакового
умножения с накоплением
Адрес
130h
132р
134р
136h
OP2
Регистр второго операнда
138h
RESLO
Регистр младшего слова результата
13Ah
RESHI
Регистр старшего слова результата
13Ch
SUMEX
Регистр расширения суммы
13Eh
60
Размещено на http://www.allbest.ru/
Содержимое регистра SUMEXT зависит от типа операции. Его
возможные состояния показаны в таблице 10.
Таблица 10
Операция
Содержимое SUMEXT
MPY
Всегда 0
0 – если результат положителен;
MPYS
FFFFh – если результат отрицателен
0 – если нет переноса из 15-го бита RESHI;
MAC
FFFFh – если есть перенос из 15-го бита RESHI
0 – если результат положителен;
MACS
FFFFh – если результат отрицателен
ПРИМЕР.
Вычислить результат выражения R13:R12 = 1234 * R4 + 5678 * R5 ,
где
R13 - старшее слово результата;
R12 - младшее слово результата;
R4, R5 – беззнаковые 16-ти разрядные переменные.
mov #1234, &MPY
mov R4, &OP2
mov #5678, &MAC
mov R5, &OP2
mov &RESLO, R12
mov &RESHI, R13
ПРИМЕЧАНИЕ. Если умножитель используется как в основной
программе, так и в подпрограмме обработки прерывания, может возникнуть
ситуация, когда прерывание происходит во время загрузки и чтения
результата основной программой. В этом случае режим операции и сами
операнды могут быть потеряны, и результат окажется непредсказуем. Для
того чтобы избежать подобной ситуации рекомендуется в основной
61
Размещено на http://www.allbest.ru/
программе запрещать все прерывания перед загрузкой данных в умножитель
и разрешать прерывания после вычитывания результата.
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 – вывод. В том случае, если линия настроена вывод,
содержимое битов этого регистра будет задавать логическое состояние
внешнего вывода.
62
Размещено на http://www.allbest.ru/
 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
63
Размещено на http://www.allbest.ru/
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
64
Размещено на http://www.allbest.ru/
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
3.7 Таймер A3
Таймер А3 является 16-ти битным таймером-счетчиком. На его базе
реализованы 3 модуля захвата/сравнения (capture/compare) – CC0, CC1 и
СС2. Каждый из этих модулей может работать либо в режиме захвата, либо в
режиме сравнения.
Модули захвата обычно используются для точного измерения
временных интервалов между какими-либо событиями, например фронтами
внешних импульсов. Для организации работы модуля захвата обычно
запускают таймер в режиме свободного счета, входная логика модуля захвата
настраивается на определенный тип события (растущий/падающий фронт).
При возникновении внешнего события, текущее содержимое таймера
автоматически перезаписывается в специальный регистр захвата. Кроме того,
устанавливается флаг требования прерывания модуля захвата, отреагировать
на который программа может несколько позже, но при этом, содержимое
регистра захвата будет точно соответствовать моменту события.
Модули сравнения обычно используются для генерации событий на
внешних выводах микроконтроллера в заданный момент времени. Для этого
блок выходной логики, связанный с внешним выводом, настраивают на тот
65
Размещено на http://www.allbest.ru/
или иной тип события (установка, сброс или переключение вывода). В
специальный регистр сравнения записывается значение, соответствующее
моменту генерации события. С помощью цифрового компаратора модуль
периодически
сравнивает
текущее
содержимое
таймера
и
регистра
сравнения. При их равенстве вырабатывается внутренний сигнал EQU,
который заставляет сработать блок выходной логики. Кроме того,
устанавливается флаг требования прерывания, который может быть
обработан процессором уже после генерации требуемого события.
Структурная схема таймера А3 приведена на рисунке 3.
P 1 .0 /T A C L K
TASSEL
AC LK
SN C LK
D IV
TAR
MODE
EQU0
P 2 .1 /IN C L K
ID
P 1 .1 /T A 0
P 2 .2 /C A O U T /T A 0
C C IA
MC
TAC LR
TACC0
C C IS
OM
C C IB
CCR0
GND
C C _ IN
P 1 .1 /T A 0
CC_OUT
P 1 .5 /T A 0
VCC
P 2 .7 /T A 0
CCM
C o m p a ra to r
P 1 .2 /T A 1
EQU0
TACC1
CAOUT
P 1 .2 /T A 1
P 1 .6 /T A 1
P 2 .3 /C A 0 /T A 1
A D C 1 2 sc
P 1 .3 /T A 3
P 1 .3 /T A 2
TACC2
AC LK
P 1 .7 /T A 2
P 2 .4 /C A 1 /T A 2
Рисунок 3. Структурная схема таймера А3
Текущее содержимое таймера находится в регистре TAR (Timer A
Register). Тактирование таймера осуществляется с помощью одного из
источников – внутренние сигналы ACLK или SMCLK, или внешние сигналы,
подключаемые к выводам P1.0/TACLK и P2.1/INCLK. Выбрать источник
можно с помощью битов TASSEL в регистре управления таймера. Выбранная
входная частота подается на таймер через делитель DIV, управляемый
битами ID регистра управления.
Таймер A обеспечивает несколько режимов работы:
66
Размещено на http://www.allbest.ru/

Режим
продолжительного
счета
(Continuous)
–
содержимое
регистра TAR увеличивается на 1 при каждом тактирующем импульсе от 0 до
FFFFh, после чего таймер переполняется, его содержимое сбрасывается в 0 и
процесс начинается сначала. При переходе значения TAR FFFFh0
устанавливается флаг переполнения таймера TAIFG.

Режим
суммирования
(Up)
-
содержимое
регистра
TAR
увеличивается на 1 при каждом тактирующем импульсе от 0 до содержимого
регистра сравнения CCR0, после чего содержимое TAR сбрасывается и
процесс
счета
начинается
сначала.
Флаг
переполнения
TAIFG
устанавливается при переходе содержимого TAR CCR00.

Режим суммирования-вычитания (Up/Down) – содержимое TAR
сначала увеличивается на 1 от значения 0 до содержимого CCR0, после чего
направление счета меняется и таймер считает до 0. После достижения
нулевого значения, направление счета опять меняется на противоположное и
т.д. Флаг переполнения таймера TAIFG устанавливается при переходе TAR
10. Обычно этот режим применяется для широтно-импульсной модуляции
PWM.
Режимы работы таймера задаются блоком MODE. На рисунке 4
изображены режимы работы таймера. Содержимое таймера также может
быть очищено программно с помощью бита TACLR регистра управления.
Модули захвата/сравнения имеют идентичную структуру. Т.к. каждый
модуль может работать либо в режиме захвата, либо в режиме сравнения, в
них используется общий регистр CCRx. Тип события для захвата выделяет
блок CC_IN, тип режима сравнения генерирует блок CC_OUT.
Как видно из рисунка 3, для каждого модуля имеется свой набор
входных и выходных сигналов. Входной сигнал для модулей захвата
назначается битами CCIS регистров управления. Внутреннее подключение
входов к потенциалам GND и VCC дает возможность осуществить
программное срабатывание модуля захвата. В качестве второго входа модуля
CC1 можно выбрать внутренний сигнал выхода встроенного аналогового
67
Размещено на http://www.allbest.ru/
компаратора CAOUT (см. п. 3.10). В качестве второго входа модуля CC2
можно выбрать внутреннюю частоту ACLK. Эта возможность предусмотрена
для реализации умножителя частоты DCO (см.п.3.3).
TAR
FFFFh
0
T A IF G
T A IF G
t
T A IF G
Р е ж и м п р о д о л ж и те л ь н о го с ч е та
TAR
CCR0
0
T A IF G
T A IF G
t
T A IF G
Р ежим сум м ирования
TAR
CCR0
0
T A IF G
T A IF G
t
Р е ж и м с у м м и р о в а н и я /в ы ч и т а н и я
Рисунок 4. Режимы работы таймера A3
Подключение выходных сигналов к модулю сравнения производится с
помощью регистров P1SEL и P2SEL (см.п. 3.6). Выход ADC12sc модуля CC1
является внутренним сигналом, предназначенным для автоматического
старта преобразования АЦП при срабатывании модуля сравнения.
Блок
выходной
логики
модуля
сравнения
CC_OUT
можно
запрограммировать на работу в одном из 8-ми возможных режимов:
68
Размещено на http://www.allbest.ru/

0 – Output – выход устанавливается программно через специальный
бит в регистре управления;

1 – Set – выход устанавливается в 1 при TAR=CCRx и остается в
этом состоянии до тех пор, пока таймер не будет сброшен или не изменен
режим;

2 – Toggle/Reset – выход переключается на противоположное
состояние при TAR=CCRx, сбрасывается в 0 при TAR=CCR0;

3 – Set/Reset – выход устанавливается в 1 при TAR=CCRx,
сбрасывается в 0 при TAR=CCR0;

4 – Toggle – выход переключается на противоположное состояние
при TAR=CCRx;

5 – Reset – выход сбрасывается в 0 при TAR=CCRx и остается в
этом состоянии до тех пор, пока не будет изменен режим;

6 – Toggle/Set – выход переключается на противоположное
состояние при TAR=CCRx и сбрасывается в 0 при TAR=CCR0;

7 – Reset/Set – выход сбрасывается в 0 при TAR=CCRx и
устанавливается в 1 при TAR=CCR0.
Режимы 2,3,6,7 не используются для CC0.
Согласно таблице 5 модуль CC0 имеет индивидуальный вектор
прерывания с адресом FFECh, прерывания от модулей CC1, CC2, а также
переполнение таймера имеют групповой вектор с адресом FFEAh. Для
быстрого
определения
источника
прерывания
используется
регистр
идентификации прерывания TAIV.
Таблица 12
Регистр
Назначение
Адрес
TAR
Регистр таймера-счетчика
170h
TACTL
Регистр управления таймера
160h
TACCR0
Регистр захвата/сравнения СС0
172h
TACCTL0
Регистр управления СС0
162h
TACCR1
Регистр захвата/сравнения СС1
174h
69
Размещено на http://www.allbest.ru/
TACCTL1
Регистр управления СС1
164h
TACCR2
Регистр захвата/сравнения СС2
176h
TACCTL2
Регистр управления СС2
166h
TAIV
Регистр идентификации прерывания
12Eh
 TAR (Timer A Register) – регистр таймера А. 16-ти разрядный
регистр текущего содержимого таймера. Регистр доступен как для записи,
так и для чтения с помощью словных форм инструкций.
 TACTL (Timer A Control) – содержит биты управления таймера А.
Регистр доступен как для записи, так и для чтения с помощью словных форм
инструкций и содержит следующие биты.
TASSEL 1, 0
ID 1, 0
MC1,0
-
TACLR
TAIE
TAIFG

Биты 15 -10 – зарезервированы.

Биты 9, 8 – TASSEL (Timer A Source Select) – комбинация
состояния этих бит определяет источник тактирования таймера.
TASSEL1
TASSEL0
Источник
0
0
TACLK
0
1
ACLK
1
0
SMCLK
1
1
INCLK

Биты 7, 6 – ID (Input Divider) - комбинация состояния этих бит
определяет коэффициент деления входного делителя таймера
ID1
ID0
Коэффициент
0
0
1/1
0
1
1/2
1
0
1/4
1
1
1/8
70
Размещено на http://www.allbest.ru/

Биты 5, 4 – MC (Mode Select) - комбинация состояния этих бит
определяет текущий режим таймера
MC1
MC0
Режим
0
0
Остановлен
0
1
Up
1
0
Continuous
1
1
Up/Down

Бит 3 – зарезервирован .

Бит 2 – TACLR (Timer A Clear) – программная установка этого бита
вызывает сброс регистра TAR в 0. Бит сбрасывается в 0 автоматически.

Бит 1 – TAIE (Timer A Interrupt Enable ) – установка/сброс этого
бита разрешает/запрещает прерывание по переполнению таймера.

Бит 0 – TAIFG (Timer A Interrupt Flag) – флаг требования
прерывания. Устанавливается аппаратно при переполнении таймера или
программно. Сбрасывается автоматически чтением регистра TAIV.
 TACCR 0, 1, 2 (Timer A Capture/Compare Register) - 16-ти разрядные
регистры захвата/сравнения. В режиме захвата в регистр автоматически
записывается содержимое TAR. В режиме сравнения содержимое этих
регистров автоматически сравнивается с содержимым TAR для генерации
внешнего события. Доступны по записи и чтению с помощью словных форм
инструкций.
 TACCTL 0, 1, 2 (Timer A Capture/compare Control) – содержат биты
управления модулей захвата/сравнения. Все три регистра имеют идентичную
структуру и доступны по записи и чтению с помощью словных форм
инструкций. Регистры содержат следующие биты
CM1, 0
CCIS1,0
SCS
SCCI
-
CAP
71
Размещено на http://www.allbest.ru/
OUTMOD 2,1,0

CCIE
CCI
OUT
COV
CCIFG
Биты 15, 14 – CM (Capture Mode) – режим модуля захвата.
Определяют тип события для срабатывания модуля захвата.
CM1
CM0
Тип события
0
0
Нет захвата
0
1
Растущий фронт
1
0
Падающий фронт
1
1
Любой фронт

Биты 13, 12 – CCIS (Capture/Compare Input Select) – выбирают
сигналы для входа модуля захвата.
CCIS1
CCIS0
Вход
0
0
CCIA
0
1
CCIB
1
0
GND
1
1
VCC

Бит 11 – SCS (Synchronize Capture Source) – синхронизация
источника захвата. Если этот бит установить в 1 то захват будет
производиться синхронно с тактом таймера, в противном случае, захват
будет произведен в момент обнаружения внешнего события.

Бит 10 – SCCI – (Synchronized Capture/Compare Input) –
синхронизированный вход модуля захвата/сравнения. В этот бит аппаратно
перезаписывается состояние выбранного входа захвата в момент генерации
сигнала EQU. Бит доступен только по чтению.

Бит 9 - зарезервирован

Бит 8 – CAP (Capture) – установка/ сброс этого бита выбирает
режим захвата или сравнения модуля соответственно.
72
Размещено на http://www.allbest.ru/

Биты 7,6,5 – OUTMOD (Output Mode) – определяют режим работы
выходов модуля сравнения.
OUTMOD2
OUTMOD1
OUTMOD0
Режим
Действие
0
0
0
Out
TACCTLx.OUT
0
0
1
Set
1 : TAR=CCRx
0
1
0
Toggle/reset
0
1
1
Set/reset
1 : TAR=CCRx, 0 : TAR=CCR0
1
0
0
Toggle
Переключение : TAR=CCRx
1
0
1
Reset
0 : TAR=CCRx
1
1
0
Toggle/set
1
1
1
Reset/set

Переключение : TAR=CCRx,
0 : TAR=CCR0
Переключение : TAR=CCRx,
1 : TAR=CCR0
0 : TAR=CCRx, 1 : TAR=CCR0
Бит 4 – CCIE (Capture/Compare Enable) – установка/сброс этого бита
разрешает/запрещает прерывания от модуля захвата/сравнения.

Бит 3 – CCI (Capture/Compare Input) – через этот бит читается
состояние входа модуля захвата, подключенное битами CCIS этого регистра.
Доступен только по чтению.

Бит 2 – OUT – содержимое этого бита определяет состояние выхода
модуля сравнения, если биты OUTMOD=0.

Бит 1 – COV (Capture Overflow) – переполнения захвата.
Устанавливается аппаратно, если при срабатывании модуля захвата,
предыдущее захваченное значение таймера не было вычитано из CCRx.
Сбрасываться бит должен программно.

Бит 0 – CCIFG (Capture/Compare Interrupt Flag) – флаг требования
прерывания.
Устанавливается
аппаратно
при
срабатывании
модуля
захвата/сравнения. Для TACCTL0 бит сбрасывается программно или
аппаратно при вхождении в прерывание. Для TACCTL1 и TACCTL2 бит
сбрасывается чтением регистра TAIV.
 TAIV (Timer A Interrupt Vector) – регистр идентификации
прерывания для таймера A и модулей TACC1 и TACC2. Регистр доступен
73
Размещено на http://www.allbest.ru/
только по чтению. В этом регистре генерируется код, позволяющий
определить источник прерывания. Возможны следующие коды содержимого
TAIV:

0 – нет прерываний;

2 – установлен флаг TACCTL1.CCIFG;

4 – установлен флаг TACCTL2.CCIFG;

10 – установлен флаг TACTL.TAIFG
Если установлены несколько флагов одновременно, в регистре будет
генерироваться меньшее значение. Вычитывание из регистра определенного
кода автоматически сбрасывает соответствующий флаг IFG. Использование
регистра TAIV дает возможность быстрого ветвления на подпрограмму
обработки прерываний. Типовая последовательность команд для обработки
прерываний различных источников таймера приведена ниже.
cc0: . . . ; ISR для TACCTL0.CCIFG
reti
TimHndl: add &TAIV, PC ; общая ISR для TACCTL1.CCIFG,
Reti ; TACCTL2.CCIFG и TACTL.TAIFG
jmp cc1
jmp cc2
nop
nop
timOvf: . . . ; начало ISR по TACTL.TAIFG
reti ; можно заменить на “ jmp TimHndl “
cc1: . . . ; начало ISR по TACCTL1.CCIFG
reti ; можно заменить на “ jmp TimHndl “
cc2: . . . ; начало ISR по TACCTL2.CCIFG
reti ; можно заменить на “ jmp TimHndl “
В данном фрагменте прерывание для модуля TACC0 подпрограмма
обработки прерывания описывается самостоятельно, так как для этого
модуля имеется собственный вектор прерывания. Для модулей TACC1,
74
Размещено на http://www.allbest.ru/
TACC2 и собственно таймера A, таблица векторов настраивается на единую
подпрограмму с адресом
управление
передается
на
TimHndl.
первую
При
возникновении
команду,
которая
прерывания
прибавляет
к
содержимому PC код TAIV. Если прерывание было от TACCTL1.CCIFG, то к
PC прибавиться 2, и управление будет передано на команду jmp cc1, которая,
в свою очередь, передаст управление на собственно подпрограмму обработки
cc1 для TACCTL1.CCIFG. Таким образом, в подпрограмме обработки
прерывания нет необходимости тестировать состояние флагов прерываний,
поскольку
используется
вычисляемый
переход.
Если
существует
значительная вероятность того, что флаги прерываний могут быть
установлены одновременно, вместо команд reti имеет смысл выполнить
команду перехода на начало ISR. В этом случае, процессор будет находиться
в прерывании до тех пор, пока не обслужит все запросы.
ПРИМЕР
Запрограммировать модули сравнения для аппаратной генерации
последовательности импульсов частотой 100 kHz, и длительностью 1 µs.
Частота SMCLK = 8 MHz.
Временная диаграмма генерации импульсов приведена на рис.5. Для
аппаратной генерации импульсов можно использовать UP-режим таймера.
Тогда период импульсов будет определяться содержимым регистра TACCR0.
Для генерации самих импульсов будем использовать модуль TACCR1 и
внешний вывод P1.2/TA1. Модуль сравнения TACCR1 может работать в
режиме Reset/Set.
Параметры T1=1 µS, T2= 1/ (100 kHz)= 10 µS.
Значение, загружаемое в регистр TACCR0 = T2/Δt, где Δt – период
тактирования таймера. Т.к. таймер должен тактироваться частотой SMCLK,
то
TACCR0 = 10 µS * 8 MHz = 80.
Значение, загружаемое в TACCR1, определится как
TACCR1 = 1 µS * 8 MHz = 8.
75
Размещено на http://www.allbest.ru/
#include <msp430x14x.h> ; подключаем файл определений
mov #4, &P1SEL ; настраиваем P1.2/TA1 для поддержки TACCR1
mov #80, &TACCR0 ; задаем период импульсов
mov #8, &TACCR1 ; задаем длительность импульсов
mov #OUTMOD_7, &TACCTL1 ; настраиваем TACC1 на режим
Reset/set,
; в msp430x14x.h определена константа
; OUTMOD_7=0Eh
mov #TASSEL+MC0+TACLR, &TACLR ;тактирование таймера от
SMCLK,
; старт таймера в UP режиме
N
CCR0
CCR1
t
t
T1
T2
Рисунок 5. Временная диаграммы генерации импульсов.
3.8 Таймер B7
Таймер B7 имеет структуру, аналогичную таймеру A3, но имеет
следующие отличия:

Разрядность таймера может быть программно задана как 8, 10, 12
или 16 разрядов.
76
Размещено на http://www.allbest.ru/

На базе таймера B реализовано 7 модулей захвата/сравнения –
TBCC0 … TBCC6.

Регистры TBCCRx имеют буфер по записи и могут быть
сгруппированы, т.е. запись данных в один из регистров приводит к
обновлению данных во всех регистрах группы.

Все выходы модулей сравнения могут быть переведены в
высокоимпедансное состояние.

Отсутствует
бит
SCCI
в
регистрах
управления
модулей
захвата/сравнения.
Общая структурная схема таймера B7 приведена на рисунке 6.
P 4 .7 /T B C L K
AC LK
T im e r B
SM C LK
P 4 .0 /T B 0
P 4 .0 /T B 0
TBCC0
A D C 1 2 sc
P 4 .1 /T B 1
TBCC1
A D C 1 2 sc
P 4 .2 /T B 2
TBCC 2
P 4 .2 /T B 2
P 4 .3 /T B 3
TBCC3
P 4 .3 /T B 3
P 4 .4 /T B 4
TBCC4
P 4 .4 /T B 4
P 4 .5 /T B 5
TBCC 5
P 4 .5 /T B 5
TBCC6
P 4 .6 /T B 6
P 4 .1 /T B 1
P 4 .6 /T B 6
AC LK
Рисунок 6. Структурная схема таймера B7
Дополнительные возможности таймера B7 дают удобные средства
построения на его базе многоканальных широтно-импульсных (ШИМ)
генераторов. В этом случае используется UP или UP/DOWN режимы
таймера. С помощью регистра TBCCR0 модуля сравнения задается несущая
частота модуляции, а содержимое TBCCRx определяет длительность
генерируемых импульсов. Изменяя содержимое регистров TBCCRx можно
динамически менять ширину импульсов в различных каналах. С помощью
таймера B7 можно, например, реализовать управление шестью ключами,
77
Размещено на http://www.allbest.ru/
включенных в стойки инверторов для трехфазной сети. Для качественного
регулирования необходимо, чтобы перестройка всех шести каналов ШИМ
проводилась одновременно. Синхронную перестройку ШИМ генератора на
базе таймера A реализовать затруднительно, т.к. программа может изменять
содержимое регистров CCR только последовательно. Для достижения
синхронности в таймере B7 используется буферирование регистров TBCCRx
и объединение их в группы.
В отличии от таймера A, регистры TBCCRx подключены к
компаратору не напрямую, а через регистры-защелки TBCLx (Timer B
Compare Latch), так, как это показано на рис. 7.
TBCCRx
TBCLx
T im e r B
C o m p a ra to r
EQU
Рисунок 7. Буферизированное подключение TBCCR
Таким образом, компаратор сравнивает текущее содержимое таймера B
не с содержимым регистра TBCCRx, а с TBCLx. Прямого доступа к
регистрам TBCLx нет, однако данные в них могут переписываться из
TBCCRx в ответ на какое-либо событие – например переход таймера через 0.
Это дает возможность в начале периода работы таймера последовательно
записать требуемые значения в регистры TBCCRx, а воспримутся эти
значения синхронно для всех каналов со следующего периода.
Еще
одна
возможность
синхронизации
многоканальных
ШИМ
заключается в объединении нескольких модулей сравнения в группы. Группа
может состоять из 2-х, 3-х или всех 7-ми модулей. Один модуль в группе
является ведущим, остальные - ведомыми. Если программа записывает новые
данные
в
регистры
TBCCRx
ведомых
модулей,
эти
данные
не
воспринимаются (не переписываются в TBCLx) до тех пор, пока не будет
78
Размещено на http://www.allbest.ru/
произведена запись в TBCCR ведущего модуля. Таким образом, данные из
TBCCRx всех модулей группы подхватываются одновременно в момент
записи TBCL ведущего модуля.
Наконец, внешние выводы всех модулей сравнения могут быть
переведены
в
высокоимпедансное
состояние
внешним
сигналом,
подключенным к выводу P5.7/TBOUTH. Для выключения выходов модулей
сравнения
необходимо
сконфигурировать
вывод
P5.7/TBOUTH
для
поддержки периферийных функций (через регистр P5SEL) и подать на него
потенциал логической единицы.
Регистры таймера B7 представлены в таблице 13.
Таблица 13
Регистр
Назначение
Адрес
TBR
Регистр содержимого таймера B
190h
TBCTL
Регистр управления таймера В
180h
TBCCR0
Регистр захвата/сравнения CC0
192h
TBCCTL0
Регистр управления CC0
182h
TBCCR1
Регистр захвата/сравнения CC1
194h
TBCCTL1
Регистр управления CC1
184h
TBCCR2
Регистр захвата/сравнения CC2
196h
TBCCTL2
Регистр управления CC2
186h
TBCCR3
Регистр захвата/сравнения CC3
198h
TBCCTL3
Регистр управления CC3
188h
TBCCR4
Регистр захвата/сравнения CC4
19Ah
TBCCTL4
Регистр управления CC4
18Ah
TBCCR5
Регистр захвата/сравнения CC5
19Ch
TBCCTL5
Регистр управления CC5
18Ch
TBCCR6
Регистр захвата/сравнения CC6
19Eh
TBCCTL6
Регистр управления CC6
18Eh
TBIV
Регистр идентификации прерывания
11Eh
 TBR (Timer B Register) –16-ти разрядный регистр текущего
содержимого таймера. Регистр доступен как для записи, так и для чтения с
помощью словных форм инструкций.
79
Размещено на http://www.allbest.ru/
 TBCTL (Timer B Control) – содержит биты управления таймера B.
Регистр доступен как для записи, так и для чтения с помощью словных форм
инструкций и содержит следующие биты.
--
TBCLGRP1,0
ID 1, 0
CNTL1,0
MC1,0
-
-
TBSSEL1,0
TBCLR
TBIE
TBIFG

Бит 15 – зарезервирован.

Биты 14, 13 – TBCLGRP (Timer B Compare Latch Group) –
группирование загрузки модулей сравнения таймера B.
TBCLGRP1
TBCLGRP0
Группы
Ведущий модуль
0
0
нет
нет
TBCC1+TBCC2
TBCC1
TBCC3+TBCC4
TBCC3
TBCC5+TBCC6
TBCC5
TBCC1+TBCC2+ TBCC3
TBCC1
TBCC4+ TBCC5+TBCC6
TBCC4
0
1
1
0
1
1

TBCC0+TBCC1+TBCC2+ TBCC3+
TBCC4+ TBCC5+TBCC6
TBCC1
Биты 12, 11 – CNTL (Counter Length) – длина счетчика.
Комбинация состояния этих бит определяет разрядность таймера B.
CNT1
CNT0
Разрядность
Макс. значение таймера
0
0
16 бит
FFFFh
0
1
12 бит
FFFh
1
0
10 бит
3FFh
1
1
8 бит
FFh

Бит 10 – зарезервирован.

Биты 9, 8 – TBSSEL (Timer B Source Select) – выбор источника
тактирования таймера B.
80
Размещено на http://www.allbest.ru/
TBSSEL1
TBSSEL0
Источник
0
0
TBCLK
0
1
ACLK
1
0
SMCLK
1
1
Инвертированный TBCLK

Биты 7, 6 – ID (Input Divider) – комбинация состояния этих бит
определяет коэффициент деления входного делителя таймера
ID1
ID0
Коэффициент
0
0
1/1
0
1
1/2
1
0
1/4
1
1
1/8

Биты 5, 4 – MC (Mode Select) - комбинация состояния этих бит
определяет текущий режим таймера
MC1
MC0
Режим
0
0
Остановлен
0
1
Up
1
0
Continuous
1
1
Up/Down

Бит 3 – зарезервирован .

Бит 2 – TBCLR (Timer B Clear) – программная установка этого бита
вызывает сброс регистра TBR в 0. Бит сбрасывается в 0 автоматически.

Бит 1 – TBIE (Timer B Interrupt Enable ) – установка/сброс этого
бита разрешает/запрещает прерывание по переполнению таймера.

Бит 0 – TBIFG (Timer A Interrupt Flag) – флаг требования
прерывания. Устанавливается аппаратно при переполнении таймера или
программно. Сбрасывается автоматически чтением регистра TBIV.
 TBCCTL 0…6 (Timer B Capture/compare Control) – содержат биты
управления модулей захвата/сравнения. Все регистры имеют идентичную
81
Размещено на http://www.allbest.ru/
структуру и доступны по записи и чтению с помощью словных форм
инструкций. Регистры содержат следующие биты
CM1, 0
CCIS1,0
OUTMOD 2,1,0

CCIE
SCS
CLLD1,0
CCI
OUT
CAP
COV
CCIFG
Биты 15, 14 – CM (Capture Mode) – режим модуля захвата.
Определяют тип события для срабатывания модуля захвата.
CM1
CM0
Тип события
0
0
Нет захвата
0
1
Растущий фронт
1
0
Падающий фронт
1
1
Любой фронт

Биты 13, 12 – CCIS (Capture/Compare Input Select) – выбирают
сигналы для входа модуля захвата.
CCIS1
CCIS0
Вход
0
0
CCIA
0
1
CCIB
1
0
GND
1
1
VCC
Для всех модулей, кроме TBCC6, комбинации CCIS – 00b и 01b –
идентичны.

Бит 11 – SCS (Synchronize Capture Source) – синхронизация
источника захвата. Если этот бит установить в 1 то захват будет
производиться синхронно с тактом таймера, в противном случае, захват
будет произведен в момент обнаружения внешнего события.

Биты 10, 9 – CLLD (Compare Latch Load) – загрузка защелок при
сравнении.
82
Размещено на http://www.allbest.ru/
Комбинация этих бит определяет событие, по которому содержимое
регистров TBCCRx перезаписывается в защелки TBCLx
CLLD1
CLLD0
Событие
0
0
Запись в TBCCRx (буферизации нет)
0
1
TBR досчитывает до 0
1
0
1
1
UP и Continuous режимы: TBR досчитывает до 0
UP/DOWN режим: TBR досчитывает до TBCL0 или до 0
TBR досчитывает до TBCLx
В том случае если модули сгруппированы (TBCTL.TBCLGRP≠0),
перезапись в TBCLx будет производиться по событию, определенному
битами CLLD ведущего модуля. У ведомых модулей биты CLLD не должны
быть равны 0, т.к. буферизация выключается. Для групповой загрузки
необходимо, чтобы была произведена запись во все регистры TBCCRx, даже
в том случае, если данные остаются неизменными.

Бит 8 – CAP (Capture) – установка/ сброс этого бита выбирает
режим захвата или сравнения модуля TBCCx соответственно.

Биты 7,6,5 – OUTMOD (Output Mode) – определяют режим работы
выходов модуля сравнения.
OUTMOD2
OUTMOD1
OUTMOD0
Режим
Действие
0
0
0
Out
TBCCTLx.OUT
0
0
1
Set
1 : TBR=CCRx
0
1
0
Toggle/reset
0
1
1
Set/reset
1 : TBR=CCRx, 0 : TBR=CCR0
1
0
0
Toggle
Переключение : TBR=CCRx
1
0
1
Reset
0 : TBR=CCRx
1
1
0
Toggle/set
1
1
1
Reset/set
Переключение : TBR=CCRx,
0 : TBR=CCR0
Переключение : TBR=CCRx,
1 : TBR=CCR0
0 : TBR=CCRx, 1 : TBR=CCR0
83
Размещено на http://www.allbest.ru/

Бит 4 – CCIE (Capture/Compare Enable) – установка/сброс этого бита
разрешает/запрещает прерывания от модуля захвата/сравнения.

Бит 3 – CCI (Capture/Compare Input) – через этот бит читается
состояние входа модуля захвата, подключенное битами CCIS этого регистра.
Бит доступен только по чтению.

Бит 2 – OUT – содержимое этого бита определяет состояние выхода
модуля сравнения, если биты OUTMOD=0.

Бит 1 – COV (Capture Overflow) – переполнения захвата.
Устанавливается аппаратно, если при срабатывании модуля захвата,
предыдущее захваченное значение таймера не было вычитано из CCRx.
Сбрасываться бит должен программно.

Бит 0 – CCIFG (Capture/Compare Interrupt Flag) – флаг требования
прерывания.
Устанавливается
захвата/сравнения.
Для
аппаратно
TBCCTL0
бит
при
срабатывании
сбрасывается
модуля
аппаратно
при
вхождении в прерывание или программно. Для TBCCTL1 … TBCCTL6 бит
сбрасывается чтением регистра TBIV.
 TBIV (Timer B Interrupt Vector) – регистр идентификации
прерывания для таймера B. Выполняет функции, аналогичные функциям
регистра TAIV (см. п.3.7). В регистре TBIV возможны следующие коды:

0 – нет прерываний;

2 – установлен флаг TBCCTL1.CCIFG;

4 – установлен флаг TBCCTL2.CCIFG;

6 – установлен флаг TBCCTL3.CCIFG;

8 – установлен флаг TBCCTL4.CCIFG;

10 – установлен флаг TBCCTL5.CCIFG;

12 – установлен флаг TBCCTL6.CCIFG;

14– установлен флаг TBCTL.TAIFG.
84
Размещено на http://www.allbest.ru/
3.9 Интерфейс USART
Интерфейс USART (Universal Synchronous/Asynchronous ReceiverTransmitter) -универсальный синхронно-асинхронный приемопередатчик предназначен для обмена данными между микроконтроллером и внешними
устройствами.
Микросхема MSP430F149 содержит два идентичных модуля - USART0
и USART1. Каждый модуль поддерживает три режима:

Универсальный асинхронный приемопередатчик UART;

Синхронный периферийный интерфейс SPI (Serial Peripheral
Interface);

Интерфейс I2C (Inter Integrated Circuits control).
Для всех трех поддерживаемых режимов используется один набор
регистров, однако их содержимое может меняться в зависимости от режима.
Перечень регистров USART приведен в таблице 13. Ко всем регистрам
USART можно обращаться только с помощью байтовых форм инструкций.
Таблице 13
Имя
Назначение регистра
Адрес
Нач.значен.
U0CTL
Управление USART0
70h
1
U0TCTL
Управление передатчика USART0
71h
1
U0RCTL
Управление приемника USART0
72h
0
U0BR0
Управление скоростью USART0 мл. байт
74h
-
U0BR1
Управление скоростью USART0 ст. байт
75h
-
U0MCTL
Управление модулятора USART0
73h
-
U0RXBUF
Буфер приемника USART0
76h
-
U0TXBUF
Буфер передатчика USART0
77h
-
ME1
Разрешение приемника/передатчика USART0
4
0
E1
Разрешение прерывания USART0
0
0
IFG1
Флаги прерывания USART0
2
82h
U1CTL
Управление USART1
78h
1
U1TCTL
Управление передатчика USART1
79h
1
U1RCTL
Управление приемника USART1
7Ah
0
U1BR0
Управление скоростью USART1 мл. байт
7Ch
-
85
Размещено на http://www.allbest.ru/
U1BR1
Управление скоростью USART1 ст. байт
7Dh
-
U1MCTL
Управление модулятора USART1
7Bh
-
U1RXBUF
Буфер приемника USART1
7Eh
-
U1TXBUF
Буфер передатчика USART1
7Fh
-
ME2
Разрешение приемника/передатчика USART1
5
0
E2
Разрешение прерывания USART1
1
0
IFG2
Флаги прерывания USART1
3
20h
3.9.1 Режим UART
В этом режиме USART обеспечивает работу согласно популярным
протоколам RS232, RS485 и др. USART подключается к внешним
устройствам через два вывода: URXD – вход приемника, UTXD – выход
передатчика.
В этом режиме обеспечиваются следующие характеристики:

Кадр данных длинной 7 или 8 бит с контролем или без контроля
четности;

Независимые сдвиговые регистры для приемника и передатчика;

Независимые буферные регистры для приемника и передатчика;

Аппаратная
поддержка
коммуникационных
протоколов
для
многопроцессорных систем;

Программируемая скорость передачи;

Внутреннее или внешнее тактирование;

Независимые вектора прерывания для приемника и передатчика.
Данные передаются/принимаются с помощью кадров, состоящих из
следующей последовательности бит:

Стартовый бит – всегда низкий уровень;

7 или 8 информационных бит;

Адресный
бит,
используемый
для
коммуникации
в
многопроцессорных системах (опционально);
86
Размещено на http://www.allbest.ru/

Бит паритета – устанавливается в зависимости от того четное или
нечетное количество логических единиц содержит информационное поле
(опционально);

Один или два стоповых битов – всегда высокий уровень.
3.9.1.1 Передача данных
Передача данных инициируется записью передаваемых данных в
буферный регистр передатчика UTXBUF. Из буферного регистра данные
автоматически перезаписываются в выходной сдвиговый регистр, который
выдвигает их через вывод микроконтроллера UTXD младшим битом вперед,
опционально дополняя информационные биты адресным битом и/или битом
паритета и обрамляя кадр стартовым и стоповым битами. На линии UTXD
каждый бит удерживается в течение времени, определяемой текущей
битовой скоростью, которая, в свою очередь, зависит от частоты
тактирования UART и содержимого регистра UBR (USART Baud Rate).
После
копирования
данных
в
сдвиговый
регистр
аппаратно
устанавливается флаг UTXIFGx в регистрах IFG1 или IFG2 (см. п.3.2),
информируя пользователя, что буфер свободен и может принять следующий
байт. Не дожидаясь окончания физической передачи первого кадра, в буфер
UTXBUF может быть записан следующий байт. Как только первый байт,
включая стоп-биты, будет выдвинут через вывод UTXD, второй байт,
находящийся в UTXBUF, будет автоматически скопирован в сдвиговый
регистр и начнется передача следующего кадра. Таким образом, за счет
буферирования, осуществляется непрерывная передача данных кадр за
кадром.
3.9.1.2 Передача данных
Прием последовательных данных производится через вывод URXD
микроконтроллера. Приемник UART ожидает перепад напряжения 1→ 0 на
входе URXD. После того, как перепад обнаружен, приемник включает свой
87
Размещено на http://www.allbest.ru/
тактовый генератор и выдерживает время, равное половине длительности
одного бита. По прошествии этого интервала времени приемник трижды
измеряет напряжение на линии. Если хотя бы два результата измерения
оказались нулевыми, принимается решение, что зафиксирован стартовый
бит. Если были зарегистрировано две или более логические единицы,
принимается решение, что перепад на входе URXD является следствием
шумов на линии. В этом случае приемник переходит в фазу ожидания
следующего старт-бита.
В том случае, если был опознан правильный старт-бит, сдвиговый
регистр приемника начинает принимать данные. Через время, равное
длительности одного бита, производится троекратное измерение потенциала
на линии. Решение о состоянии бита производится по мажоритарному
принципу. После приема всего кадра данных производится контроль стопбита. Если его значение оказалось равным нулю, в регистре управления
приемника UART выставляется флаг ошибки кадра FE. Если использовался
бит паритета и зафиксирована ошибка четности, выставляется флаг ошибки
четности PE.
После
приема
всего
кадра,
данные
из
сдвигового
регистра
переписываются в буфер приемника URXBUF, а в регистре IFG1/IFG2
устанавливается флаг URXIFGx, сигнализирующий о принятом байте. До
того как полученный байт будет вычитан из буфера, сдвиговый регистр
способен принимать следующие данные. Однако если данные из буфера не
будут вычитаны к моменту перезаписи байта из сдвигового регистра в буфер
приемника, в статусном регистре приемника устанавливается флаг OE,
сигнализируя о потере данных.
3.9.1.3 Поддержка коммуникации в многопроцессорных системах
С помощью UART можно организовать обмен данными между
несколькими
микроконтроллерами,
используя,
например,
аппаратный
интерфейс RS485. Не вдаваясь в тонкости аппаратной реализации RS485,
88
Размещено на http://www.allbest.ru/
укажем, что все микроконтроллеры (абоненты) объединяются в локальную
информационную сеть. При этом каждый передатчик одного абонента может
быть соединен с приемниками всех других абонентов. Передачу всегда ведет
один абонент с помощью блоков кадров (пакетов), а прием этих блоков
осуществляют все абоненты сети. Для того чтобы абонент-получатель
определил, что пакет предназначен именно для него, первый байт пакета, как
правило, содержит информацию об адресе получателя. Если абонентполучатель распознал свой адрес, он принимает весь пакет, в противном
случае пакет игнорируется. Поэтому для производительной работы в
локальной сети необходим эффективный механизм распознавания начала
информационного пакета. Для этих целей UART микроконтроллеров MSP430
поддерживает два механизма: использование адресного бита (address bit) и
режим свободной линии (idle line).
Для режима idle line необходимо, чтобы пауза вежду последовательно
передаваемыми кадрами в пакете не превышала длительности одного кадра.
При получении первого кадра после паузы в регистре управления приемника
аппаратно устанавливается бит RXWAKE, сигнализируя, что принят
адресный байт. Программная установка другого бита этого регистра RXWIE
позволяет приемнику игнорировать все не адресные байты (бит RXIFG не
устанавливается).
Таким
образом,
абонент-получатель
нормально
устанавливает бит RXWIE и ожидает получения первого байта, после чего
сравнивает его содержимое с собственным адресом. Если адрес опознан, он
сбрасывает бит RXWIE и принимает далее весь пакет. После приема
адресованного ему пакета бит RXWIE взводится опять. В том случае, если
адрес не опознан, RXWIE не сбрасывается, следовательно, остальные байты
пакета отбрасываются приемником.
Для генерации абонентом-отправителем точного периода простоя на
своей линии UTXD имеется специальный бит TXWAKE в регистре
управления передатчика. Абонент-отправитель должен дождаться готовности
передатчика (бит TXIFG должен быть установлен), установить в 1 бит
89
Размещено на http://www.allbest.ru/
TXWAKE, после чего записать произвольные данные в буфер UTXBUF. Т.к.
бит TXWAKE установлен, физически данные передаваться не будут, но по
окончанию длительности передачи кадра будет взведен флаг TXIFG, после
чего можно передавать адресный байт. Бит TXWAKE сбрасывается
автоматически после передачи паузы.
Логика работы локальной сети в режиме address bit очень похожа на
режим idle line с той лишь разницей, что маркирование адресного байта
производится не паузой при передаче пакетов, а наличием дополнительного
бита в кадре, установленного в 1, в то время как все данные передаются со
сброшенным адресным битом. Логика работы с битами RXWAKE и RXWIE
аналогична вышеизложенной. Для того чтобы пометить начало пакета
абонент-отправитель должен просто перед посылкой первого байта
установить в 1 бит TXWAKE.
3.9.1.4 Обнаружение стартового бита при приеме
В том случае, если необходимо вести прием данных при выключенном,
с целью снижения потребления, тактировании UART, имеется механизм,
позволяющий получить прерывание при поступлении стартового бита на
вход приемника. Для этого используется бит URXSE, расположенный, как
это не странно, в регистре управления передатчика. В том случае, если
URXSE=1, разрешено прерывание по приему и на линию URXD приходит
фронт стартового бита, берется прерывание с адресом готовности приемника.
Подпрограмма
обработки
прерывания
может
определить
причину
возникновения прерывания по состоянию бита URXIFG. Если этот бит равен
нулю, следовательно, обнаружен фронт старт бита, в противном случае, был
принят очередной символ приемником UART. Определение фронта стартбита дает возможность подпрограмме обработки прерывания активизировать
тактировании UART для нормального приема всего кадра.
90
Размещено на http://www.allbest.ru/
3.9.1.5 Скорость передачи
Генератор скорости приема/передачи способен создавать стандартные
скорости при нестандартных частотах тактирования UART. Максимальная
скорость приема/передачи составляет одну треть от частоты источника
тактирования.
Генерация нужной частоты проводится в две стадии. На первой стадии
используется 16-ти разрядный делитель частоты тактирования UBR,
состоящий из двух регистров UBR0 (младший байт) и UBR1 (старший байт).
На второй стадии задействуется 8-ми разрядный модулятор UMCL.
В первом приближении скорость передачи в бодах определяется по
формуле
Baud=BRCLK/N
где
BRCLK – частота тактирования UART в герцах;
N – содержимое регистра UBR.
Программистам, однако, гораздо чаще приходится сталкиваться с
обратной задачей - для заданной частоты тактирования и желаемой скорости
приема/передачи необходимо определить содержимое UBR. Очевидно, что
N=BRCLK/B.
Однако, возможна ситуация, когда вычисленная величина N не
является целочисленным значением. Например, если требуется стандартная
скорость Baud=115.2 kb/s при BRCLK=1 Mhz, получим
N=1000/115.2=8.68
Для загрузки данных в UBR полученное значение придется округлить
до 9. В этом случае действительная скорость приема/передачи составит 111.1
kb/s, в то время как внешнее устройство, подключенное к UART, будет
91
Размещено на http://www.allbest.ru/
работать на скорости 115.2 kb/s. Отсюда возникает вопрос, насколько точно
нужно согласовывать скорости передатчика на одной стороне и приемника на
другой, чтобы данные принимались без ошибок. В первом приближении
можно сказать, что скорости приемника и передатчика должны быть
согласованы с точностью δ не хуже
δ ≤50%/n, где n – длина кадра.
Т.е. если используется 10-ти битный кадр (8 бит данных, старт и стоп
биты), погрешность не должна превосходить 5%. Другими словами,
погрешность округления полученного коэффициента деления не должна, в
данном случае, быть больше 5%.
В нашем примере погрешность округления составит δ = 100% *(98.68)/8.68 ≈ 3.7 %, следовательно, приемник будет правильно воспринимать
данные, посланные передатчиком.
Отдельный интерес представляет случай, когда необходимо, чтобы
микроконтроллер работал на низкой частоте (типовой случай – тактирование
частотой 32768 Hz) и, в тоже время, передавал/принимал данные на
стандартной скорости, например 9600 b/s. Для этого случая получим
N=32768/9600 = 3.41 и погрешность округления
δ = 100%*(3.41-3)/3.41=12.1 %
Действительная скорость передачи составит B = 32768/3 = 10922 b/s.
Понятно, что полученные значения является неприемлемыми.
Для того чтобы получить высокую заданную скорость передачи
данных при низких частотах тактирования используется модулятор. Работа
модулятора
управляется
данными,
записанными
в
него.
По
мере
передачи/приема битов сдвиговым регистром, содержимое модулятора также
просматривается бит за битом, начиная с младшего. В том случае, если
текущий бит модулятора равен 0, используется коэффициент деления UBR, в
противном случае используется коэффициент деления, равный UBR+1.
92
Размещено на http://www.allbest.ru/
Таким образом, происходит подстройка длительности каждого бита в кадре.
Если количество битов в кадре больше 8, как чаще всего и бывает, просмотр
содержимого UMCL опять начинается с младшего бита.
Для того, чтобы определить требуемые значения в UBR и UMCL
коэффициент деления N представляется формулой
N=UBR+1/n*Σmi
где
UBR – содержимое регистра UBR:
n – длина кадра;
mi – состояние (0 или 1) i-го бита, записанного в модулятор UMCL.
Другими словами, содержимое UBR и сумма всех единиц в UMCL,
отнесенных на длину кадра, должна как можно точнее соответствовать
желаемому коэффициенту деления.
Упрощенная методика определения содержимого UBR и UMCL
заключается в следующем. В рассчитанном значении N отбрасывается
дробная часть и определяется количество 1, содержащееся в модуляторе.
После этого для получения кода UMCL эти единицы более или менее
равномерно расставляются в 8-ми битном поле содержимого UMCL. Следует
помнить, что для 10-ти битного кадра 2 младших бита UMCL будут
использованы дважды.
Приведем
пример
расчета
содержимого
UBR
и
UMCL
для
вышеприведенного случая.
N=32768/9600 = 3.4133
Значение делителя составит UBR0=3, UBR1=0.
Σmi =n*(N-UBR)=10*(3.4133-3)=4.133 ≈ 4
Расставляем единицы модулятора на длине 10-ти битного поля
93
Размещено на http://www.allbest.ru/
№ бита кадра
0
1
2
3
4
5
6
7
8
9
№ бита UMCL
0
1
2
3
4
5
6
7
0
1
Значение
1
0
0
1
0
0
1
0
1
0
Из приведенных данных видно, что на длине кадра располагаются 4
единицы, хотя при таком раскладе, UMCL будет содержать только три
единицы. Читая код UMCL справа налево, получим значение 01001001b
=45h.
Таким образом, получен дробный коэффициент деления M=3+4/10=3.4,
при этом ошибка скорости составит δ = 100% * (3.4133 – 3.4)/3.4133 = 0.39%,
а фактическая скорость B=32768/3.4=9638 b/s.
3.9.1.6 Регистры USART
 UxCTL (USART Control) – содержит биты управления USART.
PENA
PEV

Бит
SPB
7
CHAR
–
LISTEN
PENA
SYNC
(Parity
MM
Enable)
SWRS
–разрешение
паритета.
Установка/сброс этого бита включает/выключает контроль четности единиц
в кадре.

Бит 6 – PEV (Parity Even) – четность паритета. Установка/сброс
этого бита выбирает паритет четности/нечетности в том случае, если паритет
разрешен.

Бит 5 – SPB (Stop Bit) - состояние этого бита задает количество
стоп-битов в конце кадра:
0 – 1 стоп бит,
1 – 2 стоп бита.

Бит 4 – CHAR (Character) – определяет длину информационного
поля кадра:
0 – 7 битов,
1 – 8 битов.
94
Размещено на http://www.allbest.ru/

Бит 3 – LISTEN – прослушивание. Установка этого бита
подключает выход UTXD ко входу URXD внутри USART, что дает
возможность приемнику прослушивать данные, передаваемые собственным
передатчиком.

Бит 2 – SYNC (Synchronous) – должен быть сброшен для задания
режима UART.

Бит 1 – MM (Multiprocessor Mode) – установка/сброс этого бита
задает режим многопроцессорного протокола:
0 – режим свободной линии – idle line,
1 – режим адресного бита – address bit.

Бит 0 – SWRS (Software Reset) – программный сброс. Установка
этого бита в 1 производит программный сброс аппаратуры USART в
исходное состояние, 0 – разрешает работу USART.
 UxTCTL
(USART
Control)
–
содержит
биты
управления
передатчика USART.
-
CKPL
SSEL1,0
URXSE
TXWAKE
-
TEXP

Бит 7 – зарезервирован.

Бит 6 – CKPL (Clock Polarity) – выбор полярности тактирования при
использовании внешнего тактового сигнала UCLK. Установка этого бита
инвертирует тактирующий сигнал.

Биты 5,4 – SSEL (Source Select) – комбинация этих бит задает
источник тактирования USART
SSEL1
SSEL0
Источник
0
0
Внешний UCLK
0
1
ACLK
1
0
SMCLK
1
1
SMCLK
95
Размещено на http://www.allbest.ru/

Бит 3 – URXSE (UART Receive Start Edge) – контроль фронта
стартового бита. Установка/сброс этого бита разрешает/запрещает реакцию
на фронт стартового бита (см. п. 3.9.1.4).

Бит 2 – TXWAKE (Transmitter Wake) – пробуждение передатчика.
При установке этого бита следующий кадр посылается как адресный.
Сбрасывается автоматически.

Бит 1 – зарезервирован.

Бит 0 – TXEPT ( Transmitter Empty) – передатчик пуст.
Устанавливается в 1 аппаратно в том случае если UTXBUF и сдвиговый
регистр не содержит данных, в противном случае сбрасывается.
 UxRCTL (USART Control) – содержит биты управления приемника
USART.
FE
PE

OE
BRK
URXEIE
URXWIE
RXWAKE
RXERR
Бит 7 – FE (Frame Error) – ошибка кадра. Устанавливается
аппаратно, если принятый стоп-бит равен 0. Сбрасывается программно или
чтением URXBUF.

Бит 6 – PE (Parity Error) – ошибка паритета. Устанавливается
аппаратно, если было обнаружено несоответствие единиц в полученном
кадре и состоянием бита паритета. Сбрасывается программно или чтением
URXBUF.

Бит
5
–
OE
(Overrun
Error)
–
ошибка
переполнения.
Устанавливается аппаратно если при копировании данных из сдвигового
регистра в URXBUF, старые данные не были вычитаны из буфера.
Сбрасывается программно или чтением URXBUF.

Бит 4 – BRK (Break) – разрыв линии. Устанавливается аппаратно,
если приемник обнаружил 10 или более нулевых битов на входе URXD.
Сбрасывается программно или чтением URXBUF.
96
Размещено на http://www.allbest.ru/

Бит 3 – URXEIE (Receive Erroneous-character Interrupt Enable) –
разрешение
прерывания
при
Устанавливается/сбрасывается
для
приеме
ошибочного
символа.
разрешения/запрещения
приема
ошибочных символов – т.е. символов, прием которых вызвал установку
битов 7,6,5 этого регистра. Если этот бит сброшен, прием символа с
ошибками не устанавливает флаг URXIFG.

Бит 2 – URXWIE (Receive Wake-up Interrupt Enable) – разрешение
прерывания при получении адресного байта. При установке этого бита
принимаются (устанавливается флаг URXIFG) только адресные байты. При
сбросе бита принимаются все байты.

Бит 1 – RXWAKE (Receive Wake-up) – прием адресного байта.
Устанавливается аппаратно при приеме адресного байта. Сбрасывается
аппаратно при приеме байта данных.

Бит 0 – RXERR (Receive Error) – ошибка приема. Устанавливается
аппаратно, если установлен любой из флагов ошибок (FE,PE,OE,BRK).
Сбрасывается чтением URXBUF.
 UxMCTL
(USART
Control)
–
содержит
биты
управления
модулятора USART (см. 3.9.1.5).
 UxBR0 (Baud Rate) – младший байт делителя частоты тактирования
UART.
 UxBR1 (Baud Rate) – старший байт делителя частоты тактирования
UART.
 UxTXBUF (Transmit Buffer) – буферный регистр передатчика.
 UxRXBUF (Transmit Buffer) – буферный регистр приемника
 ME1 (Module Enable 1) – содержит биты разрешения приемника и
передатчика USART0.
UTXE0
URXE0
-
97
Размещено на http://www.allbest.ru/

Бит 7 – UTXE0 (USART0 Transmit Enable). Установка/сброс этого
бита разрешает/запрещает передатчик USART0.

Бит 6 – URXE0 (USART0 Receive Enable). Установка/сброс этого
бита разрешает/запрещает приемник USART0.

Биты 5…0 – зарезервированы.
 ME2 (Module Enable 2) – содержит биты разрешения приемника и
передатчика USART1.
-
UTXE1
URXE1
-

Биты 7,6 – зарезервированы.

Бит 5 – UTXE1 (USART1 Transmit Enable). Установка/сброс этого
бита разрешает/запрещает передатчик USART1.

Бит 4 – URXE1 (USART1 Receive Enable). Установка/сброс этого
бита разрешает/запрещает приемник USART1.

Биты 3…0 – зарезервированы.
 IE1 (Interrupt Enable 1) – содержит биты разрешения прерываний
для USART0 (см. п.3.2).
 IE2 (Interrupt Enable 2) – содержит биты разрешения прерываний
для USART1 (см. п.3.2).
 IFG1 (Interrupt Flag 1) – содержит флаги прерываний для USART0
(см. п.3.2).
 IFG2 (Interrupt Flag 2) – содержит флаги прерываний для USART1
(см. п.3.2).
ПРИМЕР
Принять 100 байт данных с помощью UART0 и записать их в ОЗУ,
начиная с адреса 200h. Скорость передачи данных - 115.2 kb/s, формат – 8
бит, один стоп бит, частота SMCLK – 8 MHz.
Рассчитаем коэффициент деления частоты SMCLK для обеспечения
требуемой скорости.
98
Размещено на http://www.allbest.ru/
N=8000/115.2=69.4≈69
Погрешность скорости δ=100% * (69.4-69)/69.4≈0.6 %, следовательно
модулятор можно не использовать.
bis.b #SWRST+CHAR, &U0CTL ; устанавливаем программный
; сброс, режим 8 бит
mov.b #SSEL1, &U0TCTL ; тактирование от SMCLK
mov.b #69, &U0BR0 ; установка скорости приема
mov.b #0, &U0BR1
mov.b #0, &U0MCTL
bis.b #URXE0, &ME1 ; разрешение приема
bic.b #URXIE0, &IE1 ; запрет прерываний
bic.b #SWRST, &U0CTL ; очистка программного сброса
bis.b #40h, &P3SEL ; вывод P3.5/U0RXD для
; поддержки UART0
mov #200h, R12 ; настраиваем указатель
wait: bit.b #URXIFG0, &IFG1 ; ожидание поступления кадра
jz wait
mov.b &U0RXBUF, 0(R12) ; сохранение данных в ОЗУ
inc R12 ; наращивание указателя
cmp #200h+100, R12 ; все данные приняты?
jne wait ; если нет, то цикл
3.9.2 Режим SPI
Последовательный периферийный интерфейс SPI (Serial Peripheral
Interface) обеспечивает высокоскоростной синхронный обмен данными
между двумя микроконтроллерами или другими внешними устройствами. В
обмене данными всегда принимают участие ведущее (master) и ведомое
(slave) устройства. Для интерфейса используются следующие сигналы:

SIMO (Slave Input, Master Output) – вход ведомого, выход ведущего;

SOMI (Slave Output, Master Input) –выход ведомого, вход ведущего;
99
Размещено на http://www.allbest.ru/

UCLK (USART Clock) – сигнал тактирования;

STE (Slave Transmit Enable) – вход разрешение передачи ведомого,
опциональный сигнал используется только в 4-х проводном режиме.
Для обмена данными через интерфейс SPI необходимо одноименные
сигналы SIMO, SOMI и UCLK ведущего и ведомого устройств соединить
между собой. Обмен данными начинается после того, как в буфер ведущего
устройства UTXBUF записываются данные. В том случае, если сдвиговый
регистр передатчика пуст, эти данные копируется в него, и мастер начинает
выдвигать их на линию SIMO бит за битом начиная со старшего. При этом
ведущее устройство для каждого информационного бита генерирует
синхроимпульс на линии UCLK. Одновременно с передачей данных, ведущее
устройство принимает данные, присутствующие на линии SOMI, задвигая их
в сдвиговый регистр приемника. После того, как был передан/принят
информационный
кадр,
данные
из
сдвигового
регистра
приемника
переписываются в буфер RXBUF.
Устройство, сконфигурированное как ведомое, используя тактовые
импульсы ведущего устройства, принимает от него данные, одновременно
передавая данные своего буфера. Таким образам, после окончания передачи
данных, содержимое буферов ведущего и ведомого устройств меняются
местами.
В том случае, если используется 3-х проводной SPI, вывод STE не
оказывает влияние на работу интерфейса. При 4-х проводном интерфейсе
логика работы входного сигнала STE заключается в следующем:

Устройство сконфигурировано как master. Если на вход STE подано
напряжение высокого уровня, интерфейс работает нормально. Если на вход
подается логический 0, это означает, что другое устройство желает стать
ведущим, поэтому выводы SIMO и UCLK переключаются на ввод, а SOMI –
на вывод.

Устройство сконфигурировано как slave. Если на вход STE подан
логический 0, интерфейс работает нормально. Если на вход STE подать
100
Размещено на http://www.allbest.ru/
логическую единицу, все линии SPI переключаются на ввод, и интерфейс
выключается.
Битовая скорость определяется содержимым регистров UBR0 и UBR1
ведущего устройства и определяется формулой
Baud=BRCLK/UBR,
где
BRCLK – частота тактирования USART.
Максимальная битовая скорость, генерируемая мастером не должна
превышать BRCLK/2. Максимальная битовая скорость для ведомого
устройства не должна превышать BRCLK. Модулятор для интерфейса SPI не
используется,
поэтому
рекомендуется
держать
содержимое
регистра
UxMCTL равное 0.
Управление SPI осуществляется с помощью следующих регистров.
 UxCTL (USART Control) – содержит биты управления USART.
-
I2C
CHAR
LISTEN
SYNC
MM
SWRS

Биты 7,6 – зарезервированы.

Бит 5 – I2C – должен быть установлен в 0, для работы USART в
режиме SPI.

Бит 4 – CHAR (Character) – определяет длину информационного
поля кадра:
0 – 7 битов,
1 – 8 битов.

Бит 3 – LISTEN – прослушивание. Установка этого бита
подключает выход SIMO ко входу приемника внутри USART, что дает
возможность приемнику прослушивать данные, передаваемые собственным
передатчиком.
101
Размещено на http://www.allbest.ru/

Бит 2 – SYNC (Synchronous) – должен быть установлен в 1 для
задания режима SPI.

Бит 1 – MM (Master Mode) – установка/сброс этого бита задает
режим ведущего/ведомого устройства SPI.

Бит 0 – SWRS (Software Reset) – программный сброс. Установка
этого бита в 1 производит программный сброс аппаратуры USART в
исходное состояние, 0 – разрешает работу SPI.
 UxTCTL
(USART
–
Control)
содержит
биты
управления
передатчика USART.
CKPH
CKPL

SSEL1,0
-
STC
TEXP
Бит 7 – CKPH (Clock Phase) –фаза тактирования на выводе UCLK
(см. рис.8).
0 – нормальное тактирование;
1 – сдвиг тактирования на половину периода длительности такта.

Бит 6 – CKPL (Clock Polarity) – выбор полярности тактирования
тактового сигнала UCLK . (см. рис.8)
0 – неактивный уровень низкий,
1 – неактивный уровень высокий.

Биты 5,4 – SSEL (Source Select) – комбинация этих бит задает
источник тактирования USART
SSEL1
SSEL0
Источник
Режим
0
0
Внешний UCLK
Только slave
0
1
ACLK
Только master
1
0
SMCLK
Только master
1
1
SMCLK
Только master

Бит 3,2 –зарезервированы.
102
Размещено на http://www.allbest.ru/

Бит 1 – STC (Slave Transmit Control) – управление передачей
ведомого. Установка/сброс этого бита задает 3-х проводный (STE запрещен)
или 4-х проводный (STE разрешен) режимы работы SPI соответственно.

Бит 0 – TXEPT (Transmitter Empty) – устанавливается в 1 аппаратно
в том случае если TXBUF и сдвиговый регистр не содержит данных, в
противном случае сбрасывается.
C KPL=0
CKPH=0
t
C KPL=1
C KPH =0
t
C KPL=0
C KPH =1
t
C KPL=1
C KPH =1
t
S IM O
MSB
6
5
4
3
2
1
LSB
SOMI
MSB
6
5
4
3
2
1
LSB
t
Рисунок 8. Временная диаграмма работы SPI
 UxRCTL (USART Control) – содержит биты управления приемника
USART.
FE
-
OE
-

103
Размещено на http://www.allbest.ru/

Бит 7 – FE (Frame Error) – ошибка кадра. Устанавливается
аппаратно, если в 4-х проводной конфигурации и режиме master обнаружен
перепад 10 на линии STE. Сбрасывается программно.

Бит 6 – зарезервирован.

Бит
5
–
OE
(Overrun
Error)
–
ошибка
переполнения.
Устанавливается аппаратно если при копировании данных из сдвигового
регистра в URXBUF, старые данные не были вычитаны из буфера.
Сбрасывается программно или чтением URXBUF.

Биты 4…0 – зарезервирован.
 UxBR0 (Baud Rate) – младший байт делителя частоты тактирования
SPI.
 UxBR1 (Baud Rate) – старший байт делителя частоты тактирования
SPI.
 UxTXBUF (Transmit Buffer) – буферный регистр передатчика.
 UxRXBUF (Transmit Buffer) – буферный регистр приемника
 ME1 (Module Enable 1) – содержит биты разрешения приемника и
передатчика USART0.
-
USPIE0
-

Бит 7 – зарезервирован.

Бит 6 – USPIE0 (USART0 SPI Enable). Установка/сброс этого бита
разрешает/запрещает USART0 в режиме SPI.

Биты 5…0 – зарезервированы.
 ME2 (Module Enable 2) – содержит биты разрешения приемника и
передатчика USART1.
-
USPIE1

-
Биты 7…5 – зарезервированы.
104
Размещено на http://www.allbest.ru/

Бит 4 – USPIE1 (USART1 SPI Enable). Установка/сброс этого бита
разрешает/запрещает USART1 в режиме SPI.

Биты 3…0 – зарезервированы.
 IE1 (Interrupt Enable 1) – содержит биты разрешения прерываний
для USART0 (см. п.3.2).
 IE2 (Interrupt Enable 2) – содержит биты разрешения прерываний
для USART1 (см. п.3.2).
 IFG1 (Interrupt Flag 1) – содержит флаги прерываний для USART0
(см. п.3.2).
 IFG2 (Interrupt Flag 2) – содержит флаги прерываний для USART1
(см. п.3.2).
3.9.3 Режим I2C
USART
в
микроконтроллером
режиме
MSP430
I2C
и
обеспечивает
интерфейс
I2C–совместимыми
между
устройствами,
подключенными через 2-х проводную последовательную шину. Поддержка
режима I2C реализована только в USART0. I2C контроллер обеспечивает
следующие характеристики:

поддержка спецификации I2C v2.1 Philips Semiconductor
- Формат передачи байт/слово;
- 7-разрядный и 10-разрядный режимы адресации устройств;
- Общий вызов;
- Старт/рестарт/стоп;
- Режим ведущий передатчик/ведомый приемник;
- Режим ведущий приемник/ведомый передатчик;
- Поддержка стандартного режима до 100 кбод и быстрого режима до
400
кбод;

Встроенная память FIFO для буферирования чтения и записи

Программируемый генератор скорости;
105
Размещено на http://www.allbest.ru/

16-разрядный доступ к данным для увеличения пропускной
способности шины;

Автоматический подсчет количества байт данных

Возможность работы в режимах пониженного энергопотребления;

Расширенные возможности прерываний
Контроллер
работоспособность
I2C
имеет
достаточно
обеспечивается
рядом
сложную
структуру,
дополнительных
его
регистров
управления. В данном документе работа USART в режиме I2C не
рассматривается.
Для
детального
рассмотрения
работы
контроллера
обращайтесь к www.ti.com.
3.10 Аналоговый компаратор
Аналоговый компаратор предназначен для преобразования разности
входных
аналоговых
неинвертирующем
напряжений
входе,
в
помеченным
цифровую
символом
форму.
“+”,
Если
на
аналоговое
напряжение больше, чем на инвертирующем, помеченным символом “-”,
выход компаратора CAOUT устанавливается в состояние логической
единицы, в противном случае – в состояние логического нуля.
Структурная схема компаратора изображена на рис. 9.
Входы аналогового компаратора могут программно подключаться к
внешним выводам микроконтроллера с помощью битов управления P2CAx.
С помощью битов управления CAEX можно менять схему подключения
физических входов компаратора к внешним выводам микроконтроллера, при
этом одновременно производится инвертирование выхода компаратора. В
некоторых случаях использование этого переключателя дает возможность
компенсировать собственное напряжение смещения компаратора.
В состав аналогового компаратора входит источник опорного
напряжения.
Опорное
напряжение
источника
можно
с
помощью
управляющего бита CARSEL подключить к одному или другому входу
106
Размещено на http://www.allbest.ru/
компаратора. С помощью битом управления CAREF можно выбрать
величину опорного напряжения, соответствующую Vcc/2, Vcc/4 или
фиксированному напряжению, приблизительно равному 0.5 V. С помощью,
битов CAREF можно также отключить источник опорного напряжения.
Vcc
P2C A 0
CAEX
P 2 .3 /C A 0 /T A 1
CAON
CA0
CAF
P2C A 1
P 2 .4 /C A 1 /T A 2
+
C C I1 B
CAEX
CAEX
P 2 .2 /C A O U T /T 0
CA1
R
-
C
Vcc
CARSEL
CAREF
V cc / 2
V cc / 4
Рисунок 9. Структурная схема аналогового компаратора
В том случае если входные аналоговые напряжения меняются
медленно, в момент равенства этих напряжений возможно многократное
срабатывание компаратора. В некоторых случаях этот эффект можно
подавить, подключив на выход компаратора встроенный RC фильтр с
помощью бита CAF. Время срабатывания компаратора составляет около 200
ns, если фильтр не включен, и порядка 1.5 µs при включенном фильтре.
Выходной сигнал компаратора можно вывести на внешний вывод
микроконтроллера P2.2/CAOUT/TA0 с помощью установок в регистре
P2SEL, или использовать в качестве входа для модуля захвата/сравнения
TACC1 (см. п. 3.7).
С целью минимизации потребления аналоговый компаратор может
быть выключен битом CAON. В активном режиме компаратор и источник
опорного напряжения потребляю ток в 45 µA каждый.
107
Размещено на http://www.allbest.ru/
Регистры аналогового компаратора представлены в таблице 14.
Таблица 14
Имя
Назначение регистра
Адрес
Нач.значен.
CACTL1
Регистр управления 1
59h
0
CACTL2
Регистр управления 2
5Ah
0
5Bh
0
Регистр отключения цифровых
CAPD
формирователей
 CACTL1 (Comparator A Control) – содержит биты управления
компаратора.
CAEX
CARSEL

CAREF1, 0
CAON
CAIES
CAIE
CAIFG
Бит 7 – CAEX (Comparator Exchange) – изменение подключения.
0 – неивертирующий вход соответствует выводу CA0,
инвертирующий вход соответствует выводу CA1;
1 – неивертирующий вход соответствует выводу CA1,
инвертирующий вход соответствует выводу CA0;

Бит 6 – CARSEL (Comparator Reference Select) – выбор
подключения опоры.
0 – опорное напряжение подключено к входу CA0;
1 – опорное напряжение подключено к входу CA1.

Биты 5,4 – CAREF (Comparator Reference) – выбор опорного
напряжения.
CAREF1
CAREF0
Напряжение
0
0
Выключен
0
1
0.25 * Vcc
1
0
0.5 * Vcc
1
1
Диод
108
Размещено на http://www.allbest.ru/

Бит 3 – CAON. Установка/ сброс этого бита включает/выключает
аналоговый компаратор

Бит 2 – CAIES (Comparator Interrupt Edge Select) – выбор фронта
прерывания.
0 – прерывание по переходу 01 выхода компаратора;
1 – прерывание по переходу 10 выхода компаратора;

Бит 1 – CAIE (Comparator Interrupt Enable) – разрешение
прерывания. Установка/сброс этого бита разрешает/запрещает прерывание от
компаратора.

Бит 0 – CAIFG (Comparator Interrupt Flag) – флаг требования
прерывания компаратора. Устанавливается аппаратно, если компаратор
переключается согласно содержимому бита CAIES. Сбрасывается аппаратно,
если берется прерывание, или программно.
 CACTL2 (Comparator A Control) – содержит биты управления
компаратора.
-
P2CA1
P2CA0
CAF

Биты 7…4 –зарезервированы.

Бит
3
–
P2CA1
–
CAOUT
устанавливается/сбрасывается
для
подключения/отключения внешнего вывода к цепи CA1.

Бит
2
–
P2CA0–
устанавливается/сбрасывается
для
подключения/отключения внешнего вывода к цепи CA0.

Бит 1 – CAF (Comparator Filter) – установка/сброс этого бита
подключает/ отключает встроенный RC фильтр.

Бит 0 – CAOUT – через этот бит программно читается выходное
состояние компаратора. Бит доступен только по чтению.
 CAPD (Comparator Port Disable) – запрещение цифрового буфера
порта P2. Назначение битов этого регистра заключается в следующем.
Входные цепи порта P2, равно как и всех остальных портов, снабжены
109
Размещено на http://www.allbest.ru/
цепями формирования входных логических уровней, состоящих из двух
КМОП транзисторов. Если входное напряжение близко к середине
напряжения питания, это вызывает протекание сквозного тока через входные
транзисторы, что влечет увеличение общего тока потребления. Т.к.
предполагается, что на входы компаратора может быть подано любое
аналоговое напряжение, с целью снижения потребления имеет смысл
отключать входные буферы для портов P2.3 и P2.4. Логические единицы в 8ми
битном
регистре
CAPD
запрещают
входные
буферы
для
соответствующих линий порта P2. Следует заметить, что действие регистра
CAPD распространяется на весь порт P2. Если в каком-либо бите регистра
CAPD взведена 1, соответствующая линия порта не может использоваться в
качестве цифрового входа.
3.11 Аналого-цифровой преобразователь ADC12
микроконтроллер цифровой преобразователь
Модуль ADC12 обеспечивает быстрое преобразование аналоговых
напряжений в цифровой код. Модуль обладает следующими техническими
характеристиками:

разрядность результирующего кода – 12 бит;

скорость преобразования – до 2*105 преобразований в секунду;

максимальная интегральная ошибка преобразования – менее 2
разрядов;

встроенное устройство выборки/хранения;

преобразование инициируется программным обеспечением или
аппаратно от таймеров A или B;

встроенный генератор опорного напряжения 1.5 или 2.5 V;

буферная память преобразования и управления, позволяющая
сохранить до 16 последовательных измерений;

восемь
индивидуально
конфигурируемых
внешних
входных
каналов;
110
Размещено на http://www.allbest.ru/

каналы преобразования для внутреннего температурного сенсора,
аналогового питания и внешних опорных источников.
Структурная схема модуля АЦП приведена на рис. 10.
Основой
модуля
последовательного
является
приближения.
12-ти
разрядный
Тактирование
блока
блок
ADC
осуществляется
частотой ADC12CLK, генерируемой от внутренних частот ACLK, MCLK,
SMCLK или специального встроенного генератора ADC12OSC и деленной
делителем DIV. Частота генератора ADC12OSC приблизительно равна 5MHz.
В любом случае частота тактирования ADC12CLK должна находиться в
диапазоне 0.45 – 6.3 MHz.
VREF+
REF
VeR EF+
SREF
VREFR EF2_5V
A V cc
MUX
P 6 .0 /A 0
SREF2
ADCM EM0
A D C12M C TL0
AVss
P 6 .1 /A 1
V r-
P 6 .2 /A 2
P 6 .3 /A 3
V r+
ADC
S /H
P 6 .4 /A 4
A D C12M EM 15
A D C 12M C TL15
P 6 .5 /A 5
SAM PCON
ACLK
AD C 12SSEL
P 6 .6 /A 6
M CLK
P 6 .7 /A 7
AD C 12C LK
TSH
A D C12O SC
SPH
IN C H
SM CLK
D IV
A D C 1 2 D IV
SHT
SHS
A D C 12SC
TACC1
TBCC0
TBCC1
Рисунок 10. Структурная схема ADC12
Результирующий код АЦП генерируется согласно формуле
NADC = 4096 * (Vin – Vr-)/(Vr+ - Vr-)
где
Vin – входное напряжение;
Vr+ – опорное напряжение;
111
Размещено на http://www.allbest.ru/
Vr-– общий вывод опорного напряжения.
Восемь внешних и четыре внутренних сигнала могут быть выбраны для
аналого-цифрового
преобразования.
В
качестве
внешних
сигналов
используются выводы порта P6. Для минимизации токов утечек входных
цифровых формирователей порта P6 рекомендуется назначать выводы,
задействованные для АЦ преобразования, для поддержки периферийных
функций через регистр P6SEL. В качестве внутренних входных сигналов
АЦП могут быть использованы напряжения опоры VeREF+, VREF- и
напряжения
встроенного
датчика
температуры.
Напряжение
на
температурном датчике Vt в вольтах определяется формулой
Vt = kt * T + 0.986
где
kt – температурный коэффициент датчика, равный 0.00355 V/0C ±3%;
T - температура в градусах Цельсия.
Требуемый канал измерения выбирается с помощью мультиплексора
MUX, управляемого битами INCH регистра управления.
Выходной сигнал мультиплексора поступает на вход устройства
выборки/хранения SH (Sample/Hold), предназначенного для фиксации
входного сигнала на время преобразования АЦП. Входной аналоговый
сигнал перед началом преобразования запоминается на внутреннем
конденсаторе SH. Для того чтобы конденсатор зарядился до величины
входного напряжения необходимо время ts, величину которого можно
оценить по формуле:
ts > (Rs + Ri) * 9.011 * Ci + 800ns
где
Rs – выходное сопротивление источника сигнала;
112
Размещено на http://www.allbest.ru/
Ri – проходное сопротивление мультиплексора, типовое значение 2
kOm;
Ci – емкость накопительного конденсатора, типовое значение 40 pF.
Внутренний
сигнал
SAMPCON
(Sample/Conversion)
управляет
периодом выборки SH и началом преобразования. Когда SAMPCON имеет
высокий уровень, выборка активна. Переход сигнала SAMPCON с высокого
уровня на низкий стартует аналого-цифровое преобразование, которому
необходимо 13 тактов частоты ADC12CLK.
Полное время одного преобразования tADC составляет
tADC = ts + 13 * ADC12CLK
Активизация
сигнала
SAMPCON
может
быть
осуществлена
программно с помощью бита ADC12SC регистра управления АЦП или
аппаратно при срабатывании модулей сравнения TACC1, TBCC0 или TBCC1.
Выбор источника для генерации сигнала SAMPCON выбирается битами
управления SHS. Кроме того, период выборки может быть задан напрямую
этими сигналами или с помощью специального таймера TSH. Переключение
между этими двумя режимами осуществляется с помощью бита управления
SPH.
Модуль ADC12 содержит в своем составе встроенный источник
опорного напряжения REF. Величину выходного напряжения можно задать
программно с помощью бита управления REF2_5V на уровне 1.5V или 2.5V.
Следует отметить, однако, что действительное значение этих напряжений
может отличаться от номинальных на величину ±100/60 mV для уровней
2.5/1.5
V
соответственно.
преобразования
напряжения,
необходимо
либо
Поэтому
либо
использовать
для
гарантирования
производить
внешний
калибровку
источник
точности
опорного
опоры.
При
использовании встроенного опорного напряжения рекомендуется между
113
Размещено на http://www.allbest.ru/
выводом VREF+ и выводом AVss подключать параллельно соединенные
конденсаторы номиналом 10 µF и 100 nF.
С помощью переключателя, управляемого битами SREF можно
подключить в качестве опоры Vr+ внешнее напряжение VeREF+ или
аналоговое питание AVcc. С помощью переключателя, управляемого битом
SREF2, можно в качестве опоры Vr- подключить внешний сигнал VREF- или
напряжение аналоговой земли. В любом случае напряжение Vr+ должно
находиться в диапазоне 1.4V – AVcc, а напряжение Vr- в диапазоне 0 – 1.2 V.
Начало цикла преобразования инициируется срабатыванием источника
запуска АЦП при условии, что бит управления ENC=1. Результаты
преобразований
сохраняются
преобразований
в
ADC12MEMx.
16-ти
регистрах
Каждый
буферной
регистр
памяти
ADC12MEMx
конфигурируется соответствующим управляющим регистром ADC12MCTLx,
содержащим информацию о номере входного канала и источнике опорного
напряжения для каждого измерения. Следующие друг за другом измерения
могут последовательно сохраняться в регистрах ADC12MEM0, ADC12MEM1
и т.д. Кроме того, управляющий регистр ADC12MCTLx содержит бит EOS,
определяющий конец серии измерения, когда используется многоканальные
режимы преобразования.
Модуль ADC12 имеет четыре основных режима работы:

Однократное
одноканальное
преобразование.
Результат
преобразования записывается в регистр ADC12MEMx, номер которого
записан в поле CSTARTADDR регистра управления АЦП. При этом номер
канала преобразования и источник опоры определяется содержимым
соответствующего
регистра
ADC12MCTLx.
Для
старта
следующего
преобразования необходимо опять переключить ENC в состояние 01.

Однократное многоканальное преобразование. Результат первого
преобразования сохраняется в ADC12MEMx, номер которого записан в поле
CSTARTADDR
регистра
управления
преобразований
сохраняются
в
АЦП.
следующих
Результаты
регистрах
следующих
ADC12MEMx.
114
Размещено на http://www.allbest.ru/
Последовательность преобразований завершается, когда очередной результат
сохраняется в регистре, для которого бит EOS в соответствующем регистре
ADC12MCTLx установлен в 1. Для старта следующей серии преобразований
необходимо переключить ENC в состояние 01.

Повторяющееся одноканальное преобразование. Отличается от
однократного
одноканального
автоматически
продолжаются
преобразования
после
первого
тем,
что
измерения
преобразования
(нет
необходимости переключать содержимое бита ENC). Содержимое регистра
ADC12MEMx необходимо вычитывать до того, как будет произведено
следующее
преобразование.
Выход
из
непрерывного
процесса
преобразований можно осуществить программной установкой бита ENC в 0.

Повторяющееся многоканальное преобразование. Отличается от
однократного многоканального преобразования тем, что при достижении
регистра, отмеченного установленным битом EOS, последовательность
автоматически возобновляется, начиная с регистра, номер которого
определен битовым полем CSTARTADDR.
Модуль ADC12 имеет дополнительные режимы работы, определяемые
состоянием бита MSC регистра управления АЦП. Эти дополнительные
режимы работают только в том случае, если не задан режим однократного
одноканального преобразования и для формирования периода выборки
используется таймер TSH. Если MSC=1, следующее преобразование в серии
производится максимально быстро, т.е. не дожидаясь срабатывания
источника старта АЦП, а непосредственно после окончания предыдущего
преобразования. При установленном бите MSC логика работы АЦП меняется
следующим образом.

Для однократного многоканального преобразования запуск АЦП
всегда производится при срабатывании источника старта, после чего
автоматически выполняется несколько измерений в зависимости от
состояния бита EOS.
115
Размещено на http://www.allbest.ru/

Для повторяющегося одноканального режима преобразования
первый запуск АЦП производится при срабатывании источника старта, после
чего измерение выбранного канала будет производиться постоянно, не взирая
на состояние источника запуска. Выход из данного режима осуществляется
установкой бита ENC в состояние 0.

Для повторяющегося многоканального преобразования логика
работы аналогична описанной в предыдущем пункте, с той разницей, что
постоянно производится измерения серии, начиная с канала, определенного
полем CSTARTADDR и заканчивая каналом с установленным битом EOS в
регистре ADC12MCTLx.
Модуль
источников
ADC12
поддерживает 18 источников прерываний. 16
соответствуют
флагам
–
ADC12IFG0
ADC12IFG15,
сосредоточенным в регистре ADC12IFG. Каждый флаг устанавливается
аппаратно, после того как результат преобразования записывается в
соответствующий
регистр
ADC12MEMx.
Два
остальных
события,
вызывающих прерывание, не имеют соответствующих флагов, и могут быть
определены с помощью регистра ADC12IV.
Прерывание, условно называемое ADC12OV (overflow), возникает в
том случае, когда результат преобразования записывается в любой регистр
ADC12MEMx до прочтения предыдущего результата из этого регистра.
Прерывание,
условно
называемое
ADC12TOV
(time
overflow),
генерируется, когда до завершения текущего преобразования затребована
другая выборка-преобразование.
Регистры модуля ADC12 представлены в таблице 15.
Таблица 15
Имя
Назначение регистра
Адрес
Нач.значен.
ADC12CTL0
Регистр управления 0
1A0h
0
ADC12CTL1
Регистр управления 1
1A2h
0
ADC12IFG
Регистр флагов прерываний
1A4h
0
ADC12IE
Регистр разрешения прерывания
1A6h
0
116
Размещено на http://www.allbest.ru/
ADC12IV
Регистр идентификации прерывания
1A8h
0
ADC12MEM0
Регистр памяти результата 0
140h
?
ADC12MEM1
Регистр памяти результата 1
142h
?
ADC12MEM2
Регистр памяти результата 2
144h
?
ADC12MEM3
Регистр памяти результата 3
146h
?
ADC12MEM4
Регистр памяти результата 4
148h
?
ADC12MEM5
Регистр памяти результата 5
14Ah
?
ADC12MEM6
Регистр памяти результата 6
14Ch
?
ADC12MEM7
Регистр памяти результата 7
14Eh
?
ADC12MEM8
Регистр памяти результата 8
150h
?
ADC12MEM9
Регистр памяти результата 9
152h
?
ADC12MEM10
Регистр памяти результата 10
154h
?
ADC12MEM11
Регистр памяти результата 11
156h
?
ADC12MEM12
Регистр памяти результата 12
158h
?
ADC12MEM13
Регистр памяти результата 13
15Ah
?
ADC12MEM14
Регистр памяти результата 14
15Ch
?
ADC12MEM15
Регистр памяти результата 15
15Eh
?
ADC12MCTL0
Управляющий регистр памяти результата 0
80h
0
ADC12MCTL1
Управляющий регистр памяти результата 1
81h
0
ADC12MCTL2
Управляющий регистр памяти результата 2
82h
0
ADC12MCTL3
Управляющий регистр памяти результата 3
83h
0
ADC12MCTL4
Управляющий регистр памяти результата 4
84h
0
ADC12MCTL5
Управляющий регистр памяти результата 5
85h
0
ADC12MCTL6
Управляющий регистр памяти результата 6
86h
0
ADC12MCTL7
Управляющий регистр памяти результата 7
87h
0
ADC12MCTL8
Управляющий регистр памяти результата 8
88h
0
ADC12MCTL9
Управляющий регистр памяти результата 9
89h
0
ADC12MCTL10
Управляющий регистр памяти результата 10
8Ah
0
ADC12MCTL11
Управляющий регистр памяти результата 11
8Bh
0
ADC12MCTL12
Управляющий регистр памяти результата 12
8Ch
0
ADC12MCTL13
Управляющий регистр памяти результата 13
8Dh
0
ADC12MCTL14
Управляющий регистр памяти результата 14
8Eh
0
ADC12MCTL15
Управляющий регистр памяти результата 15
8Fh
0
 ADC12CTL0 (Control 0) – содержат биты управления АЦП.
SHT1x
SHT0x
117
Размещено на http://www.allbest.ru/
SC
REF2_5V

REFON
ADC12ON
ADC12
ADC12
OVIE
TOVIE
ENC
ADC12SC
Биты 15…12 – SHT1 (Sample/Hold Time) – время выборки/хранения.
Состояние этих бит определяет период выборки, выраженный в тактах
частоты ADC12CLK, для регистров ADC12MEM8 …ADC12MEM15.
SHT
Циклы ADC12CLK
0000
4
0001
8
0010
16
0011
32
0100
64
0101
96
0110
128
0111
192
1000
256
1001
384
1010
512
1011
768
1100
1024
1101
1024
1110
1024
1111
1024

Биты 11…8 – SHT0 (Sample/Hold Time) – время выборки/хранения.
Состояние этих бит определяет период выборки, выраженный в тактах
частоты
ADC12CLK,
для
регистров
ADC12MEM7
…ADC12MEM0.
Соответствие кода в этом поле количеству тактов такое же, как для битов
SHT1.

Бит 7 – MSC (Multiple Sample and Conversion) – множественные
выбор и преобразования.
0 – каждое новое преобразование начинается после срабатывания
источника старта АЦП;
118
Размещено на http://www.allbest.ru/
1 – следующее преобразование начинается непосредственно после
окончания предыдущего.

Бит 6 – REF2_5V (Reference 2.5V) – опора 2.5V. Установка/сброс
этого бита задает напряжение встроенного генератора опорного напряжения
2.5/1.5 V соответственно.

Бит 5 – REFON – включение генератора опоры. Установка/сброс
этого бита включает/выключает генератор опорного напряжения.

Бит 4 – ADC12ON – включение модуля АЦП. Установка/сброс
этого бита включает/выключает модуль АЦП.

Бит 3 – ADC12OVIE (Overflow Interrupt Enable) – разрешение
прерывания
по
переполнению
АЦП.
Установка/сброс
этого
бита
разрешает/запрещает прерывание, возникающее в случае, если содержимое
ADC12MEMx не вычитано к моменту записи в него следующих значений.

Бит 2 – ADC12TOVIE (Time Overflow Interrupt Enable) – разрешение
прерывания по переполнению времени выборки АЦП. Установка/сброс этого
бита разрешает/запрещает прерывание, возникающее в случае, если до
завершения
текущего
преобразования
затребована
другая
выборка-
преобразование.

Бит 1 – ENC (Enable Conversion) – разрешение преобразования.
Установка/сброс этого бита разрешает/запрещает преобразование АЦП.

Бит 0 – ADC12SC (Start Conversion) – программный старт
преобразования. Установка этого бита вызывает старт преобразования АЦП в
том случае, если поле SHS регистра ADC12CTL1 установлено в 0. Если для
формирования периода выборки используется таймер TSH, бит сбрасывается
автоматически, в противном случае этот бит должен сбрасываться
программно. В этом случае, время, в течении которого этот бит удерживается
в 1, будет определять период выборки внешнего сигнала.
Примечание.
Биты
с
4
по
15
этого
регистра
могут
быть
модифицированы только, если бит ENC=0.
 ADC12CTL1 (Control 1) – содержат биты управления АЦП.
119
Размещено на http://www.allbest.ru/

Биты 15…12 – CSTARTADDR (Conversion Start Address) –
стартовый
адрес
преобразования.
Задает
номер
пары
регистров
–
ADC12MEMx и ADC12MCTLx, начиная с которых, будет производиться
преобразование.

Биты 11,10 – SHS (Sample/Hold Source Select) – выбор источника
выборки/хранения.
SHS1
SHS0
Источник
0
0
Бит ADC12SC
0
1
Выход TACC1
1
0
Выход TBCC0
1
1
ВыходTBCC1

Бит 9 – SPH (Sample/Hold Pulse mode) – выбор режима выборки.
Установка/сброс этого бита разрешает/запрещает использование таймера
TSH.

Бит 8 – ISSH (Invert Signal Sample/Hold) – инвертирование сигнала
выборки/хранения. Установка этого бита инвертирует сигнал, генерируемый
источником, определенным битами SHS этого регистра.

Биты 7,6,5 – ADC12DIV (Divider) – делитель для частоты
ADC12CLK. Состояние этих бит задают коэффициент деления тактовой
частоты, определенной битами ADC12SSEL этого регистра.
ADC12DIV2
ADC12DIV1
ADC12DIV0
Коэф.делен.
0
0
0
1/1
0
0
1
1/2
0
1
0
1/3
0
1
1
1/4
1
0
0
1/5
1
0
1
1/6
1
1
0
1/7
1
1
1
1/8
120
Размещено на http://www.allbest.ru/

Биты 4,3 – ADC12SSEL (Source Select) – определяют источник
тактирования АЦП.
ADC12SSEL1
ADC12SSEL0
Источник
0
0
ADC12OSC
0
1
ACLK
1
0
MCLK
1
1
SMCLK

Биты 2,1 – CONSEQ (Conversion Sequence) – последовательность
преобразования. Биты определяют режим преобразования АЦП.
CONSEQ1
CONSEQ0
Режим
0
0
Однократный одноканальный
0
1
Однократный многоканальный
1
0
Повторяющийся одноканальный
1
1
Повторяющийся многоканальный

Бит 0 – ADC12BUSY – индицирует активность АЦП, доступен
только по чтению. Устанавливается аппаратно, если АЦП находится в
состоянии выборки или преобразования, в противном случае – сбрасывается.
Примечание.
Биты
с
3
по
15
этого
регистра
могут
быть
модифицированы только если бит ENC=0.
 ADC12MEMx (Memory) – регистры буферной памяти АЦП,
предназначенные для сохранения результатов преобразования. Результат 12ти разрядного преобразования АЦП сохраняются в младших битах
регистров. Биты 15…12 всегда читаются как 0.
 ADC12MCTLx (Memory Control) – регистры управления буферной
памятью АЦП. 8-ми разрядные регистры, содержащие номер канала,
источник опоры и признак конца последовательности для соответствующего
регистра ADC12MEMx.
121
Размещено на http://www.allbest.ru/
EOS
SREF 2,1,0

INCH
Бит 7 – EOS (End Of Sequence) – конец последовательности. Для
многоканальных режимов логическая 1, установленная в этом бите, задает
последнее преобразовании в серии.

Биты 6,5,4 – SREF (Select Reference) – выбор опоры. Задают тип
опорного напряжения АЦП для данного преобразования.
SREF2
SREF1
SREF0
Опора
0
0
0
Vr+ = AVcc; Vr-=AVss
0
0
1
Vr+ =VREF+; Vr-=AVss
0
1
0
Vr+ = VeREF+; Vr-=AVss
0
1
1
Vr+ = VeREF+; Vr-=AVss
1
0
0
Vr+ = AVcc; Vr-=VREF-
1
0
1
Vr+ =VREF+; Vr-= VREF-
1
1
0
Vr+ = VeREF+; Vr-= VREF-
1
1
1
Vr+ = VeREF+; Vr-= VREF-

Биты 3…0 – INCH (Input Channel) – входной канал. Эти биты
задают физический канал, напряжение которого будет сохранено в
соответствующем регистре ADC12MEMx.
INCH
Канал
0000
A0
0001
A1
0010
A2
0011
A3
0100
A4
0101
A5
0110
A6
0111
A7
1000
VeREF+
1001
VREF-
1010
Температ. датчик
1011
(AVcc-AVss)/2
1100
(AVcc-AVss)/2
122
Размещено на http://www.allbest.ru/
1101
(AVcc-AVss)/2
1110
(AVcc-AVss)/2
1111
(AVcc-AVss)/2
 ADC12IE (Interrupt Enable) – разрешение прерывания. Регистр
содержит 16 битов разрешения прерывания для записи результатов
преобразования в регистры ADC12MEMx. Бит 0 – соответствует записи в
регистр ADC12MEM0, бит 1 – в регистр ADC12MEM1 и т.д. Логическая 1 в
битах – разрешает, а 0 - запрещает прерывание.
 ADC12IFG (Interrupt Flag) – флаги прерывания. Регистр содержит 16
флагов, которые устанавливаются аппаратно при записи результата
преобразования в соответствующий регистр ADC12MEMx. Сбрасываются
аппаратно при чтении соответствующего регистра ADC12MEMx или
программно.
 ADC12IV (Interrupt Vector) – регистр идентификации прерывания. В
том случае, если возникают условия для запроса прерывания, в этом регистре
генерируется код, позволяющий определить индекс источника прерывания –
переполнение АЦП или установка флагов в регистре ADC12IFG. Флаги
переполнения автоматически сбрасываются после чтения ADC12IV. В том
случае,
если
имеется
несколько
установленных
флагов
требования
прерывания, в регистр подставляется код источника прерывания с более
высоким приоритетом. После вычитывания содержимого регистра, в него
подставляется код следующего источника прерывания.
Код ADC12IV
Источник
00h
Нет прерываний
02h
Память не вычитана
04h
Приоритет
Высший
Запрос до окончания
преобразования
06h
Запись в ADC12MEM0
08h
Запись в ADC12MEM1
0Ah
Запись в ADC12MEM2
0Ch
Запись в ADC12MEM3
123
Размещено на http://www.allbest.ru/
0Eh
Запись в ADC12MEM4
10h
Запись в ADC12MEM5
12h
Запись в ADC12MEM6
14h
Запись в ADC12MEM7
16h
Запись в ADC12MEM8
18h
Запись в ADC12MEM9
1Ah
Запись в ADC12MEM10
1Ch
Запись в ADC12MEM11
1Eh
Запись в ADC12MEM12
20h
Запись в ADC12MEM13
22h
Запись в ADC12MEM14
24h
Запись в ADC12MEM15
Низший
Техника работы с регистром ADC12IV аналогична регистру TAIV (см.
п. 3.7)
ПРИМЕР
Организовать измерение напряжений подключенных к выводам A0, A2,
A3 и A6. Тактирование от SMCLK – 4MHz, опора – встроенная 2.5V,
выходное сопротивление источников A0, A2 и A6 – 1 kOm, A3 – 50 kOm.
Измеренные напряжения, выраженные в милливольтах, записать в ОЗУ,
начиная с адреса 200h.
Рассчитаем время выборки, необходимое для источников 1kOm
t1 = 9.011* (1+2)*103 * 40 * 10-12 + 800 * 10-9 ≈ 2 µs
Это время, выраженное в тактах SMCLK составит
N1=t1 * 4 MHz = 2* 4 = 8
Значение
N1=8
соответствует
коду 001b
поля
SHT
регистра
ADC12CTL0.
Рассчитаем время выборки, необходимое для источников 50kOm
t2 = 9.011* (50+2)*103 * 40 * 10-12 + 800 * 10-9 ≈ 20 µs
Время t2, выраженное в тактах SMCLK составит
N2 = t2 * 4 MHz = 20 * 4 = 80
Значение N2=80 соответствует коду 101b поля SHT регистра
ADC12CTL0.
124
Размещено на http://www.allbest.ru/
Измерение
(однократный
будем
проводить
серией
многоканальный
из
4-х
режим,
преобразований
множественный
выбор/преобразование), с программным стартом. Т.к. имеется возможность
установить разное время захвата для групп буферной памяти ADC12MEM0 –
7 и ADC12MEM8 – 15, распределим буферную память следующим образом:
- ADC12MEM5 – для канала A0, время захвата 2 µs;
- ADC12MEM6 – для канала A2, время захвата 2 µs;
- ADC12MEM7 – для канала A6, время захвата 2 µs;
- ADC12MEM8 – для канала A3, время захвата 20 µs, последнее
измерение в серии.
Для расчета напряжений, выраженных в милливольтах, воспользуемся
соотношением:
V = N*REF/4096
где
V – входное напряжение напряжения;
N – результирующий код преобразования;
REF – напряжение опоры.
Т.к. величина V должна быть выражена в милливольтах, значение REF
подставим так же в милливольтах. Тогда
V = N * 2500 / 4096 = N * 2500 / 212
Вместо операции деления можно использовать сдвиг вправо 32-х
битного результата умножения на 12 бит. Тот же результат можно более
быстро получить с помощью 4-х кратного сдвига влево 32-х битного
результата умножения и отбрасывания младших 16-ти бит. Однако, более
эффективно расчет по приведенной формуле можно выполнить следующим
образом. Заранее вычисляется коэффициент
k= 216 * 2500 / 212 = 24 * 2500 = 40000
125
Размещено на http://www.allbest.ru/
При расчете необходимо код преобразования АЦП умножить на 40000,
тогда старшее слово продукта умножения даст требуемое значение.
#include <msp430x14x.h>
ORG 0F000h
start: mov #300h, SP
...
; SHT1=5, SHT0 =1, MSC=1, REF2_5V=1, REFON=1, ADC12ON=1
mov #51F0h, &ADC12CTL0
; CSTARTADDR=5, SHS=0, SPH=1, ADC12SSEL=3, CONSEQ=1
mov #521Ah, &ADC12CTL1
mov.b #10h, &ADC12MCTL5 ; SREF=1, INCH=0, EOS=0
mov.b #12h, &ADC12MCTL6 ; SREF=1, INCH=2, EOS=0
mov.b #16h, &ADC12MCTL7 ; SREF=1, INCH=6, EOS=0
mov.b #93h, &ADC12MCTL8 ; SREF=1, INCH=3, EOS=1
clr &ADC12IFG ; на всякий случай сбрасываем флаги
bis #3, &ADC12CTL0 ; старт АЦП : ENC=1, ADC12SC=1
mov #ADC12MEM5, R4 ; указатель на ADC12MEM5
mov #200h, R5 ; указатель на ОЗУ
wait: bit #100h, &ADC12IFG ; преобразование завершено?
jz wait ; если нет - цикл
mov @R4+, &MPY ; расчет напряжения
mov #40000, &OP2
mov &RESHI, R12 ; читаем результат
rla &RESLO ; округляем до целого
adc R12
mov R12, 0(R5) ; сохраняем значение напряжения в ОЗУ
incd R5 ; наращиваем указатель ОЗУ
cmp #208h, R5 ; все данные записаны в ОЗУ?
jne wait ; если нет -цикл
...
126
Размещено на http://www.allbest.ru/
3.12 Flash контроллер
MSP-микроконтроллеры
содержат
в
своем
составе
контроллер
программирования собственной flash-памяти. Программирование (запись
логических нулей) может осуществляться побайтно и пословно, стирание
(запись логических единиц) – может производиться сегментами, размером
512 (Flash память программ) или 128 (Flash память данных) байт (см. рис. 1).
Процесс стирания/записи происходит под управлением встроенного
генератора времени, осуществляющего тактирование Flash контроллера. При
этом для нормальной работы частота тактирования Flash контроллера должна
находиться в диапазоне 257 – 476 kHz. В противном случае Flash память
микроконтроллера
может
подвергнуться
стрессу.
Настройка
частоты
тактирования Flash контроллера производиться с помощью делителя
частоты, коэффициент деления, которого задается через регистр управления.
3.12.1 Стирание Flash памяти
Режим стирания памяти задается состоянием битов MERAS и ERAS
регистра управления, при условии, что бит LOCK (блокировка записи flash
памяти) сброшен в ноль. При этом возможны следующие режимы:

стирание одного сегмента;

стирание всей памяти программ;

одновременное стирание всей памяти программ и Flash памяти
данных.
Стирание
инициализируется
записью
произвольных
данных
в
выбранный сегмент памяти при установленных битах MERAS и/или ERAS.
Сразу после этого в регистре управления устанавливается бит BUSY,
сигнализируя об активности операции стирания. По окончанию операции
BUSY сбрасывается в 0 автоматически.
127
Размещено на http://www.allbest.ru/
Во время операции стирания/записи процессор не должен обращаться к
Flash памяти. Так как вектора прерывания расположены в верхней области
памяти программ, все прерывания также должны быть запрещены.
Если процесс стирания был инициирован командой, расположенной во
Flash памяти, работа процессора автоматически блокируется на время
активности сигнала BUSY. Для стирания памяти необходимо выполнить
следующую последовательность действий:
1) Запретить все прерывания и остановить сторожевой таймер.
2) Настроить тактовую частоту Flash контроллера.
3) Установить режим стирания битами MERAS и/или ERAS и
сбросить бит LOCK в состояние 0.
4) Произвести фиктивную запись в выбранный сегмент.
5) Если требуется, разрешить прерывания, сторожевой таймер и
установить LOCK бит.
Период полного стирания Flash памяти может достигать нескольких
десятков миллисекунд. В течение этого время процессор находиться в
деактивированном состоянии. Для того чтобы процессор мог исполнять
какую-либо полезную работу во время процесса стирания, необходимо,
чтобы команда на стирание памяти производилась не из Flash, а из ОЗУ.
Естественно, что для этого подпрограмма стирания изначально должна
располагаться во Flash памяти. Перед началом процесса стирания тело этой
подпрограммы должно быть скопировано в ОЗУ, после чего ей должно быть
передано управление. Прерывания в данном случае также должны быть
запрещены, т.к. адрес подпрограммы обработки прерывания вычитывается из
старших адресов Flash памяти (см. п. 3.2). Для стирания памяти при работе из
ОЗУ необходимо выполнить следующую последовательность действий:
1) Запретить все прерывания и остановить сторожевой таймер.
2) Настроить тактовую частоту Flash контроллера.
3) Дождаться, пока состояние бита BUSY не станет равным 0.
128
Размещено на http://www.allbest.ru/
4) Установить режим стирания битами MERAS и/или ERAS и
сбросить бит LOCK в состояние 0.
5) Произвести фиктивную запись в выбранный сегмент.
6) Дождаться, пока состояние бита BUSY не станет равным 0.
7) Если требуется, разрешить прерывания, сторожевой таймер и
установить LOCK бит.
3.12.2 Запись Flash памяти
Запись Flash памяти можно осуществлять в режимах байт/слово или
блоком, состоящим из 64 байт. Режим записи памяти определяется
состоянием
бита
BLKWRT
регистра
управления.
Программа,
осуществляющая запись побайтно/пословно, может располагаться как во
Flash памяти, так и в ОЗУ. Запись блока данных может осуществляться
только из подпрограммы, расположенной в ОЗУ. Разрешение записи данных
во Flash памяти производиться с помощью бита WRT регистра управления.
Для записи байта/слова из Flash памяти необходимо выполнить
следующие действия:
1) Запретить все прерывания и сторожевой таймер.
2) Настроить тактирование Flash контроллера.
3) Очистить LOCK бит.
4) Установить бит WRT.
5) Записать данные по требуемому адресу с помощью словной или
байтовой формы инструкции.
6) Сбросить бит WRT и, если требуется, разрешить прерывания,
сторожевой таймер и установить LOCK бит.
Для записи байта/слова из ОЗУ необходимо выполнить следующие
действия:
1) Запретить все прерывания и сторожевой таймер.
2) Дождаться, пока состояние бита BUSY не станет равно 0.
3) Настроить тактирование Flash-контроллера и сбросить бит LOCK
129
Размещено на http://www.allbest.ru/
4) Установить бит WRT.
5) Записать в память слово или байт
6) Дождаться, пока состояние бита BUSY не станет равно 0.
7) Сбросить бит WRT и, если требуется разрешить прерывания,
сторожевой таймер и LOCK бит.
Время
записи
одного
слова/байта
может
составить
несколько
миллисекунд. Существенно сократить это время можно, используя блочный
метод записи. Для записи блока данных в память необходимо выполнить
следующие действия:
1) Выполнить пункты 1..3 алгоритма записи байта/слова.
2) Установить биты WRT и BLKWRT.
3) Записать требуемые данные.
4) Дождаться, пока бит регистра управления WAIT не станет равным
0.
5) Проверить, достигнута ли граница 64-ти байтного блока. Если нет –
перейти к п.3.
6) Сбросить бит BLKWRT в 0.
7) Дождаться, пока бит BUSY не станет равен 0.
8) Если требуется запись нового блока перейти к пункту 2.
9) Сбросить бит WRT и, если требуется, разрешить прерывания,
сторожевой таймер и LOC бит.
В том случае, если программа исполняется из ОЗУ и бит BUSY =1,
любой доступ к Flash памяти при сброшенном бите WRT аппаратно взводит
бит
ACCVIFG
регистра
управления
Flash
контроллера,
что
при
установленном бите ACCVIE регистра IE1 (см. п. 3.2) вызовет прерывание с
вектором, расположенным по адресу FFFCh. Если при всем этом бит WRT=1,
поведение процессора непредсказуемо.
В том случае, если необходимо по той, или иной причине
преждевременно остановить процесс записи/стирания программа может
130
Размещено на http://www.allbest.ru/
взвести бит EMEX регистра управления, после чего текущая операция
завершается безаварийным образом.
3.12.3 Регистры Flash контроллера
Все регистры управления Flash контроллера – 16-ти битные регистры,
защищенные паролем и доступные как для записи, так и для чтения. Во всех
регистрах старший байт содержит поле пароля, а младший байт – содержит
управляющие биты. К регистрам необходимо обращаться только с помощью
словных форм инструкций. При этом для операции записи старший байт
должен содержать код пароля – 0A5h, в противном случае аппаратно
устанавливается бит KEYV регистра управления и генерируется сброс
микроконтроллера. При чтении старший байт регистров всегда содержит код
96h. Т.к. коды в старшем байте регистров управления различны при записи и
чтении следует избегать обращения к этим регистрам с помощью команд
типа чтение-модификация-запись, таких например, как bis, bic.
Регистры модуля Flash контроллера представлены в таблице 16.
Таблица 16
Имя
Назначение регистра
Адрес
Нач.значен.
FCTL1
Регистр управления 1
128h
9600h
FCTL2
Регистр управления 2
12Ah
9642h
FCTL3
Регистр управления 3
12Ch
9618h
IE1
Регистр разрешения прерываний
0h
0
 FCTL1 (Flash Control 1) – содержит биты управления Flash
контроллера.

Биты 15..8 – FWKEY (Flash Write Key) – flash-ключ записи. Поле
содержит пароль доступа к регистру. При записи поле должно содержать код
5Ah, при чтении поле содержит код 96h.

Бит 7 – BLKWRT (Block Write) – запись блока. Установка/сброс
этого бита разрешает/запрещает режим блочной записи данных в Flash
131
Размещено на http://www.allbest.ru/
память. Программная установка бита EMEX автоматически сбрасывает этот
бит.

Бит 6 – WRT (Write) – запись. Установка/сброс этого бита
разрешает/запрещает режим записи в Flash память. Программная установка
бита EMEX автоматически сбрасывает этот бит.

Биты 5..3 – зарезервированы.

Бит 2 – MERAS (Mass Erase) - массовое стирание. Совместно с
битом ERASE определяет режим стирания Flash памяти. Программная
установка бита EMEX автоматически сбрасывает этот бит.

Бит 2 – ERASE – стирание. Совместно с битом MERAS определяет
режим стирания Flash памяти. Программная установка бита EMEX
автоматически сбрасывает этот бит.
MERAS
ERASE
Режим
0
0
Режим стирания выключен
0
1
Стирание сегмента
1
0
Стирание всей памяти программ
1
1

Стирание памяти программ и
информационной памяти
Бит 0 – зарезервирован.
 FCTL2 (Flash Control 2) – содержит биты управления Flash
контроллера.

Биты 15..8 – FWKEY (Flash Write Key) – flash-ключ записи. Поле
содержит пароль доступа к регистру. При записи поле должно содержать код
5Ah, при чтении поле содержит код 96h.

Биты 7,6 – FSSEL (Flash controller clock Source Select) – выбор
тактирования Flash контроллера.
FSSEL1
FSSEL0
Источник
0
0
ACLK
0
1
MCLK
132
Размещено на http://www.allbest.ru/
1
0
SMCLK
1
1
SMCLK

Биты 5..0 – FN (Flash controller clock divider Number) – делитель
частоты тактирования Flash контроллера. С помощью этих бит назначается
делитель частоты, выбранной битами FSSEL. При этом действительный
коэффициент деления определяется как FN+1. Т.е. значение FN=0 – задает
коэффициент делении 1, FN=1 – коэффициент деления 2 и т.д. Частота
тактирования Flash контроллера должна находиться в пределах 257 – 476
kHz.
 FCTL3 (Flash Control 3) – содержит биты управления Flash
контроллера.

Биты 15..8 – FWKEY (Flash Write Key) – flash-ключ записи. Поле
содержит пароль доступа к регистру. При записи поле должно содержать код
5Ah, при чтении поле содержит код 96h.

Биты 7,6 – зарезервированы.

Бит 5 – EMEX (Emergency Exit) - аварийное стирание. Программная
установка этого бита останавливает процесс стирания/записи Flash памяти.

Бит 4 – LOCK – блокировка. Установка/сброс этого бита
блокирует/разблокирует возможность стирания и записи Flash памяти.

Бит 3 – WAIT – ожидание. Бит доступен только для чтения.
Устанавливается аппаратно для информирования о готовности Flash памяти к
записи нового байта/слова.

Бит 2 – ACCVIFG – (Access Violation Interrupt Flag) – флаг
прерывания нарушения доступа к Flash памяти. Устанавливается аппаратно
при доступе к Flash памяти во время стирания/записи. Сбрасываться должен
программно.

Бит 1 – KEYV – (Flash security Key Violation) – ключ нарушения
безопасности Flash. Устанавливается аппаратно, если при записи данных в
133
Размещено на http://www.allbest.ru/
регистр управления Flash контроллера был задан неверный пароль.
Сбрасываться должен программно.

Бит
0
–
BUSY
Устанавливается/сбрасывается
–
генератор
аппаратно
Flash
для
контроллера
индикации
занят.
состояния
тактового генератора Flash контроллера – занят/готов к работе.
 IE1 (Interrupt Enable 1) – содержит бит разрешения прерывания при
установки флага ACCVIFG (см. п.3.2).
ПРИМЕР
Содержимое блока ОЗУ с начальным адресом 400h, записать в Flash
сегмент данных с начальным адресом 1000h. Тактовая частота MCLK = 8
MHz.
Для удобства работы по программированию Flash-памяти разработаем
универсальную программу, программирующую любой сектор содержимым
определенного блока ОЗУ. Для этого в подпрограмму перед вызовом
необходимо передать параметры: начальный адрес источника данных (ОЗУ)
через регистр R12 и адрес сегмента программируемой Flash памяти через
регистр R14. Для более быстрого процесса программирования будем
использовать блочный метод. Для этого разрабатываемая подпрограмма
должна выполнить следующие действия:

скопировать
код,
собственно
выполняющий
операции
программирования, из Flash памяти программ в ОЗУ;

отдать управление на подпрограмму в ОЗУ;

задать режим работы Flash контроллера;

стереть заданный сегмент Flash памяти;

запрограммировать сегмент Flash памяти;

вернуться в основную программу.
При копировании кода подпрограммы в ОЗУ необходимо позаботиться
о том, чтобы данная область не была занята данными, с которыми оперирует
основная программа. Поэтому, безопасное копирование можно осуществить
134
Размещено на http://www.allbest.ru/
в стековую область памяти с адресами меньшими, чем текущее содержимое
указателя стека SP.
Тактирование Flash контроллера будем осуществлять от частоты
MCLK. Потребуем, чтобы тактовая частота Flash контроллера составляла 400
kHz, тогда делитель частоты должен содержать код 8000 kHz/400 kHz – 1
=19.
Для удобства работы с подпрограммой желательно, чтобы она сама
определяла размер сегмента при программировании. Это можно определить
по адресу сегмента Flash памяти, переданному в подпрограмму через R14.
Если этот адрес меньше 1100h, значит размер сегмента 128 байт (2 блока по
64 байт), в противном случае размер 512 байт (8 блоков по 64 байта).
#include <msp430x14x.h>
ORG 2000h
main: mov #WDTPW+WDTHOLD, &WDTCTL ; запрет WatchDog
mov #0A00h, SP ; установка указателя стека
...
mov #400h, R12 ; начальный адрес источника
mov #1000h, R14 ; начальный адрес Flash сегмента
call #SectProg ; вызов подпрограммы программирования
...
; *****************************************
; Подпрограмма программирования сегмента
;******************************************
SectProg:
push SR ; сохраняем статусный регистр
dint ; запрещаем прерывания
mov SP, R13 ; настраиваем указатель копирования приемника
sub #2, R13 ; на два байта ниже указателя стека
mov
#WriteEnd+2, R15
; настраиваем
указатель копирования
источника
135
Размещено на http://www.allbest.ru/
;
spr1: decd R13 ; цикл копирования подпрограммы WriteStart
decd R15 ; в ОЗУ от старших адресов к младшим
mov @R15, 0(R13)
cmp #WriteStart, R15
jne spr1
;
mov #2, R15 ; контроль размера сегмента,
bic #3Fh, R14 ; если Info Flash – R15= 2 блока,
cmp #1100h, R14 ; иначе R15= 8 блоков
jlo spr2
mov #8, R15
spr2: call R13 ; передача управления в ОЗУ
pop SR ; восстановление режима прерывания
ret
; **************************************
; Код, копируемый в ОЗУ
WriteStart:
; Стирание сегмента
ws1: bit #BUSY, &FCTL3 ; ожидание готовности Flash контроллера
jnz ws1
mov #FWKEY+FSSEL0+19, &FCTL2 ; настройка частоты Flash
контроллера
mov #FWKEY, &FCTL3 ; сброс LOCK бита
mov #FWKEY+ERASE, &FCTL1 ; режим стирания сегмента
mov #0, 0(R14) ; инициация стирания сегмента
ws2: bit #BUSY, &FCTL3 ; ожидание готовности
jnz ws2
; Программирование сегмента
ws3: mov #FWKEY+BLKWRT+WRT, &FCTL1 ; режим блочной записи
136
Размещено на http://www.allbest.ru/
mov #64, R13 ; счетчик байт в блоке
ws4: mov @r12+, 0(R14) ; запись данных во Flash
incd R14 ; инкремент указателя Flash
ws5: bit #WAIT, &FCTL3 ; запись произведена?
jz ws5
decd R13 ; декремент счетчика записей в блоке
jne ws4 ; блок записан ?
mov #FWKEY, &FCTL1 ; сброс записи блока
ws6: bit #BUSY, &FCTL3 ; Flash контроллер готов?
jnz ws6
dec r15 ; все блоки записаны ?
jne ws3 ; если нет – ветвление,
WriteEnd: ret ; иначе - конец подпрограммы
...
ORG 0FFFEh
DC16 main
END
Следует заметить, что подпрограмма программирования Flash занимает
78 байт ОЗУ, использует только регистры R12…R15 и может использоваться
как библиотечная функция для программ, написанных на языке C.
Размещено на Allbest.ru
137
Автор
dbrfyn
Документ
Категория
Без категории
Просмотров
19
Размер файла
3 679 Кб
Теги
1208332
1/--страниц
Пожаловаться на содержимое документа