Микроконтроллеры 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 |
ADC12OVIE |
ADC12TOVIE |
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
Подобные документы
Использование микроконтроллеров AVR фирмы Atmel в проектируемой аппаратуре. Архитектура и общие характеристики прибора, предназначение арифметики логического устройства и понятие флэш-памяти. Формат пакета данных, алгоритм их передачи и система команд.
контрольная работа [427,3 K], добавлен 12.11.2010Семейство 16-разрядных микроконтроллеров Motorola 68HC12, их структура и функционирование. Модуль формирования ШИМ-сигналов. Средства отладки и программирования микроконтроллеров 68НС12. Особенности микроконтроллеров семейства MCS-196 фирмы INTEL.
курсовая работа [239,6 K], добавлен 04.01.2015Рассмотрение структуры и принципов работы таймеров/счетчиков (общего назначения, сторожевого, типов А, В, С, D, Е) микроконтроллеров и аналого-цифрового преобразователя семейства AVR с целью разработки обучающего компьютерного электронного пособия.
курсовая работа [1,0 M], добавлен 06.03.2010Микроконтроллеры - микросхемы, предназначенные для управления электронными устройствами, их классификация. Структура процессорного ядра микроконтроллеров, основные характеристики, определяющие его производительность. CISC и RISC архитектура процессора.
курсовая работа [43,2 K], добавлен 03.10.2010Общая характеристика и применение микроконтроллеров FUJITSU MB-90 и MCS-196 фирмы Intel. Основные особенности микроконтроллеров серии MCS-96 и MB90385. Внутренняя архитектура процессоров. Система команд, работа с внутренними и внешними устройствами.
курсовая работа [768,0 K], добавлен 01.12.2010Классификация, структура, архитектура и модульная организация микроконтроллеров. Средства разработки программного обеспечения AVR-контроллеров. Директивы транслятора ассемблера, рабочая частота и циклы. Исследование арифметических и логических команд.
методичка [3,0 M], добавлен 19.09.2019Проектирование измерительных приборов. Параметры цифрового вольтметра. Принцип время-импульсного преобразования. Области применения микроконтроллеров. Алгоритм приложения для цифрового милливольтметра постоянного тока. Сборка элементов на печатной плате.
дипломная работа [891,7 K], добавлен 17.06.2013Общая характеристика операций, выполняемых по командам базовой системы. Описание и мнемокоды команд, используемых при разработке программы на языке AVR Ассемблера. Основные принципы работы команд с обращением по адресу SRAM и к регистрам ввода–вывода.
реферат [148,4 K], добавлен 21.08.2010Особенности проектирования микропроцессорного устройства "Цифровой осциллограф". Выбор микроконтроллера, описание периферийных устройств. Разработка принципиальной схемы устройства и программы для микроконтроллера, осуществляющей все функции устройства.
курсовая работа [923,5 K], добавлен 24.12.2012Понятие и виды микроконтроллеров. Особенности программирования микропроцессорных систем, построение систем управления химико-технологическим процессом. Изучение архитектуры микроконтроллера ATmega132 фирмы AVR и построение на его основе платформы Arduino.
курсовая работа [1,9 M], добавлен 13.01.2011