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

Адресное пространство микроконтроллеров MSP430F1xx. Байтовая и словная формы инструкций. Система команд MSP микроконтроллеров. Периферийные устройства микроконтроллеров MSP430F1xx. Аналого-цифровой преобразователь ADC12, его технические характеристики.

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид курсовая работа
Язык русский
Дата добавления 04.05.2014
Размер файла 278,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

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

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

· Бит 6 - REF2_5V (Reference 2.5V) - опора 2.5V. Установка/сброс этого бита задает напряжение встроенного генератора опорного напряжения 2.5/1.5 V соответственно.

· Бит 5 - REFON - включение генератора опоры. Установка/сброс этого бита включает/выключает генератор опорного напряжения.

· Бит 4 - ADC12ON - включение модуля АЦП. Установка/сброс этого бита включает/выключает модуль АЦП.

· Бит 3 - ADC12OVIE (Overflow Interrupt Enable) - разрешение прерывания по переполнению АЦП. Установка/сброс этого бита разрешает/запрещает прерывание, возникающее в случае, если содержимое ADC12MEMx не вычитано к моменту записи в него следующих значений.

· Бит 2 - ADC12TOVIE (Time Overflow Interrupt Enable) - разрешение прерывания по переполнению времени выборки АЦП. Установка/сброс этого бита разрешает/запрещает прерывание, возникающее в случае, если до завершения текущего преобразования затребована другая выборка-преобразование.

· Бит 1 - ENC (Enable Conversion) - разрешение преобразования. Установка/сброс этого бита разрешает/запрещает преобразование АЦП.

· Бит 0 - ADC12SC (Start Conversion) - программный старт преобразования. Установка этого бита вызывает старт преобразования АЦП в том случае, если поле SHS регистра ADC12CTL1 установлено в 0. Если для формирования периода выборки используется таймер TSH, бит сбрасывается автоматически, в противном случае этот бит должен сбрасываться программно. В этом случае, время, в течении которого этот бит удерживается в 1, будет определять период выборки внешнего сигнала.

Примечание. Биты с 4 по 15 этого регистра могут быть модифицированы только, если бит ENC=0.

Ш ADC12CTL1 (Control 1) - содержат биты управления АЦП.

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

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

SHS1

SHS0

Источник

0

0

Бит ADC12SC

0

1

Выход TACC1

1

0

Выход TBCC0

1

1

ВыходTBCC1

· Бит 9 - SPH (Sample/Hold Pulse mode) - выбор режима выборки. Установка/сброс этого бита разрешает/запрещает использование таймера TSH.

· Бит 8 - ISSH (Invert Signal Sample/Hold) - инвертирование сигнала выборки/хранения. Установка этого бита инвертирует сигнал, генерируемый источником, определенным битами SHS этого регистра.

· Биты 7,6,5 - ADC12DIV (Divider) - делитель для частоты ADC12CLK. Состояние этих бит задают коэффициент деления тактовой частоты, определенной битами ADC12SSEL этого регистра.

ADC12DIV2

ADC12DIV1

ADC12DIV0

Коэф.делен.

0

0

0

1 / 1

0

0

1

1 / 2

0

1

0

1 / 3

0

1

1

1 / 4

1

0

0

1 / 5

1

0

1

1 / 6

1

1

0

1 / 7

1

1

1

1 / 8

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

ORG 0F000h

start: mov #300h, SP

. . .

; SHT1=5, SHT0 =1, MSC=1, REF2_5V=1, REFON=1, ADC12ON=1

mov #51F0h, &ADC12CTL0

; CSTARTADDR=5, SHS=0, SPH=1, ADC12SSEL=3, CONSEQ=1

mov #521Ah, &ADC12CTL1

mov.b #10h, &ADC12MCTL5 ; SREF=1, INCH=0, EOS=0

mov.b #12h, &ADC12MCTL6 ; SREF=1, INCH=2, EOS=0

mov.b #16h, &ADC12MCTL7 ; SREF=1, INCH=6, EOS=0

mov.b #93h, &ADC12MCTL8 ; SREF=1, INCH=3, EOS=1

clr &ADC12IFG ; на всякий случай сбрасываем флаги

bis #3, &ADC12CTL0 ; старт АЦП : ENC=1, ADC12SC=1

mov #ADC12MEM5, R4 ; указатель на ADC12MEM5

mov #200h, R5 ; указатель на ОЗУ

wait: bit #100h, &ADC12IFG ; преобразование завершено?

jz wait ; если нет - цикл

mov @R4+, &MPY ; расчет напряжения

mov #40000, &OP2

mov &RESHI, R12 ; читаем результат

rla &RESLO ; округляем до целого

adc R12

mov R12, 0(R5) ; сохраняем значение напряжения в ОЗУ

incd R5 ; наращиваем указатель ОЗУ

cmp #208h, R5 ; все данные записаны в ОЗУ?

jne wait ; если нет -цикл

. . .

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

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

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

3.12.1 Стирание Flash памяти

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3.12.2 Запись Flash памяти

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Все регистры управления Flash контроллера - 16-ти битные регистры, защищенные паролем и доступные как для записи, так и для чтения. Во всех регистрах старший байт содержит поле пароля, а младший байт - содержит управляющие биты. К регистрам необходимо обращаться только с помощью словных форм инструкций. При этом для операции записи старший байт должен содержать код пароля - 0A5h, в противном случае аппаратно устанавливается бит KEYV регистра управления и генерируется сброс микроконтроллера. При чтении старший байт регистров всегда содержит код 96h. Т.к. коды в старшем байте регистров управления различны при записи и чтении следует избегать обращения к этим регистрам с помощью команд типа чтение-модификация-запись, таких например, как bis, bic.

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

Таблица 16

Имя

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

Адрес

Нач.значен.

FCTL1

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

128h

9600h

FCTL2

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

12Ah

9642h

FCTL3

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

12Ch

9618h

IE1

Регистр разрешения прерываний

0h

0

Ш FCTL1 (Flash Control 1) - содержит биты управления Flash контроллера.

· Биты 15..8 - FWKEY (Flash Write Key) - flash-ключ записи. Поле содержит пароль доступа к регистру. При записи поле должно содержать код 5Ah, при чтении поле содержит код 96h.

· Бит 7 - BLKWRT (Block Write) - запись блока. Установка/сброс этого бита разрешает/запрещает режим блочной записи данных в Flash память. Программная установка бита 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>

ORG 2000h

main: mov #WDTPW+WDTHOLD, &WDTCTL ; запрет WatchDog

mov #0A00h, SP ; установка указателя стека

. . .

mov #400h, R12 ; начальный адрес источника

mov #1000h, R14 ; начальный адрес Flash сегмента

call #SectProg ; вызов подпрограммы программирования

. . .

; *****************************************

; Подпрограмма программирования сегмента

;******************************************

SectProg:

push SR ; сохраняем статусный регистр

dint ; запрещаем прерывания

mov SP, R13 ; настраиваем указатель копирования приемника

sub #2, R13 ; на два байта ниже указателя стека

mov #WriteEnd+2, R15 ; настраиваем указатель копирования источника

;

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

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

mov @R15, 0(R13)

cmp #WriteStart, R15

jne spr1

;

mov #2, R15 ; контроль размера сегмента,

bic #3Fh, R14 ; если Info Flash - R15= 2 блока,

cmp #1100h, R14 ; иначе R15= 8 блоков

jlo spr2

mov #8, R15

spr2: call R13 ; передача управления в ОЗУ

pop SR ; восстановление режима прерывания

ret

; **************************************

; Код, копируемый в ОЗУ

WriteStart:

; Стирание сегмента

ws1: bit #BUSY, &FCTL3 ; ожидание готовности Flash контроллера

jnz ws1

mov #FWKEY+FSSEL0+19, &FCTL2 ; настройка частоты Flash контроллера

mov #FWKEY, &FCTL3 ; сброс LOCK бита

mov #FWKEY+ERASE, &FCTL1 ; режим стирания сегмента

mov #0, 0(R14) ; инициация стирания сегмента

ws2: bit #BUSY, &FCTL3 ; ожидание готовности

jnz ws2

; Программирование сегмента

ws3: mov #FWKEY+BLKWRT+WRT, &FCTL1 ; режим блочной записи

mov #64, R13 ; счетчик байт в блоке

ws4: mov @r12+, 0(R14) ; запись данных во Flash

incd R14 ; инкремент указателя Flash

ws5: bit #WAIT, &FCTL3 ; запись произведена?

jz ws5

decd R13 ; декремент счетчика записей в блоке

jne ws4 ; блок записан ?

mov #FWKEY, &FCTL1 ; сброс записи блока

ws6: bit #BUSY, &FCTL3 ; Flash контроллер готов?

jnz ws6

dec r15 ; все блоки записаны ?

jne ws3 ; если нет - ветвление,

WriteEnd: ret ; иначе - конец подпрограммы

. . .

ORG 0FFFEh

DC16 main

END

Следует заметить, что подпрограмма программирования Flash занимает 78 байт ОЗУ, использует только регистры R12…R15 и может использоваться как библиотечная функция для программ, написанных на языке C.

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.