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

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информатика, ВТ, телекоммуникации
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    146,05 Кб
  • Опубликовано:
    2014-04-27
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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















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

Содержание

Введение

. Центральный процессор MSP430

.1 Адресное пространство микроконтроллеров MSP430F1xx

.2 Регистровый файл

.3 Байтовая и словная формы инструкций

.4 Режимы адресации

.4.1 Регистровая адресация

.4.2. Индексная адресация

.4.3 Символьная адресация

.4.4 Абсолютная адресация

.4.5 Косвенная адресация

.4.6 Косвенная адресация с автоинкрементом

.4.7 Непосредственная адресация

. Система команд MSP микроконтроллеров

.1 Двухадресные команды

.2 Одноадресные команды

.3 Команды переходов

.4 Эмулируемые команды

. Периферийные устройства микроконтроллеров MSP430F1xx

.1 Внешние выводы микроконтроллера MSP430F149

.2 Система прерываний

.3 Система тактирования

.4 Сторожевой таймер

.5 Аппаратный умножитель

.6 Порты ввода/вывода

.7 Таймер A3

.8 Таймер B7

.9 Интерфейс USART

.9.1 Режим UART

.9.1.1 Передача данных

.9.1.2 Передача данных

.9.1.3 Поддержка коммуникации в многопроцессорных системах

.9.1.4 Обнаружение стартового бита при приеме

.9.1.5 Скорость передачи

.9.1.6 Регистры USART

.9.2 Режим SPI

.9.3 Режим I2C

.10 Аналоговый компаратор

.11 Аналого-цифровой преобразователь ADC12

.12 Flash контроллер

.12.1 Стирание Flash памяти

.12.2 Запись Flash памяти

.12.3 Регистры Flash контроллера

Введение

Микроконтроллеры семейства 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, имеется аппаратная поддержка ЖКИ;

·        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) - количество источников прерывания;

·        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, kB

RAM, B

Int

I/O

Mul

TimerB

UART/SPI

ADC

DAC

DMA

Выв. корпуса

MSP430F1101

1

128

7

14

-

-

-

-

-

-

20

MSP430F1121

4

256

7

14

-

-

-

-

-

-

20

MSP430F122

4

256

9

24

-

-

1

-

-

-

28

MSP430F123

8

256

9

24

-

-

1

-

-

-

28

MSP430F1222

4

256

10

24

-

-

1

ADC10

-

-

28

MSP430F1232

8

256

10

24

-

-

1

ADC10

-

-

28

MSP430F133

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


1. Центральный процессор MSP430


1.1 Адресное пространство микроконтроллеров MSP430F1xx


Т.к. MSP микроконтроллеры построены по фон-неймановской архитектуре, все классы памяти, включающие Flash-память программ, ОЗУ, регистры управления периферийных устройств, отображены на единое адресное пространство общей емкостью 64 килобайта. Типовое распределение памяти приведено на рис.1.

 

Рисунок 1. Распределение памяти микроконтроллеров MSP430F1xx

Младшие адреса памяти занимает область SFR (Special Function Registers) в которой находятся несколько 8-битных регистров, предназначенных для конфигурации некоторых периферийных устройств.

В диапазоне адресов FFh - 10h находятся регистры управления 8-битных периферийных устройств, таких как порты ввода/вывода, UART и т.д. К этим регистрам, также как и к регистрам SFR, необходимо обращаться, используя только байтовые формы инструкций.

В диапазоне адресов 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. Большинство регистров из регистрового файла могут выступать как источник или приемник данных, или использоваться в качестве указателей. Регистры с индексами от 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

Регистр 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) - бит фиксации нулевого результата. Устанавливается аппаратно, если в качестве результата последней операции было получено нулевое значение, в противном случае - сбрасывается.

·        Бит 0: С (Carry) - бит переноса. Устанавливается аппаратно, если результат последней операции не умещается в разрядной сетке операции (16 бит для словной формы или 8 бит для байтовой данных), в противном случае сбрасывается.

Все биты флагов в регистре SR также могут устанавливать/сбрасываться программно.

Регистр R3 является генератором констант. Он используется неявно ассемблером для генерации часто используемых констант: 0, 1, 2, 4, 8, -1. Для этого при кодировании ассемблер достаточно хитроумно используют различные способы адресации к регистрам R2 и R3. Использование в коде команды ссылки на регистр R2 при генерации констант становится возможным, т.к. использование R2 в качестве регистра-указателя не имеет смысла.

Использование генератора констант в некоторых случаях приводит к сокращению объема кода программы и увеличению скорости исполнения определенных фрагментов программы. Программисту нет необходимости задумываться об использовании данных констант, подстановку нужного кода производит ассемблер автоматически. Вместе с тем, программист не должен явно использовать регистр R3 в своих программах.

Регистры R4 - R15 программист может использовать свободно по своему усмотрению.

1.3 Байтовая и словная формы инструкций.


-ти разрядное арифметико-логическое устройство процессора имеет возможность оперировать как с 16-ти разрядными, так и с 8-ми разрядными данными. Для того чтобы показать, с данными какой разрядности должен работать процессор, большинство команд (инструкций процессора) имеют байтовую (8 бит) и словную (16 бит) формы. Для этого используются суффиксы ‘b’ (byte) и ‘w’ (word), записываемые после мнемоники инструкции и отделенные от нее десятичной точкой. Например, запись ‘mov.b’ определяет байтовую, а запись ‘mov.w’ - словную форму команды ‘mov’. В том случае, если после мнемоники команды суффикс вообще не ставится, по умолчанию, подразумевает словная форма.

Все ячейки памяти ОЗУ могут быть рассмотрены как массив байт, в случае обращения к ним с использования байтовой формы инструкции или как массив слов - для словной формы. То же самое можно сказать о Flash памяти, т.к. для микроконтроллеров с фон-неймановской архитектурой, по крайней мере, чтение данных из памяти программ, ничем не отличается от чтения ОЗУ. Однако адресация памяти в MSP микроконтроллерах всегда производится побайтно. При этом младшие байты 16-ти разрядных слов всегда должны иметь четные адреса, а старшие байты - адрес на единицу больше адреса его младшего байта. Адрес 16-ти разрядной ячейки памяти совпадает с адресом ее младшего байта. Например, словная ячейка памяти с адресом 200h состоит из младшего байта, который также имеет адрес 200h, и старшего байта с адресом 201h. Использование словных инструкций применительно к ячейкам памяти с нечетными адресами может вызвать либо ошибку трансляции при явном определении адреса, либо непредсказуемое поведении процессора при косвенной адресации.

Регистры регистрового файла не имеют деления на старший и младший байты и всегда воспринимаются как 16-ти разрядные. Однако это не значит, что к ним не применимы байтовые формы инструкций, при этом регистр может выступать как в качестве источника данных, так и в качестве приемника. В том случае, если регистр выступает в качестве источника в байтовой инструкции, используется только содержимое его младших 8-ми бит, при этом содержимое всего регистра не меняется. Если регистр используется как приемник, данные записываются в его младшие 8 разрядов, при этом старшие разряды обнуляются.

Пример.

Пусть изначально регистр 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 микроконтроллеры поддерживают следующие режимы адресации к данным:

регистровый;

индексный;

символьный;

абсолютный;

косвенный;

косвенный с автоинкрементом;

непосредственный.

При этом для источника данных доступны все режимы адресации, а для приемника - только четыре первых режима. Следует заметить, однако, что символьный и абсолютный режимы адресации являются частными случаями более общего индексного режима, а непосредственный кодируется с помощью автоинкрементного косвенного режима.

Иллюстрацию работы различных режимов адресации будем проводить на примере инструкции ‘mov’ (переслать). Данная команда относится к группе двух-операндных команд и производит пересылку содержимого операнда-источника по адресу операнда-приемника. Следует помнить, что каждая инструкция на языке ассемблера записывается в одной строке, при этом сначала записывается мнемоника команды, затем через пробелы или символы табуляции указывается операнд-источник и, через запятую, операнд-приемник.

1.4.1 Регистровая адресация

В регистровой адресации операндом-источником и/или операндом-приемником является регистр регистрового файла. Признаком регистровой адресации является имя регистра, записанное в качестве операнда.

Пример:R5, R10 - содержимое регистра R5 (как слово) пересылается в регистр R10.

mov.b SP, R5 - содержимое младшего байта указателя стека пересылается в регистр R5.

mov PC, R7 - в регистре R7 запоминается текущее состояние программного счетчика.

1.4.2 Индексная адресация

С помощью индексной адресации производится обращение к ячейке памяти, адрес которой вычисляется как сумма содержимого регистра и постоянного смещения. Признаком индексной адресации является использование одного из операндов в виде X(Rn), где n - индекс используемого регистра (n=0..15), а X - произвольное целое число, записанное в десятичной или шестнадцатеричной форме, и находящееся в диапазоне 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 Символьная адресация

Признаком символьной адресации является упоминание символьного имени ячейки памяти как операнда-приемника и/или операнда-источника. В качестве символьного имени ячейки памяти используется метка, описанная в сегменте кода или данных при написании программы.

Пример:Lab1, R5

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

1.4.4 Абсолютная адресация

Абсолютной адресацией пользуются при обращении к ячейкам памяти, имеющим фиксированные и известные на момент трансляции адреса. С помощью абсолютной адресации обычно обращаются к регистрам управления периферийных устройствами или ячейкам памяти ОЗУ, в том случае, если не используются перемещаемые программные модули. Признаком абсолютной адресации является символ ‘&’, после которого записывается адрес требуемой ячейки памяти. Пример: mov &200h, 10(R5)

В данном примере используется абсолютная адресация для источника и индексная адресация для приемника. Команда выполняет пересылку слова, расположенного по адресу 200h в ячейку памяти, адрес которой вычисляется как сумма содержимого R5 и смещения 10.

Абсолютная адресация также является частным случаем индексной адресации, в котором в качестве базового регистра используется генератор констант. При этом трансляция проводится с таким режимом, что в регистр R3 аппаратно подставляется нулевое значение. Таким образом, данная команда транслируется как mov 200h(R3), 10(R5)

При этом содержимое R3 на момент выполнения команды равно 0. Если быть более точным, то транслятор подставляет в коде команд ссылку (косвенная адресация) не на R3, а на R2. Программист, однако, может не вникать в нюансы кодирования, автоматически проводимым ассемблером, и просто использовать символ ‘&’ для обозначения абсолютного режима адресации.

.4.5 Косвенная адресация

Косвенная адресация применима только к операнду-источнику. Признаком косвенной адресации является символ ‘@’ за которым следует имя регистра. В этом случае в качестве операнда-источника используется содержимое ячейки памяти, адрес которой содержится в данном регистре.

Пример: mov.w @R12, &200h

Содержимое ячейки памяти (слово), адрес которой содержится в регистре 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 Непосредственная адресация

Данный режим применяется только для операндов-источников и предназначен для использования констант, определенных на этапе компиляции программы. Для обозначения этого режима используется символ ‘#’, за которым следует численное значение самой константы.

Пример mov #1234, R12

В этом примере число 1234 загружается в регистр R12.

Абсолютная адресация не является самостоятельным типом. При кодировке данной команды ассемблер заменяет эту инструкцию следующей последовательностью:

mov @PC+, R12

dw 1234

В данной реализации код команды mov занимает в памяти два байта. После вычитывания кода команды содержимое регистра PC автоматически увеличивается на 2, после чего PC содержит адрес, по которому располагается константа 1234. Согласно алгоритму работы косвенной адресации, содержимое ячейки памяти, адрес которой находится в PC (т.е. значение 1234), пересылается в R12, после чего содержимое PC опять увеличивается на 2, т.к. задан режим с автоинкрементом. Таким образом, после исполнения команды PC будет содержать адрес следующей за директивой dw инструкции.

Следует заметить, однако, что в том случае, если в качестве константы в программе указано одно из значений, генерируемых генератором констант, ассемблер автоматически подставит более короткий код, со ссылкой на регистры R2/R3 в зависимости от значения этой константы.

2. Система команд MSP микроконтроллеров


Все команды MSP можно разделить на основные (базовые) и эмулированные. Основные команды - это инструкции, которые собственно исполняет процессор. Эмулированные команды представляют собой мнемоники, которые на этапе компиляции автоматически заменяются ассемблером на ту или другую команду из основного набора. Всего имеется 27 базовых команд и 24 эмулируемых.

Базовые команды условно делятся на 3 группы: это двухадресные команды, одноадресные команды и команды переходов.

Для описания действий процессора при исполнении инструкций введем некоторые обозначения:

src (source) - операнд источник, может быть представлен любым типом адресации;

dst (destination) - операнд приемник, может быть представлен регистровым, индексным, символьным или абсолютным режимами адресации;

label - метка в теле программы;

LSB (less significant bit) - младший значащий бит;(most significant bit) - старший значащий бит;

+ операция арифметического сложения;

операция арифметического вычитания;

& операция ЛОГИЧЕСКОЕ И;

| операция ЛОГИЧЕСКОЕ ИЛИ;

^ операция ИСКЛЮЧАЮЩЕЕ ИЛИ;

~ операция ЛОГИЧЕСКОЙ ИНВЕРСИИ;

ß записать.

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#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&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#100, 0(R12)

Ø Команда: DADD - Decimal ADDition - сложение операндов в BCD формате с учетом переноса

Синтаксис: dadd src, dst

Операция: dst ßdst + src + C

Описание: Команда используется в предположении, что оба операнда имеют двоично-десятичную кодировку - BCD (Binary Coded Decimal). BCD кодировка используется в основном для подготовки числовых данных, поразрядно выводимых на индикатор.кодировка предполагает, что в каждом полубайте операнда может находиться число в диапазоне 0 - 9. При сложении двух BCD чисел результатом исполнения команды является также правильное BCD число.

Флаги: флаги CZNV модифицируются согласно результату операции

Пример : Пусть R5 содержит значение 1234h, а R6 - 6789h. При выполнении командыR5, R6

регистр R6 получит значение 8023h. Т.е. шестнадцатеричные цифры трактуются как десятичные. В противоположность этому при тех же исходных условиях командаR5, R6

загрузит в R6 значение 79BDh. Это происходит потому, что

h+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

Описание: В приемнике dst устанавливаются в единицы те биты, которые были установлены в источнике src. Фактически выполняется операция ЛОГИЧЕСКОЕ ИЛИ.

Флаги: Не модифицируются

Пример: Установить 7-й и 1-й бит в регистре R12.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,=1, если оба операнда отрицательные, в противном случае V=0.

Все двухадресные команды поддерживают как байтовую, так и словную форму.

Объем памяти, занимаемый двухадресными командами, а также скорость их исполнения не зависит от конкретной команды, а определяется исключительно режимом адресации приемника и источника. В таблице 2 приведены значения скорости исполнения команды и объем памяти, занимаемый командой, в зависимости от режима адресации источника/приемника. В числителе приведена скорость исполнения в машинных циклах, в знаменателе - объем памяти в байтах.

Таблица 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

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

Флаги: флаги 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 тактов.

 

.3 Команды переходов


Команды переходов могут быть условными и безусловными. Условные переходы выполняются на основе анализа состояния битов в статусном регистре SR. Переход осуществляется относительно содержимого регистра PC на расстояние от -511 до 512 слов.

Для некоторых команд условных переходов ассемблер поддерживает альтернативную нотацию.

Ø Команда: JNE/JNZ - Jump if Not Equal / Jump if Not Zero -прыжок если не равно / прыжок если не ноль

Синтаксис: jne label

jnz label

Описание: Тестируется состояние бита 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, R10BitIsZero

. . . .:

Ø Команда: JN - Jump if Negative -прыжок если минус

Синтаксис: jn label

Описание: Тестируется состояние бита N статусного регистра SR. Если N=1 осуществляется переход на метку label.

Флаги: Не модифицируются

Пример: В регистр R12 записать сумму всех положительных значений в блоке ОЗУ с начальным адресом 2A0h и размером 50 байт.

mov #0, R12 ; обнуляем сумму

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, пропустить след. команду

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 ; сравниваем текущее слово с текущим

; максимумом

mov -2(R15), R12 ; иначе меняем текущий максимум

skip: sub #1, R13 ; проверяем окончание цикла

jne loop ; если цикл не закончен, переход на начало

; цикла

Ø Команда: JL - Jump if Less -прыжок если меньше

Синтаксис: jl label

Описание: Если результат операции N^V равен 1, осуществляется переход на метку label. Команда JGE обычно используется после сравнения знаковых операндов.

Флаги: Не модифицируются

Ø Команда: JMP - Jump -прыжок

Синтаксис: jmp label

Описание: Безусловный переход на метку label

Флаги: Не модифицируются

Все команды переходов в памяти занимают 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 подставляется из генератора констант.

Ø Команда: 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.b dst

Эмуляция: xor #0FFFFh, dst.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.

Ø Команда: 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 - очистить

Синтаксис: 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

Синтаксис: 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

Описание: Не выполняет никаких операций. Используется для организации программной задержки на один такт.

3. Периферийные устройства микроконтроллеров MSP430F1xx

 

.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-ти разрядный АЦП;

аналоговый компаратор.

Микросхема 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

Бит 1 порта1 ; Вход/Выход модуля 0 захвата/сравнения Таймера А

P1.2/TA1

14

I/O

Бит 2 порта1 ; Вход/Выход модуля 1 захвата/сравнения Таймера А

P1.3/TA2

15

I/O

Бит 3 порта1 ; Вход/Выход модуля 2 захвата/сравнения Таймера А

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

Бит 2 порта 2; Выход Аналогового компаратора; Вход/Выход модуля 0 захвата/сравнения Таймера А

P2.3/CA0/TA1

23

I/O

Бит 3 порта 2 ; Вход аналогового компаратора; Выход модуля сравнения 1 Таймера А

P2.4/CA1/TA2

24

I/O

Бит 4 порта 2 ; Вход аналогового компаратора; Выход модуля сравнения 2 Таймера А

P2.5/ROSC

25

I/O

Бит 5 порта 2 ; Вывод для подключения внешнего резистора DCO

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

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

Бит 0 порта 4; Вход/Выход модуля 0 захвата/сравнения Таймера B

P4.1/TB1

37

I/O

Бит 1 порта 4; Вход/Выход модуля 1 захвата/сравнения Таймера B

P4.2/TB2

38

I/O

Бит 2 порта 4; Вход/Выход модуля 2 захвата/сравнения Таймера B

P4.3/TB3

39

I/O

Бит 3 порта 4; Вход/Выход модуля 3 захвата/сравнения Таймера B

P4.4/TB4

40

I/O

Бит 4 порта 4; Вход/Выход модуля 4 захвата/сравнения Таймера B

P4.5/TB5

41

I/O

Бит 5 порта 4; Вход/Выход модуля 5 захвата/сравнения Таймера B

P4.6/TB6

42

I/O

Бит 6 порта 4; Вход/Выход модуля 6 захвата/сравнения Таймера B

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

Бит 7 порта 5; Вход переключения выходов Таймера В в треть состояние

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

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 интерфейса

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 памяти во время ее программирования.

Маскируемые прерывания генерируются периферийными модулями.

Для обслуживания прерываний используются подпрограммы обработки прерываний 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

Модули СС1-СС6 таймера В7, переполнение таймера B7

Маскир.

11

FFF6h

Аналоговый компаратор

Маскир.

10

FFF4h

WatchDog таймер в режиме интервального таймера

Маскир.

9

FFF2h

Приемник USART0

Маскир.

8

FFF0h

Передатчик USART0

Маскир.

7

FFEEh

АЦП

Маскир.

6

FFECh

СС0 таймера А3

Маскир.

5

FFEAh

СС1,СС2 таймера А3, переполнение таймера А3

Маскир.

4

FFE8h

Параллельный порт P1

Маскир.

3

FFE6h

Приемник USART1

Маскир.

2

FFE4h

Передатчик USART1

Маскир.

1

FFE2h

Параллельный порт P2

Маскир.

0 низший

FFE0h

Зарезервирован

Маскир.


При возникновении прерываний процессор выполняет следующие действия:

1)   если процессор находился в активном режиме, он завершает исполнение текущей инструкции; если процессор находился в остановленном режиме - он переходит в активное состояние;

2)      программный счетчик PC, указывающий на следующую инструкцию, сохраняется в стеке;

)        статусный регистр SR сохраняется в стеке;

)        вырабатывается прерывание с наивысшим приоритетом;

)        сбрасывается флаг требования прерывания, если данному вектору соответствует единственному источник;

)        все биты статусного регистра SR кроме SCG0 сбрасываются в 0; т.к. бит GIE=0 дальнейшие маскируемые прерывания запрещаются;

)        в программный счетчик PC загружается содержимое выбранного вектора прерывания.

Как правило, индивидуальные биты разрешения и флаги требования прерывания сосредоточены в регистрах управления периферийных устройств. Однако ряд битов, ответственных за исполнение прерываний находятся в регистрах, расположенных в области SFR. Ко всем регистрам в области 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 - зарезервированы.

·        Бит 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) - флаг требования прерывание при аварии осциллятора. Устанавливается аппаратно, если в течение интервала времени, приблизительно равного 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> ; включаем стандартный файл определений, чтобы

; можно было обращаться к регистрам и битам по

; их именам

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 Система тактирования


Внутреннее тактирование микроконтроллеров MSP430 осуществляется с помощью трех различных тактовых сигналов:

·    MCLK - Master Clock - используется для тактирования процессорного ядра микроконтроллера;

·        SMCLK - Sub-Main Clock - используется для тактирования периферийных устройств;

·        ACLK - Auxiliary Clock - вспомогательная частота, также может использоваться для тактирования периферийных устройств.

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

Рисунок 2. Структурная схема модуля тактирования

Как видно из рисунка, систему тактирования можно гибко настраивать, исходя из требований прикладной задачи, которая реализуется 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 выключено; вся периферия активна

LPM1

0

1

0

1

CPU выключен; DCO выключен, если не используется для MCLK или SMCLK; вся периферия активна

LPM2

1

0

0

1

CPU, SMCLK , DCO выключены; RC генератор и ACLK активны

LPM3

1

1

0

1

Активен только ACLK

LPM4

X

x

1

1

CPU и вся периферия остановлены


Во всех режимах пониженного потребления, включая 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.

Кроме битов, расположенных в статусном регистре, на работу модуля тактирования влияют биты, расположенные в собственных регистрах управления. Регистры управления модуля тактирования приведены в таблице 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

XT5V

RSEL 2,1,0


·    Бит 7 - XT2OFF - выключение генератора XT2. Устанавливается/сбрасывается программно для запрета/разрешения работы генератора XT2. По сбросу в этот бит записывается 1, поэтому по умолчанию генератор XT2 запрещен.

·        Бит 6 - XTS (XT1 Select) - выбор режима генератора LFXT1. Устанавливается программно для выбора режима работы LFXT1:

0 - низкочастотный режим (Low Frequency Mode);

- высокочастотный режим (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

Бит 3 - XT5V - всегда должен быть сброшен.

·    Биты 2, 1, 0 - RSEL (Resistor Select) - выбор резистора. Комбинация этих бит устанавливает номинал внутреннего резистора RC генератора, что, в свою очередь, приводит к перестройке диапазона частоты, генерируемой RC генератором. При сбросе в эту группу бит аппаратно записывается комбинация 100b, что соответствует среднему диапазону частот. Зависимость генерируемой частоты DCO от содержимого этих бит будет рассмотрена позже.


SELM 1,0

DIVM 1,0

SELS

DIVS 1,0

DCOR


·    Бит 7, 6 - SELM (Select MCLK) - выбор источника для MCLK

SELM1

SELM0

Источник

0

0

DCOCLK

0

1

DCOCLK

1

0

XT2CLK

1

1

 LFXT1CLK


·    Биты 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;

- источник XT2CLK.

·    Биты 2 и 1 - DIVS (Divider SMCLK) - делитель частоты SMCLK. Устанавливают коэффициент делителя для частоты SMCLK

DIVS1DIVS0Делитель



0

0

 1 / 1

0

1

 1 / 2

1

0

 1 / 4

1

1

 1 / 8


·    Бит 0 - DCOR (DCO Resistor) - выбор частотозадающего резистора для RC генератора DCO

0 - внутренний резистор;

- внешний резистор, подключаемый к порту 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

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, необходимо программно организовать периодическое измерение и подстройку генерируемой частоты таким образом, чтобы отношение 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

Для инициализации системы тактирования необходимо выполнить следующие шаги:

1)   Включить генератор XT2;

2)      Очистить бит OFIFG в регистре IFG1;

)        Выдержать паузу не менее 50 μs ( см. описание IFG1.OFIFG в п.3.2);

)        Проверить состояние бита OFIFG;

)        Если OFIFG=1 (генератор еще не завелся) перейти к пункту 2;

)        Настроить MCLK, SMCLK

)        Выключить 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

 

.4 Сторожевой таймер


Сторожевой таймер (WatchDog Timer) предназначен для сброса CPU, в том случае если программа, в результате каких-либо сбоев, начинает исполнять несанкционированные команды. Сторожевой таймер, как правило, организуется в виде свободно бегущего таймера-счетчика, который при его переполнении вызывает аппаратный сброс всего микроконтроллера. Для исключения непредусмотренного сброса, программа должна сама периодически сбрасывать этот таймер.

В 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 - остановка сторожевого таймера.

0 - таймер активен;

- таймер остановлен.

·    Бит 6 - WDTNMIES (NMI Edge Select) - выбор активного фронта вывода NMI.

0 - активен растущий фронт;

- активен падающий фронт.

·    Бит 5 - WDTNMI - определяет функцию вывода RESET/NMI

0 - вывод функционирует как RESET;

- вывод функционирует как NMI.

·    Бит 4 - WDTMSEL (WDT Mode Select) - выбор режима сторожевого таймера

0 - сторожевой таймер;

- интервальный таймер.

·    Бит 3 - WDTCNTCL (WDT Counter Clear) - сброс сторожевого таймера. Запись логической 1 в этот бит приводит к сбросу сторожевого таймера. В том случае, если сторожевой таймер разрешен (WDTHOLD=0) программа должна периодически устанавливать этот бит во избежание системного сброса. Этот бит сбрасывается в 0 автоматически, поэтому при чтении содержимое этого бита всегда 0.

·        Бит 2 - WDTSSEL (WDT Source Select) - выбор источника тактирования.

0 - тактирование осуществляется частотой SMCLK;

- тактирование осуществляется частотой ACLK.

·    Бит 1,0 - WDTIS (WDT Interval Select) - выбор интервала переполнения сторожевого таймера. Комбинация состояния этих бит дает возможность установить период переполнения счетчика. Если F - частота тактирования счетчика в Герцах, то период переполнения в секундах определиться следующим образом:

WDTIS1

WDTIS0

Интервал

0

0

 32768 / F

0

1

 8192 / F

1

0

 512 / F

1

1

 64 / F


Следует помнить, что даже в тех приложениях, где планируется использовать сторожевой таймер, подключать его имеет смысл только тогда, когда вся программы отлажена. Поэтому обычно на этапе разработке программы его отключают. Сделать это можно, например, командой

mov #5A80h, &WDTCTL

или#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

 

.5 Аппаратный умножитель


В системе команд MSP микроконтроллеров нет команд, производящих умножение и деление. Однако в старших моделях имеется периферийное устройство, с помощью которого можно производить 8-ми и 16-ти разрядные операции умножения. Наличие быстрого аппаратного умножителя с возможностью накопления результата диктуется необходимостью, в ряде случаев, использования MSP микроконтроллеров для цифровой обработки сигналов в реальном времени, например для реализации цифровых фильтров.

Встроенный аппаратный умножитель позволяет производить умножение и умножение с накоплением знаковых и беззнаковых 8-ми и 16-ти битных операндов с получением 32-ти разрядного результата.

Для того чтобы выполнить операцию умножения необходимо первый операнд записать в определенный регистр умножителя, в зависимости от того, какая именно требуется операция, после чего записать второй операнд в специальный регистр. Практически сразу после этого из регистра результата можно вычитывать продукт умножения. Операция умножения с накоплением производит перемножение содержимого регистров первого и второго операндов и сложение полученного произведения с текущим содержимым регистра результата. Результат умножения сохраняется в трех 16-ти разрядных регистрах - младшего и старшего слова произведения, и регистре расширения, где фиксируется переполнение при сложении или знак результата.

Регистры аппаратного умножителя приведены в таблице 9

Таблица 9

Наименование

Назначение

Адрес

MPY

Регистр первого операнда для беззнакового умножения

130h

MPYS

Регистр первого операнда для знакового умножения

132р

MAC

Регистр первого операнда для беззнакового умножения с накоплением

134р

MACS

Регистр первого операнда для знакового умножения с накоплением

136h

OP2

Регистр второго операнда

138h

RESLO

Регистр младшего слова результата

13Ah

RESHI

Регистр старшего слова результата

13Ch

SUMEX

Регистр расширения суммы

13Eh

Содержимое регистра SUMEXT зависит от типа операции. Его возможные состояния показаны в таблице 10.

Таблица 10

Операция

Содержимое SUMEXT

MPY

Всегда 0

MPYS

0 - если результат положителен; FFFFh - если результат отрицателен

MAC

0 - если нет переноса из 15-го бита RESHI; FFFFh - если есть перенос из 15-го бита RESHI

MACS

0 - если результат положителен; FFFFh - если результат отрицателен


ПРИМЕР.

Вычислить результат выражения R13:R12 = 1234 * R4 + 5678 * R5 ,

где

R13 - старшее слово результата;

R12 - младшее слово результата;

R4, R5 - беззнаковые 16-ти разрядные переменные.

mov #1234, &MPYR4, &OP2#5678, &MACR5, &OP2&RESLO, R12 &RESHI, R13

ПРИМЕЧАНИЕ. Если умножитель используется как в основной программе, так и в подпрограмме обработки прерывания, может возникнуть ситуация, когда прерывание происходит во время загрузки и чтения результата основной программой. В этом случае режим операции и сами операнды могут быть потеряны, и результат окажется непредсказуем. Для того чтобы избежать подобной ситуации рекомендуется в основной программе запрещать все прерывания перед загрузкой данных в умножитель и разрешать прерывания после вычитывания результата.

 

.6 Порты ввода/вывода


Модель MSP430F149 имеет 6 двунаправленных 8-ми битных порта ввода/вывода P1 - P6. Каждая линия порта может быть настроена для ввода или вывода цифровой информации или поддержки работы периферийных устройств. Кроме того, все линии портов P1 и P2 способны работать как выводы внешних прерываний. Следует заметить, однако, что прерывания от линий каждого порта сгруппированы в общий вектор прерывания: для порта P1 - вектор с адресом FFE8h, а для P2 - FFE2h. Поэтому в подпрограмме обработки прерывания необходимо анализировать флаги прерывания с целью определения его источника.

Работа всех портов регистров ввода/вывода определяется содержимым ряда регистров управления, при этом каждый бит в этих регистрах соответствует одноименной линии порта.

Имеются следующие регистры, управляющие всеми портами ввода/вывода (x - индекс порта):

Ø PxSEL (Port Select) - выбирает функцию линии:

0 - линия предназначена для ввода/вывода;

- линия предназначена для периферийного устройства.

Ø PxDIR (Port Direction) - направление передачи данных. Как правило, воздействует на линии порта только в том случае, если соответствующий бит в регистре PxSEL равен 0.

0 - линия настроена на ввод;

- линия настроена на вывод;

Ø PxOUT - вывод. В том случае, если линия настроена вывод, содержимое битов этого регистра будет задавать логическое состояние внешнего вывода.

Ø  PxIN - ввод. Содержимое бит этого регистра отражает логическое состояние линий порта. Регистр доступен только для чтения.

Для обеспечения функционирования линий портов P1 и P2 в качестве источников прерывания имеются ряд дополнительных регистров:

Ø PxIE (Interrupt Enable) - разрешение прерывания

0 - запрещает прерывание;

- разрешает прерывание.

Ø PxIES (Interrupt Edge Select) - выбор активного фронта прерывания

0 - растущий активный фронт;

- падающий активный фронт.

Ø PxIFG (Interrupt Flag) - флаг прерывания. Устанавливается в 1 аппаратно, если на линии порта зарегистрировано событие, определенное соответствующим битом регистра PxIES. Сбрасывается в 0 программно.

Полный перечень регистров портов ввода/вывода приведен в таблице 11.

Таблица 11

Регистр

Назначение

Адрес

P1IN

Состояние порта P1

20h

P1OUT

Установка порта P1

21h

P1DIR

Направление порта P1

22h

P1IFG

Флаги прерывания порта P1

23h

P1IES

Выбор фронта прерывания порта P1

24h

P1IE

Разрешение прерывания порта P1

25h

P1SEL

Выбор функции порта P1

26h

P2IN

Состояние порта P2

28h

P2OUT

Установка порта P2

29h

P2DIR

Направление порта P2

2Ah

P2IFG

Флаги прерывания порта P2

2Bh

P2IES

Выбор фронта прерывания порта P1

2Ch

P2IE

Разрешение прерывания порта P1

2Dh

P2SEL

Выбор функции порта P2

2Eh

P3IN

Состояние порта P3

18h

P3OUT

Установка порта P3

19h

P3DIR

Направление порта P3

1Ah

P3SEL

Выбор функции порта P3

1Bh

P4IN

Состояние порта P4

1Ch

P4OUT

Установка порта P4

1Dh

P4DIR

Направление порта P4

1Eh

P4SEL

Выбор функции порта P4

1Fh

P5IN

Состояние порта P5

30h

P5OUT

Установка порта P5

31h

P5DIR

Направление порта P5

32h

P5SEL

Выбор функции порта P5

33h

P6IN

Состояние порта P6

34h

P6OUT

Установка порта P6

35h

P6DIR

Направление порта P5

36h

P6SEL

Выбор функции порта P6


ПРИМЕР.

Сконфигурировать порт 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

.b #0C0h, &P1OUT.b #0D0h, &P1DIR.b #21h, &P1SEL.b #4, &P1IES.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

 

.7 Таймер A3


Таймер А3 является 16-ти битным таймером-счетчиком. На его базе реализованы 3 модуля захвата/сравнения (capture/compare) - CC0, CC1 и СС2. Каждый из этих модулей может работать либо в режиме захвата, либо в режиме сравнения.

Модули захвата обычно используются для точного измерения временных интервалов между какими-либо событиями, например фронтами внешних импульсов. Для организации работы модуля захвата обычно запускают таймер в режиме свободного счета, входная логика модуля захвата настраивается на определенный тип события (растущий/падающий фронт). При возникновении внешнего события, текущее содержимое таймера автоматически перезаписывается в специальный регистр захвата. Кроме того, устанавливается флаг требования прерывания модуля захвата, отреагировать на который программа может несколько позже, но при этом, содержимое регистра захвата будет точно соответствовать моменту события.

Модули сравнения обычно используются для генерации событий на внешних выводах микроконтроллера в заданный момент времени. Для этого блок выходной логики, связанный с внешним выводом, настраивают на тот или иной тип события (установка, сброс или переключение вывода). В специальный регистр сравнения записывается значение, соответствующее моменту генерации события. С помощью цифрового компаратора модуль периодически сравнивает текущее содержимое таймера и регистра сравнения. При их равенстве вырабатывается внутренний сигнал EQU, который заставляет сработать блок выходной логики. Кроме того, устанавливается флаг требования прерывания, который может быть обработан процессором уже после генерации требуемого события.

Структурная схема таймера А3 приведена на рисунке 3.

Рисунок 3. Структурная схема таймера А3

Текущее содержимое таймера находится в регистре TAR (Timer A Register). Тактирование таймера осуществляется с помощью одного из источников - внутренние сигналы ACLK или SMCLK, или внешние сигналы, подключаемые к выводам P1.0/TACLK и P2.1/INCLK. Выбрать источник можно с помощью битов TASSEL в регистре управления таймера. Выбранная входная частота подается на таймер через делитель DIV, управляемый битами ID регистра управления.

Таймер A обеспечивает несколько режимов работы:

·    Режим продолжительного счета (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 можно выбрать внутренний сигнал выхода встроенного аналогового компаратора CAOUT (см. п. 3.10). В качестве второго входа модуля CC2 можно выбрать внутреннюю частоту ACLK. Эта возможность предусмотрена для реализации умножителя частоты DCO (см.п.3.3).

Рисунок 4. Режимы работы таймера A3

Подключение выходных сигналов к модулю сравнения производится с помощью регистров P1SEL и P2SEL (см.п. 3.6). Выход ADC12sc модуля CC1 является внутренним сигналом, предназначенным для автоматического старта преобразования АЦП при срабатывании модуля сравнения.

Блок выходной логики модуля сравнения CC_OUT можно запрограммировать на работу в одном из 8-ми возможных режимов:

·    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

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) - комбинация состояния этих бит определяет коэффициент деления входного делителя таймера

ID1ID0Коэффициент



0

0

1 / 1

0

1

1 / 2

1

0

1 / 4

1

1

1 / 8

·   
Биты 5, 4 - MC (Mode Select) - комбинация состояния этих бит определяет текущий режим таймера

MC1MC0Режим



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

 

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) - выбирают сигналы для входа модуля захвата.

CCIS1CCIS0Вход



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) - установка/ сброс этого бита выбирает режим захвата или сравнения модуля соответственно.

·        Биты 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

Переключение : TAR=CCRx, 0 : TAR=CCR0

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

Переключение : TAR=CCRx, 1 : TAR=CCR0

1

1

1

Reset/set

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. Регистр доступен только по чтению. В этом регистре генерируется код, позволяющий определить источник прерывания. Возможны следующие коды содержимого TAIV:

·    0 - нет прерываний;

·        2 - установлен флаг TACCTL1.CCIFG;

·        4 - установлен флаг TACCTL2.CCIFG;

·        10 - установлен флаг TACTL.TAIFG

Если установлены несколько флагов одновременно, в регистре будет генерироваться меньшее значение. Вычитывание из регистра определенного кода автоматически сбрасывает соответствующий флаг IFG. Использование регистра TAIV дает возможность быстрого ветвления на подпрограмму обработки прерываний. Типовая последовательность команд для обработки прерываний различных источников таймера приведена ниже.

cc0: . . . ; ISR для TACCTL0.CCIFG: add &TAIV, PC ; общая ISR для TACCTL1.CCIFG,

Reti ; TACCTL2.CCIFG и TACTL.TAIFG

jmp cc1cc2: . . . ; начало ISR по TACTL.TAIFG

reti ; можно заменить на “ jmp TimHndl

cc1: . . . ; начало ISR по TACCTL1.CCIFG

reti ; можно заменить на “ jmp TimHndl

cc2: . . . ; начало ISR по TACCTL2.CCIFG

reti ; можно заменить на “ jmp TimHndl

В данном фрагменте прерывание для модуля TACC0 подпрограмма обработки прерывания описывается самостоятельно, так как для этого модуля имеется собственный вектор прерывания. Для модулей TACC1, 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.

#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 режиме

 

Рисунок 5. Временная диаграммы генерации импульсов.

 

.8 Таймер B7


Таймер B7 имеет структуру, аналогичную таймеру A3, но имеет следующие отличия:

·    Разрядность таймера может быть программно задана как 8, 10, 12 или 16 разрядов.

·        На базе таймера B реализовано 7 модулей захвата/сравнения - TBCC0 … TBCC6.

·        Регистры TBCCRx имеют буфер по записи и могут быть сгруппированы, т.е. запись данных в один из регистров приводит к обновлению данных во всех регистрах группы.

·        Все выходы модулей сравнения могут быть переведены в высокоимпедансное состояние.

·        Отсутствует бит SCCI в регистрах управления модулей захвата/сравнения.

Общая структурная схема таймера B7 приведена на рисунке 6.

Рисунок 6. Структурная схема таймера B7

Дополнительные возможности таймера B7 дают удобные средства построения на его базе многоканальных широтно-импульсных (ШИМ) генераторов. В этом случае используется UP или UP/DOWN режимы таймера. С помощью регистра TBCCR0 модуля сравнения задается несущая частота модуляции, а содержимое TBCCRx определяет длительность генерируемых импульсов. Изменяя содержимое регистров TBCCRx можно динамически менять ширину импульсов в различных каналах. С помощью таймера B7 можно, например, реализовать управление шестью ключами, включенных в стойки инверторов для трехфазной сети. Для качественного регулирования необходимо, чтобы перестройка всех шести каналов ШИМ проводилась одновременно. Синхронную перестройку ШИМ генератора на базе таймера A реализовать затруднительно, т.к. программа может изменять содержимое регистров CCR только последовательно. Для достижения синхронности в таймере B7 используется буферирование регистров TBCCRx и объединение их в группы.

В отличии от таймера A, регистры TBCCRx подключены к компаратору не напрямую, а через регистры-защелки TBCLx (Timer B Compare Latch), так, как это показано на рис. 7.

Рисунок 7. Буферизированное подключение TBCCR

Таким образом, компаратор сравнивает текущее содержимое таймера B не с содержимым регистра TBCCRx, а с TBCLx. Прямого доступа к регистрам TBCLx нет, однако данные в них могут переписываться из TBCCRx в ответ на какое-либо событие - например переход таймера через 0. Это дает возможность в начале периода работы таймера последовательно записать требуемые значения в регистры TBCCRx, а воспримутся эти значения синхронно для всех каналов со следующего периода.

Еще одна возможность синхронизации многоканальных ШИМ заключается в объединении нескольких модулей сравнения в группы. Группа может состоять из 2-х, 3-х или всех 7-ми модулей. Один модуль в группе является ведущим, остальные - ведомыми. Если программа записывает новые данные в регистры TBCCRx ведомых модулей, эти данные не воспринимаются (не переписываются в TBCLx) до тех пор, пока не будет произведена запись в TBCCR ведущего модуля. Таким образом, данные из TBCCRx всех модулей группы подхватываются одновременно в момент записи TBCL ведущего модуля.

Наконец, внешние выводы всех модулей сравнения могут быть переведены в высокоимпедансное состояние внешним сигналом, подключенным к выводу P5.7/TBOUTH. Для выключения выходов модулей сравнения необходимо сконфигурировать вывод P5.7/TBOUTH для поддержки периферийных функций (через регистр P5SEL) и подать на него потенциал логической единицы.

Регистры таймера B7 представлены в таблице 13.

Таблица 13

Регистр

Назначение

Адрес

TBR

Регистр содержимого таймера B

190h

TBCTL

Регистр управления таймера В

180h

TBCCR0

Регистр захвата/сравнения CC0

192h

Регистр управления 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-ти разрядный регистр текущего содержимого таймера. Регистр доступен как для записи, так и для чтения с помощью словных форм инструкций.

Ø  TBCTL (Timer B Control) - содержит биты управления таймера B. Регистр доступен как для записи, так и для чтения с помощью словных форм инструкций и содержит следующие биты.

 - -

TBCLGRP1,0

CNTL1,0

-

TBSSEL1,0


ID 1, 0

MC1,0

-

TBCLR

TBIE

TBIFG


·    Бит 15 - зарезервирован.

·        Биты 14, 13 - TBCLGRP (Timer B Compare Latch Group) - группирование загрузки модулей сравнения таймера B.

TBCLGRP1

TBCLGRP0

Группы

Ведущий модуль

0

0

нет

нет

0

1

TBCC1+TBCC2 TBCC3+TBCC4 TBCC5+TBCC6

TBCC1 TBCC3 TBCC5

1

0

TBCC1+TBCC2+ TBCC3 TBCC4+ TBCC5+TBCC6

TBCC1 TBCC4

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.

·

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) - комбинация состояния этих бит определяет текущий режим таймера

MC1MC0Режим



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) - содержат биты управления модулей захвата/сравнения. Все регистры имеют идентичную структуру и доступны по записи и чтению с помощью словных форм инструкций. Регистры содержат следующие биты

CM1, 0

CCIS1,0

SCS

CLLD1,0

CAP


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) - выбирают сигналы для входа модуля захвата.

CCIS1CCIS0Вход



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) - загрузка защелок при сравнении.

Комбинация этих бит определяет событие, по которому содержимое регистров TBCCRx перезаписывается в защелки TBCLx

CLLD1

CLLD0

Событие

0

0

Запись в TBCCRx (буферизации нет)

0

1

TBR досчитывает до 0

1

0

UP и Continuous режимы: TBR досчитывает до 0 UP/DOWN режим: TBR досчитывает до TBCL0 или до 0

1

1

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

Переключение : TBR=CCRx, 0 : TBR=CCR0

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

Переключение : TBR=CCRx, 1 : TBR=CCR0

1

1

1

Reset/set

0 : TBR=CCRx, 1 : TBR=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) - флаг требования прерывания. Устанавливается аппаратно при срабатывании модуля захвата/сравнения. Для 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.

3.9 Интерфейс USART


Интерфейс USART (Universal Synchronous/Asynchronous Receiver-Transmitter) -универсальный синхронно-асинхронный приемопередатчик - предназначен для обмена данными между микроконтроллером и внешними устройствами.

Микросхема 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

-

U1BR1

Управление скоростью USART1 ст. байт

7Dh

-

U1MCTL

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 информационных бит;

·        Адресный бит, используемый для коммуникации в многопроцессорных системах (опционально);

·        Бит паритета - устанавливается в зависимости от того четное или нечетное количество логических единиц содержит информационное поле (опционально);

·        Один или два стоповых битов - всегда высокий уровень.

 

.9.1.1 Передача данных

Передача данных инициируется записью передаваемых данных в буферный регистр передатчика UTXBUF. Из буферного регистра данные автоматически перезаписываются в выходной сдвиговый регистр, который выдвигает их через вывод микроконтроллера UTXD младшим битом вперед, опционально дополняя информационные биты адресным битом и/или битом паритета и обрамляя кадр стартовым и стоповым битами. На линии UTXD каждый бит удерживается в течение времени, определяемой текущей битовой скоростью, которая, в свою очередь, зависит от частоты тактирования UART и содержимого регистра UBR (USART Baud Rate).

После копирования данных в сдвиговый регистр аппаратно устанавливается флаг UTXIFGx в регистрах IFG1 или IFG2 (см. п.3.2), информируя пользователя, что буфер свободен и может принять следующий байт. Не дожидаясь окончания физической передачи первого кадра, в буфер UTXBUF может быть записан следующий байт. Как только первый байт, включая стоп-биты, будет выдвинут через вывод UTXD, второй байт, находящийся в UTXBUF, будет автоматически скопирован в сдвиговый регистр и начнется передача следующего кадра. Таким образом, за счет буферирования, осуществляется непрерывная передача данных кадр за кадром.

 

.9.1.2 Передача данных

Прием последовательных данных производится через вывод URXD микроконтроллера. Приемник UART ожидает перепад напряжения 1→ 0 на входе URXD. После того, как перепад обнаружен, приемник включает свой тактовый генератор и выдерживает время, равное половине длительности одного бита. По прошествии этого интервала времени приемник трижды измеряет напряжение на линии. Если хотя бы два результата измерения оказались нулевыми, принимается решение, что зафиксирован стартовый бит. Если были зарегистрировано две или более логические единицы, принимается решение, что перепад на входе URXD является следствием шумов на линии. В этом случае приемник переходит в фазу ожидания следующего старт-бита.

В том случае, если был опознан правильный старт-бит, сдвиговый регистр приемника начинает принимать данные. Через время, равное длительности одного бита, производится троекратное измерение потенциала на линии. Решение о состоянии бита производится по мажоритарному принципу. После приема всего кадра данных производится контроль стоп-бита. Если его значение оказалось равным нулю, в регистре управления приемника UART выставляется флаг ошибки кадра FE. Если использовался бит паритета и зафиксирована ошибка четности, выставляется флаг ошибки четности PE.

После приема всего кадра, данные из сдвигового регистра переписываются в буфер приемника URXBUF, а в регистре IFG1/IFG2 устанавливается флаг URXIFGx, сигнализирующий о принятом байте. До того как полученный байт будет вычитан из буфера, сдвиговый регистр способен принимать следующие данные. Однако если данные из буфера не будут вычитаны к моменту перезаписи байта из сдвигового регистра в буфер приемника, в статусном регистре приемника устанавливается флаг OE, сигнализируя о потере данных.

 

.9.1.3 Поддержка коммуникации в многопроцессорных системах

С помощью UART можно организовать обмен данными между несколькими микроконтроллерами, используя, например, аппаратный интерфейс RS485. Не вдаваясь в тонкости аппаратной реализации RS485, укажем, что все микроконтроллеры (абоненты) объединяются в локальную информационную сеть. При этом каждый передатчик одного абонента может быть соединен с приемниками всех других абонентов. Передачу всегда ведет один абонент с помощью блоков кадров (пакетов), а прием этих блоков осуществляют все абоненты сети. Для того чтобы абонент-получатель определил, что пакет предназначен именно для него, первый байт пакета, как правило, содержит информацию об адресе получателя. Если абонент-получатель распознал свой адрес, он принимает весь пакет, в противном случае пакет игнорируется. Поэтому для производительной работы в локальной сети необходим эффективный механизм распознавания начала информационного пакета. Для этих целей UART микроконтроллеров MSP430 поддерживает два механизма: использование адресного бита (address bit) и режим свободной линии (idle line).

Для режима idle line необходимо, чтобы пауза вежду последовательно передаваемыми кадрами в пакете не превышала длительности одного кадра. При получении первого кадра после паузы в регистре управления приемника аппаратно устанавливается бит RXWAKE, сигнализируя, что принят адресный байт. Программная установка другого бита этого регистра RXWIE позволяет приемнику игнорировать все не адресные байты (бит RXIFG не устанавливается). Таким образом, абонент-получатель нормально устанавливает бит RXWIE и ожидает получения первого байта, после чего сравнивает его содержимое с собственным адресом. Если адрес опознан, он сбрасывает бит RXWIE и принимает далее весь пакет. После приема адресованного ему пакета бит RXWIE взводится опять. В том случае, если адрес не опознан, RXWIE не сбрасывается, следовательно, остальные байты пакета отбрасываются приемником.

Для генерации абонентом-отправителем точного периода простоя на своей линии UTXD имеется специальный бит TXWAKE в регистре управления передатчика. Абонент-отправитель должен дождаться готовности передатчика (бит TXIFG должен быть установлен), установить в 1 бит TXWAKE, после чего записать произвольные данные в буфер UTXBUF. Т.к. бит TXWAKE установлен, физически данные передаваться не будут, но по окончанию длительности передачи кадра будет взведен флаг TXIFG, после чего можно передавать адресный байт. Бит TXWAKE сбрасывается автоматически после передачи паузы.

Логика работы локальной сети в режиме address bit очень похожа на режим idle line с той лишь разницей, что маркирование адресного байта производится не паузой при передаче пакетов, а наличием дополнительного бита в кадре, установленного в 1, в то время как все данные передаются со сброшенным адресным битом. Логика работы с битами RXWAKE и RXWIE аналогична вышеизложенной. Для того чтобы пометить начало пакета абонент-отправитель должен просто перед посылкой первого байта установить в 1 бит TXWAKE.

 

.9.1.4 Обнаружение стартового бита при приеме

В том случае, если необходимо вести прием данных при выключенном, с целью снижения потребления, тактировании UART, имеется механизм, позволяющий получить прерывание при поступлении стартового бита на вход приемника. Для этого используется бит URXSE, расположенный, как это не странно, в регистре управления передатчика. В том случае, если URXSE=1, разрешено прерывание по приему и на линию URXD приходит фронт стартового бита, берется прерывание с адресом готовности приемника. Подпрограмма обработки прерывания может определить причину возникновения прерывания по состоянию бита URXIFG. Если этот бит равен нулю, следовательно, обнаружен фронт старт бита, в противном случае, был принят очередной символ приемником UART. Определение фронта старт-бита дает возможность подпрограмме обработки прерывания активизировать тактировании UART для нормального приема всего кадра.

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, будет работать на скорости 115.2 kb/s. Отсюда возникает вопрос, насколько точно нужно согласовывать скорости передатчика на одной стороне и приемника на другой, чтобы данные принимались без ошибок. В первом приближении можно сказать, что скорости приемника и передатчика должны быть согласованы с точностью δ не хуже

δ ≤50%/n, где n - длина кадра.

Т.е. если используется 10-ти битный кадр (8 бит данных, старт и стоп биты), погрешность не должна превосходить 5%. Другими словами, погрешность округления полученного коэффициента деления не должна, в данном случае, быть больше 5%.

В нашем примере погрешность округления составит δ = 100% *(9-8.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. Таким образом, происходит подстройка длительности каждого бита в кадре. Если количество битов в кадре больше 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-ти битного поля№ бита кадра

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.

 

.9.1.6 Регистры USART

Ø UxCTL (USART Control) - содержит биты управления USART.

PENA

PEV

SPB

CHAR

LISTEN

SYNC

MM

SWRS


·    Бит 7 - PENA (Parity Enable) -разрешение паритета. Установка/сброс этого бита включает/выключает контроль четности единиц в кадре.

·        Бит 6 - PEV (Parity Even) - четность паритета. Установка/сброс этого бита выбирает паритет четности/нечетности в том случае, если паритет разрешен.

·        Бит 5 - SPB (Stop Bit) - состояние этого бита задает количество стоп-битов в конце кадра:

0 - 1 стоп бит,

- 2 стоп бита.

·    Бит 4 - CHAR (Character) - определяет длину информационного поля кадра:

0 - 7 битов,

1 - 8 битов.

·    Бит 3 - LISTEN - прослушивание. Установка этого бита подключает выход UTXD ко входу URXD внутри USART, что дает возможность приемнику прослушивать данные, передаваемые собственным передатчиком.

·        Бит 2 - SYNC (Synchronous) - должен быть сброшен для задания режима UART.

·        Бит 1 - MM (Multiprocessor Mode) - установка/сброс этого бита задает режим многопроцессорного протокола:

0 - режим свободной линии - idle line,

- режим адресного бита - 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


·   
Бит 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.

·        Бит 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

-


·   
Бит 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 для обеспечения требуемой скорости.

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.b #0, &U0MCTL.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 ; если нет, то цикл

 

.9.2 Режим SPI

Последовательный периферийный интерфейс SPI (Serial Peripheral Interface) обеспечивает высокоскоростной синхронный обмен данными между двумя микроконтроллерами или другими внешними устройствами. В обмене данными всегда принимают участие ведущее (master) и ведомое (slave) устройства. Для интерфейса используются следующие сигналы:

·    SIMO (Slave Input, Master Output) - вход ведомого, выход ведущего;

·        SOMI (Slave Output, Master Input) -выход ведомого, вход ведущего;

·        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 подать логическую единицу, все линии 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 битов,

- 8 битов.

·    Бит 3 - LISTEN - прослушивание. Установка этого бита подключает выход SIMO ко входу приемника внутри USART, что дает возможность приемнику прослушивать данные, передаваемые собственным передатчиком.

·        Бит 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 - нормальное тактирование;

- сдвиг тактирования на половину периода длительности такта.

·    Бит 6 - CKPL (Clock Polarity) - выбор полярности тактирования тактового сигнала UCLK . (см. рис.8)

0 - неактивный уровень низкий,

- неактивный уровень высокий.

·    Биты 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 -зарезервированы.

·        Бит 1 - STC (Slave Transmit Control) - управление передачей ведомого. Установка/сброс этого бита задает 3-х проводный (STE запрещен) или 4-х проводный (STE разрешен) режимы работы SPI соответственно.

·        Бит 0 - TXEPT (Transmitter Empty) - устанавливается в 1 аппаратно в том случае если TXBUF и сдвиговый регистр не содержит данных, в противном случае сбрасывается.

Рисунок 8. Временная диаграмма работы SPI

Ø UxRCTL (USART Control) - содержит биты управления приемника USART.

FE

-

OE

-

·   

·       
Бит 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 - зарезервированы.

·        Бит 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).

 

.9.3 Режим I2C

USART в режиме I2C обеспечивает интерфейс между микроконтроллером MSP430 и I2C-совместимыми устройствами, подключенными через 2-х проводную последовательную шину. Поддержка режима I2C реализована только в USART0. I2C контроллер обеспечивает следующие характеристики:

·    поддержка спецификации I2C v2.1 Philips Semiconductor

- Формат передачи байт/слово;

- 7-разрядный и 10-разрядный режимы адресации устройств;

Общий вызов;

Старт/рестарт/стоп;

Режим ведущий передатчик/ведомый приемник;

Режим ведущий приемник/ведомый передатчик;

Поддержка стандартного режима до 100 кбод и быстрого режима до 400

кбод;

·    Встроенная память FIFO для буферирования чтения и записи

·        Программируемый генератор скорости;

·        16-разрядный доступ к данным для увеличения пропускной способности шины;

·        Автоматический подсчет количества байт данных

·        Возможность работы в режимах пониженного энергопотребления;

·        Расширенные возможности прерываний

Контроллер I2C имеет достаточно сложную структуру, его работоспособность обеспечивается рядом дополнительных регистров управления. В данном документе работа USART в режиме I2C не рассматривается. Для детального рассмотрения работы контроллера обращайтесь к www.ti.com.

Структурная схема компаратора изображена на рис. 9.

Входы аналогового компаратора могут программно подключаться к внешним выводам микроконтроллера с помощью битов управления P2CAx. С помощью битов управления CAEX можно менять схему подключения физических входов компаратора к внешним выводам микроконтроллера, при этом одновременно производится инвертирование выхода компаратора. В некоторых случаях использование этого переключателя дает возможность компенсировать собственное напряжение смещения компаратора.

В состав аналогового компаратора входит источник опорного напряжения. Опорное напряжение источника можно с помощью управляющего бита CARSEL подключить к одному или другому входу компаратора. С помощью битом управления CAREF можно выбрать величину опорного напряжения, соответствующую Vcc/2, Vcc/4 или фиксированному напряжению, приблизительно равному 0.5 V. С помощью, битов CAREF можно также отключить источник опорного напряжения.

Рисунок 9. Структурная схема аналогового компаратора

В том случае если входные аналоговые напряжения меняются медленно, в момент равенства этих напряжений возможно многократное срабатывание компаратора. В некоторых случаях этот эффект можно подавить, подключив на выход компаратора встроенный RC фильтр с помощью бита CAF. Время срабатывания компаратора составляет около 200 ns, если фильтр не включен, и порядка 1.5 µs при включенном фильтре.

Выходной сигнал компаратора можно вывести на внешний вывод микроконтроллера P2.2/CAOUT/TA0 с помощью установок в регистре P2SEL, или использовать в качестве входа для модуля захвата/сравнения TACC1 (см. п. 3.7).

С целью минимизации потребления аналоговый компаратор может быть выключен битом CAON. В активном режиме компаратор и источник опорного напряжения потребляю ток в 45 µA каждый.

Регистры аналогового компаратора представлены в таблице 14.

Таблица 14

Имя

Назначение регистра

Адрес

Нач.значен.

CACTL1

Регистр управления 1

59h

0

CACTL2

Регистр управления 2

5Ah

0

CAPD

Регистр отключения цифровых формирователей

5Bh

0


Ø CACTL1 (Comparator A Control) - содержит биты управления компаратора.

CAEX

CARSEL

CAREF1, 0

CAON

CAIES

CAIE

CAIFG


·    Бит 7 - CAEX (Comparator Exchange) - изменение подключения.

0 - неивертирующий вход соответствует выводу CA0,

инвертирующий вход соответствует выводу CA1;

- неивертирующий вход соответствует выводу CA1,

инвертирующий вход соответствует выводу CA0;

·    Бит 6 - CARSEL (Comparator Reference Select) - выбор подключения опоры.

0 - опорное напряжение подключено к входу CA0;

- опорное напряжение подключено к входу CA1.

·    Биты 5,4 - CAREF (Comparator Reference) - выбор опорного напряжения.

CAREF1

CAREF0

Напряжение

0

0

Выключен

0

1

0.25 * Vcc

1

0

0.5 * Vcc

1

1

Диод


·   
Бит 3 - CAON. Установка/ сброс этого бита включает/выключает аналоговый компаратор

·        Бит 2 - CAIES (Comparator Interrupt Edge Select) - выбор фронта прерывания.

0 - прерывание по переходу 0à1 выхода компаратора;

- прерывание по переходу 1à0 выхода компаратора;

·    Бит 1 - CAIE (Comparator Interrupt Enable) - разрешение прерывания. Установка/сброс этого бита разрешает/запрещает прерывание от компаратора.

·        Бит 0 - CAIFG (Comparator Interrupt Flag) - флаг требования прерывания компаратора. Устанавливается аппаратно, если компаратор переключается согласно содержимому бита CAIES. Сбрасывается аппаратно, если берется прерывание, или программно.

Ø CACTL2 (Comparator A Control) - содержит биты управления компаратора.

-

P2CA1

P2CA0

CAF

CAOUT


·    Биты 7…4 -зарезервированы.

·        Бит 3 - P2CA1 - устанавливается/сбрасывается для подключения/отключения внешнего вывода к цепи CA1.

·        Бит 2 - P2CA0- устанавливается/сбрасывается для подключения/отключения внешнего вывода к цепи CA0.

·        Бит 1 - CAF (Comparator Filter) - установка/сброс этого бита подключает/ отключает встроенный RC фильтр.

·        Бит 0 - CAOUT - через этот бит программно читается выходное состояние компаратора. Бит доступен только по чтению.

Ø CAPD (Comparator Port Disable) - запрещение цифрового буфера порта P2. Назначение битов этого регистра заключается в следующем. Входные цепи порта P2, равно как и всех остальных портов, снабжены цепями формирования входных логических уровней, состоящих из двух КМОП транзисторов. Если входное напряжение близко к середине напряжения питания, это вызывает протекание сквозного тока через входные транзисторы, что влечет увеличение общего тока потребления. Т.к. предполагается, что на входы компаратора может быть подано любое аналоговое напряжение, с целью снижения потребления имеет смысл отключать входные буферы для портов P2.3 и P2.4. Логические единицы в 8-ми битном регистре CAPD запрещают входные буферы для соответствующих линий порта P2. Следует заметить, что действие регистра CAPD распространяется на весь порт P2. Если в каком-либо бите регистра CAPD взведена 1, соответствующая линия порта не может использоваться в качестве цифрового входа.

 

.11 Аналого-цифровой преобразователь ADC12

микроконтроллер цифровой преобразователь

Модуль ADC12 обеспечивает быстрое преобразование аналоговых напряжений в цифровой код. Модуль обладает следующими техническими характеристиками:

·    разрядность результирующего кода - 12 бит;

·        скорость преобразования - до 2*105 преобразований в секунду;

·        максимальная интегральная ошибка преобразования - менее 2 разрядов;

·        встроенное устройство выборки/хранения;

·        преобразование инициируется программным обеспечением или аппаратно от таймеров A или B;

·        встроенный генератор опорного напряжения 1.5 или 2.5 V;

·        буферная память преобразования и управления, позволяющая сохранить до 16 последовательных измерений;

·        восемь индивидуально конфигурируемых внешних входных каналов;

·        каналы преобразования для внутреннего температурного сенсора, аналогового питания и внешних опорных источников.

Структурная схема модуля АЦП приведена на рис. 10.

Основой модуля является 12-ти разрядный блок ADC последовательного приближения. Тактирование блока осуществляется частотой ADC12CLK, генерируемой от внутренних частот ACLK, MCLK, SMCLK или специального встроенного генератора ADC12OSC и деленной делителем DIV. Частота генератора ADC12OSC приблизительно равна 5MHz. В любом случае частота тактирования ADC12CLK должна находиться в диапазоне 0.45 - 6.3 MHz.

Рисунок 10. Структурная схема ADC12


Результирующий код АЦП генерируется согласно формуле

NADC = 4096 * (Vin - Vr-)/(Vr+ - Vr-)

где

Vin - входное напряжение;

Vr+ - опорное напряжение;

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

где - выходное сопротивление источника сигнала;

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 соответственно. Поэтому для гарантирования точности преобразования необходимо либо производить калибровку опорного напряжения, либо использовать внешний источник опоры. При использовании встроенного опорного напряжения рекомендуется между выводом VREF+ и выводом AVss подключать параллельно соединенные конденсаторы номиналом 10 µF и 100 nF.

С помощью переключателя, управляемого битами SREF можно подключить в качестве опоры Vr+ внешнее напряжение VeREF+ или аналоговое питание AVcc. С помощью переключателя, управляемого битом SREF2, можно в качестве опоры Vr- подключить внешний сигнал VREF- или напряжение аналоговой земли. В любом случае напряжение Vr+ должно находиться в диапазоне 1.4V - AVcc, а напряжение Vr- в диапазоне 0 - 1.2 V.

Начало цикла преобразования инициируется срабатыванием источника запуска АЦП при условии, что бит управления ENC=1. Результаты преобразований сохраняются в 16-ти регистрах буферной памяти преобразований ADC12MEMx. Каждый регистр ADC12MEMx конфигурируется соответствующим управляющим регистром ADC12MCTLx, содержащим информацию о номере входного канала и источнике опорного напряжения для каждого измерения. Следующие друг за другом измерения могут последовательно сохраняться в регистрах ADC12MEM0, ADC12MEM1 и т.д. Кроме того, управляющий регистр ADC12MCTLx содержит бит EOS, определяющий конец серии измерения, когда используется многоканальные режимы преобразования.

Модуль ADC12 имеет четыре основных режима работы:

·    Однократное одноканальное преобразование. Результат преобразования записывается в регистр ADC12MEMx, номер которого записан в поле CSTARTADDR регистра управления АЦП. При этом номер канала преобразования и источник опоры определяется содержимым соответствующего регистра ADC12MCTLx. Для старта следующего преобразования необходимо опять переключить ENC в состояние 0à1.

·        Однократное многоканальное преобразование. Результат первого преобразования сохраняется в ADC12MEMx, номер которого записан в поле CSTARTADDR регистра управления АЦП. Результаты следующих преобразований сохраняются в следующих регистрах ADC12MEMx. Последовательность преобразований завершается, когда очередной результат сохраняется в регистре, для которого бит EOS в соответствующем регистре ADC12MCTLx установлен в 1. Для старта следующей серии преобразований необходимо переключить ENC в состояние 0à1.

·        Повторяющееся одноканальное преобразование. Отличается от однократного одноканального преобразования тем, что измерения автоматически продолжаются после первого преобразования (нет необходимости переключать содержимое бита ENC). Содержимое регистра ADC12MEMx необходимо вычитывать до того, как будет произведено следующее преобразование. Выход из непрерывного процесса преобразований можно осуществить программной установкой бита ENC в 0.

·        Повторяющееся многоканальное преобразование. Отличается от однократного многоканального преобразования тем, что при достижении регистра, отмеченного установленным битом EOS, последовательность автоматически возобновляется, начиная с регистра, номер которого определен битовым полем CSTARTADDR.

Модуль ADC12 имеет дополнительные режимы работы, определяемые состоянием бита MSC регистра управления АЦП. Эти дополнительные режимы работают только в том случае, если не задан режим однократного одноканального преобразования и для формирования периода выборки используется таймер TSH. Если MSC=1, следующее преобразование в серии производится максимально быстро, т.е. не дожидаясь срабатывания источника старта АЦП, а непосредственно после окончания предыдущего преобразования. При установленном бите MSC логика работы АЦП меняется следующим образом.

·    Для однократного многоканального преобразования запуск АЦП всегда производится при срабатывании источника старта, после чего автоматически выполняется несколько измерений в зависимости от состояния бита EOS.

·        Для повторяющегося одноканального режима преобразования первый запуск АЦП производится при срабатывании источника старта, после чего измерение выбранного канала будет производиться постоянно, не взирая на состояние источника запуска. Выход из данного режима осуществляется установкой бита 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

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

SC

REF2_5V

REFON

ADC12ON

ADC12 OVIE

ADC12 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 - каждое новое преобразование начинается после срабатывания источника старта АЦП;

- следующее преобразование начинается непосредственно после окончания предыдущего.

·    Бит 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) - содержат биты управления АЦП.

·    Биты 15…12 - CSTARTADDR (Conversion Start Address) - стартовый адрес преобразования. Задает номер пары регистров - ADC12MEMx и ADC12MCTLx, начиная с которых, будет производиться преобразование.

·        Биты 11,10 - SHS (Sample/Hold Source Select) - выбор источника выборки/хранения.

SHS1

SHS0

Источник

0

0

Бит ADC12SC

0

1

Выход TACC1

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


·   
Биты 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.

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

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


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.

Измерение будем проводить серией из 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

При расчете необходимо код преобразования АЦП умножить на 40000, тогда старшее слово продукта умножения даст требуемое значение.

#include <msp430x14x.h>0F000h: 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.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 ; если нет -цикл

. . .

3.12 Flash контроллер


MSP-микроконтроллеры содержат в своем составе контроллер программирования собственной flash-памяти. Программирование (запись логических нулей) может осуществляться побайтно и пословно, стирание (запись логических единиц) - может производиться сегментами, размером 512 (Flash память программ) или 128 (Flash память данных) байт (см. рис. 1).

Процесс стирания/записи происходит под управлением встроенного генератора времени, осуществляющего тактирование Flash контроллера. При этом для нормальной работы частота тактирования Flash контроллера должна находиться в диапазоне 257 - 476 kHz. В противном случае Flash память микроконтроллера может подвергнуться стрессу. Настройка частоты тактирования Flash контроллера производиться с помощью делителя частоты, коэффициент деления, которого задается через регистр управления.

 

.12.1 Стирание Flash памяти

Режим стирания памяти задается состоянием битов MERAS и ERAS регистра управления, при условии, что бит LOCK (блокировка записи flash памяти) сброшен в ноль. При этом возможны следующие режимы:

·    стирание одного сегмента;

·        стирание всей памяти программ;

·        одновременное стирание всей памяти программ и Flash памяти данных.

Стирание инициализируется записью произвольных данных в выбранный сегмент памяти при установленных битах MERAS и/или ERAS. Сразу после этого в регистре управления устанавливается бит BUSY, сигнализируя об активности операции стирания. По окончанию операции BUSY сбрасывается в 0 автоматически.

Во время операции стирания/записи процессор не должен обращаться к Flash памяти. Так как вектора прерывания расположены в верхней области памяти программ, все прерывания также должны быть запрещены.

Если процесс стирания был инициирован командой, расположенной во Flash памяти, работа процессора автоматически блокируется на время активности сигнала BUSY. Для стирания памяти необходимо выполнить следующую последовательность действий:

1)   Запретить все прерывания и остановить сторожевой таймер.

2)      Настроить тактовую частоту Flash контроллера.

)        Установить режим стирания битами MERAS и/или ERAS и сбросить бит LOCK в состояние 0.

)        Произвести фиктивную запись в выбранный сегмент.

)        Если требуется, разрешить прерывания, сторожевой таймер и установить LOCK бит.

Период полного стирания Flash памяти может достигать нескольких десятков миллисекунд. В течение этого время процессор находиться в деактивированном состоянии. Для того чтобы процессор мог исполнять какую-либо полезную работу во время процесса стирания, необходимо, чтобы команда на стирание памяти производилась не из Flash, а из ОЗУ. Естественно, что для этого подпрограмма стирания изначально должна располагаться во Flash памяти. Перед началом процесса стирания тело этой подпрограммы должно быть скопировано в ОЗУ, после чего ей должно быть передано управление. Прерывания в данном случае также должны быть запрещены, т.к. адрес подпрограммы обработки прерывания вычитывается из старших адресов Flash памяти (см. п. 3.2). Для стирания памяти при работе из ОЗУ необходимо выполнить следующую последовательность действий:

1)   Запретить все прерывания и остановить сторожевой таймер.

2)      Настроить тактовую частоту Flash контроллера.

)        Дождаться, пока состояние бита BUSY не станет равным 0.

)        Установить режим стирания битами MERAS и/или ERAS и сбросить бит LOCK в состояние 0.

)        Произвести фиктивную запись в выбранный сегмент.

)        Дождаться, пока состояние бита BUSY не станет равным 0.

)        Если требуется, разрешить прерывания, сторожевой таймер и установить LOCK бит.

 

.12.2 Запись Flash памяти

Запись Flash памяти можно осуществлять в режимах байт/слово или блоком, состоящим из 64 байт. Режим записи памяти определяется состоянием бита BLKWRT регистра управления. Программа, осуществляющая запись побайтно/пословно, может располагаться как во Flash памяти, так и в ОЗУ. Запись блока данных может осуществляться только из подпрограммы, расположенной в ОЗУ. Разрешение записи данных во Flash памяти производиться с помощью бита WRT регистра управления.

Для записи байта/слова из Flash памяти необходимо выполнить следующие действия:

1)   Запретить все прерывания и сторожевой таймер.

2)      Настроить тактирование Flash контроллера.

)        Очистить LOCK бит.

)        Установить бит WRT.

)        Записать данные по требуемому адресу с помощью словной или байтовой формы инструкции.

)        Сбросить бит WRT и, если требуется, разрешить прерывания, сторожевой таймер и установить LOCK бит.

Для записи байта/слова из ОЗУ необходимо выполнить следующие действия:

1)   Запретить все прерывания и сторожевой таймер.

2)      Дождаться, пока состояние бита BUSY не станет равно 0.

)        Настроить тактирование Flash-контроллера и сбросить бит LOCK

)        Установить бит WRT.

)        Записать в память слово или байт

)        Дождаться, пока состояние бита BUSY не станет равно 0.

)        Сбросить бит WRT и, если требуется разрешить прерывания, сторожевой таймер и LOCK бит.

Время записи одного слова/байта может составить несколько миллисекунд. Существенно сократить это время можно, используя блочный метод записи. Для записи блока данных в память необходимо выполнить следующие действия:

1)   Выполнить пункты 1..3 алгоритма записи байта/слова.

2)      Установить биты WRT и BLKWRT.

)        Записать требуемые данные.

)        Дождаться, пока бит регистра управления WAIT не станет равным 0.

)        Проверить, достигнута ли граница 64-ти байтного блока. Если нет - перейти к п.3.

)        Сбросить бит BLKWRT в 0.

)        Дождаться, пока бит BUSY не станет равен 0.

)        Если требуется запись нового блока перейти к пункту 2.

)        Сбросить бит WRT и, если требуется, разрешить прерывания, сторожевой таймер и LOC бит.

В том случае, если программа исполняется из ОЗУ и бит BUSY =1, любой доступ к Flash памяти при сброшенном бите WRT аппаратно взводит бит ACCVIFG регистра управления Flash контроллера, что при установленном бите ACCVIE регистра IE1 (см. п. 3.2) вызовет прерывание с вектором, расположенным по адресу FFFCh. Если при всем этом бит WRT=1, поведение процессора непредсказуемо.

В том случае, если необходимо по той, или иной причине преждевременно остановить процесс записи/стирания программа может взвести бит EMEX регистра управления, после чего текущая операция завершается безаварийным образом.

 

.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 память. Программная установка бита 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

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. Устанавливается аппаратно, если при записи данных в регистр управления 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 памяти;

·        вернуться в основную программу.

При копировании кода подпрограммы в ОЗУ необходимо позаботиться о том, чтобы данная область не была занята данными, с которыми оперирует основная программа. Поэтому, безопасное копирование можно осуществить в стековую область памяти с адресами меньшими, чем текущее содержимое указателя стека SP.

Тактирование Flash контроллера будем осуществлять от частоты MCLK. Потребуем, чтобы тактовая частота Flash контроллера составляла 400 kHz, тогда делитель частоты должен содержать код 8000 kHz/400 kHz - 1 =19.

Для удобства работы с подпрограммой желательно, чтобы она сама определяла размер сегмента при программировании. Это можно определить по адресу сегмента Flash памяти, переданному в подпрограмму через R14. Если этот адрес меньше 1100h, значит размер сегмента 128 байт (2 блока по 64 байт), в противном случае размер 512 байт (8 блоков по 64 байта).

#include <msp430x14x.h>2000h: mov #WDTPW+WDTHOLD, &WDTCTL ; запрет WatchDog #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 ; настраиваем указатель копирования источника

;

spr1: decd R13 ; цикл копирования подпрограммы WriteStart

decd R15 ; в ОЗУ от старших адресов к младшим

mov @R15, 0(R13)#WriteStart, R15 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 ; режим блочной записи

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.

Похожие работы на - Микроконтроллеры MSP430

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!