Файл: Семейство микроконтроллеров MSP430X1XX, руководство пользователя (2004).pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 16.06.2025
Просмотров: 2829
Скачиваний: 1
MSP430x1xxFamily
Отключение всех прерываний и сторожевого таймера
да
BUSY = 1
Установка контроллера флэш и режима стирания
Выполнение фиктивной записи
да
BUSY = 1
Установка LOCK=1, разрешение прерываний и включение сторожевого таймера
Рис. 5-6. Цикл стирания, инициируемый программой из ОЗУ
MOV |
#FWKEY,&FCTL3 |
;Очистка LOCK |
||
MOV |
#FWKEY+ERASE,&FCTL1 |
;Разрешение стирания |
||
CLR &0FC10h |
;Фиктивная запись, |
|||
;стирание S1 |
||||
L2 BIT #BUSY,&FCTL3 |
;Проверка BUSY |
|||
JNZ L2 |
;Ожидание, пока занято |
|||
MOV #FWKEY+LOCK,&FCTL3 |
;Завершено, установка |
|||
;LOCK |
||||
... |
;Повторное включение |
|||
;WDT? |
||||
EINT |
;Разрешение прерываний |
|||
Библиотека Компэла |
||||
118 |
||||
Раздел V. Контроллер флэш-памяти
5.3.3. Запись в флэш-память
Режимы записи, задаваемые битами WRT и BLKWRT приведены в таблице 5.2.
Таблица 5-2. Режимы записи |
|||
BLKWRT |
WRT |
Режим записи |
|
0 |
1 |
Запись байта/слова |
|
1 |
1 |
Запись блока |
|
Каждый из режимов записи использует последовательность собственных команд записи, но режим блочной записи позволяет выполнять запись примерно вдвое быстрее по сравнению с режимом байт/слово, поскольку генератор напряжения остается включенным до завершения записи блока. Любая команда, модифицирующая получателя может использоваться для изменения месторасположения в флэш-памяти как в режиме записи байта/слова, так и в режиме блочной записи.
Бит BUSY установлен, пока активна процедура записи и очищается, когда запись завершена. Если операция записи инициирована из ОЗУ, ЦПУ не должен обращаться к флэш-памяти, пока BUSY=1. В противном случае произойдет нарушение прав доступа, будет установлен флаг ACCVIFG, а результат записи окажется непредсказуем.
Запись байта/слова
Операция записи байта/слова может инициироваться программой из флэш-памяти или из ОЗУ. Когда инициирование происходит из флэш-памяти, все тактирование осуществляется контроллером флэш-памяти, а ЦПУ ожидает завершения записи. После выполнения записи ЦПУ продолжает выполнение кода с команды, следующей за командой записи. Временная диаграмма процедуры записи байта/слова показана на рис. 5.7.
Выполнение операции программирования |
|||||||||||
Генерация |
Снятиея |
||||||||||
напряжения |
напряжения |
||||||||||
программирования |
программирования |
||||||||||
Время программирования потребления тока VCC повышено |
|||||||||||
BUSY |
|||||||||||
t(запись слова) |
= 33/f(FTG) |
||||||||||
Рис. 5-7. Временная диаграмма операции записи байта/слова |
|||||||||||
Библиотека Компэла |
|||||||||||
119 |
|||||||||||
MSP430x1xxFamily
Когда запись байта/слова выполняется из ОЗУ, ЦПУ продолжает выполнять код из ОЗУ. Бит BUSY должен стать равным нулю, прежде чем ЦПУ обратится к флэш-памяти снова, иначе произойдет нарушение прав доступа и установка флага ACCVIFG, а результат записи будет непредсказуем.
Инициирование записи байта/слова программой из флэш-памяти
Программный поток, инициирующий запись байта/слова из флэш-памяти показан на рис. 5.8.
Запрещение всех прерываний и отключение сторожевого таймера
Установка контроллера флэш и установка WRF = 1
Запись байта и слова
Установка WRT = 0, LOCK = 1, разрешение прерываний и включение сторожевого таймера
Рис. 5-8. Инициирование записи байта/слова из флэш-памяти
;Запись байта/слова из флэш. 514 кГц<SMCLK<952 кГц
;Принимается, что 0FF1Eh уже стерто
;Принимается ACCVIE = NMIIE = OFIE = 0.
MOV #WDTPW+WDTHOLD,&WDTCTL ;Отключение сторожевого ;таймера
DINT |
;Запрещение прерываний |
|||
MOV |
#FWKEY+FSSEL1+FN0,&FCTL2 ;SMCLK/2 |
|||
MOV |
#FWKEY,&FCTL3 |
;Очистка LOCK |
||
MOV |
#FWKEY+WRT,&FCTL1 |
;Разрешение записи |
||
MOV |
#0123h,&0FF1Eh |
;0123h –> 0FF1Eh |
||
MOV |
#FWKEY,&FCTL1 |
;Выполнено. Очистка WRT |
||
MOV |
#FWKEY+LOCK,&FCTL3 |
;Установка LOCK |
||
... |
;Повторный запуск |
|||
;сторожевого таймера? |
||||
EINT |
;Разрешение прерываний |
|||
Библиотека Компэла |
||||
120 |
||||
Раздел V. |
Контроллер флэш-памяти |
Инициирование записи байта/слова программой из ОЗУ
Программный поток, инициирующий запись байта/слова из ОЗУ показан на рис. 5.9.
Запрещение всех прерываний и выключение сторожевого таймера
да
BUSY = 1
Установка контроллера флэш и установка WRT = 1
Запись байта или слова
да
BUSY = 1
Установка WRT = 0, LOCK = 1 разрешение прерывание и включение сторожевого таймера
Рис. 5-9. Инициирование записи байта/слова из ОЗУ
;Запись байта/слова из ОЗУ. 514 кГц < SMCLK < 952 кГц ;Принимается, что 0FF1Eh уже стерто
;Принимается ACCVIE = NMIIE = OFIE = 0.
MOV #WDTPW+WDTHOLD,&WDTCTL ;Отключение сторожевого ;таймера
DINT |
;Запрещение прерываний |
L1 BIT #BUSY,&FCTL3 |
;Проверка BUSY |
JNZ L1
MOV #FWKEY+FSSEL1+FN0,&FCTL2 ;SMCLK/2
MOV #FWKEY,&FCTL3 |
;Очистка LOCK |
||
Библиотека Компэла |
|||
121 |
|||
MSP430x1xxFamily |
|
MOV #FWKEY+WRT,&FCTL1 |
;Разрешение записи |
MOV #0123h,&0FF1Eh |
;0123h –> 0FF1Eh |
L2 BIT #BUSY,&FCTL3 |
;Проверка BUSY |
JNZ L2 |
;Ожидание в цикле, |
;пока занято |
|
MOV #FWKEY,&FCTL1 |
;Очистка WRT |
MOV #FWKEY+LOCK,&FCTL3 |
;Установка LOCK |
... |
;Повторный запуск |
;сторожевого таймера? |
|
EINT |
;Разрешение прерываний |
Запись блока
Блочную запись можно использовать для ускорения процесса записи во флэш-память большой последовательности байт или слов. Блок – это 64 байта, начиная с 0xx00h, 0xx40h, 0xx80h или 0xxС0h и заканчивая 0xx3Fh, 0xx7Fh, 0xxBFh или 0xxFFh, как показано на рис. 5.10. Напряжение программирования флэш-памяти остается поданным в течение записи блока из 64-байт.
xxFFh |
Блок |
||||
xxC0h |
|||||
xxFFh |
xxBFh |
Блок |
|||
xx80h |
|||||
Флеш•память |
|||||
xx7Fh |
Блок |
||||
xx00h |
|||||
xx40h |
|||||
xx3Fh |
Блок |
||||
xx00h |
|||||
Рис. 5-10. Блоки флэш-памяти
Блочная запись не может быть инициирована из флэш-памяти. Блочная запись должна инициироваться только из ОЗУ или ПЗУ. Бит BUSY остается установленным в течение всего цикла записи блока. Бит WAIT должен проверяться между записью каждого байта или слова в блоке. Очередной байт или слово блока могут быть записаны, когда бит WAIT установлен. При записи последовательности блоков бит BLKWRT необходимо очищать после завершения записи текущего блока. Бит BLKWRT может быть установлен для инициирования записи следующего блока после выдержки заданного времени восстановления флэш t(end). Бит BUSY очищается после завершения записи каждого блока, информируя о возможности записи следующего блока. На рис. 5.11 показана временная диаграмма процедуры блочной записи.
122 |
Библиотека Компэла |
|
Раздел V. |
Контроллер флэш-памяти |
Бит BLKWRT
Запись в флэш, например MOV #123h, &Flash
Генерация |
Выполнение операции |
||||
Снятие |
|||||
программирования |
|||||
напряжения |
напряжения |
||||
программирования |
программирования |
||||
Общее время программирования t(CPT) =< 3 мс, потребление тока VCC повышено
BUSY
t(запись блока, байт 0) = 30/f(FGT) t(байты 1•63) = 20/f(FGT) t(байты 1•63) = 20/f(FGT) t(окончание) = 6/f(FGT)
WAIT
Рис. 5-11. Временная диаграмма цикла блочной записи
Программный поток записи блока и пример
Программный поток записи блока показан на рис. 5.12, а ниже приводится соответствующий пример.
;Запись одного блока, начиная с адреса 0F000h.
;Запись должна выполняться из ОЗУ; предполагается, что флэш-память уже стерта.
;514 кГц < SMCLK < 952 кГц
;Принимается ACCVIE = NMIIE = OFIE = 0.
MOV #32,R5 |
;Используется как |
|||
;счетчик записи |
||||
MOV #0F000h,R6 |
;Указатель записи |
|||
MOV #WDTPW+WDTHOLD,&WDTCTL ;Отключение |
||||
;сторожевого таймера |
||||
DINT |
;Запрещение прерываний |
|||
L1 |
BIT #BUSY,&FCTL3 |
;Проверка BUSY |
||
JNZ L1 |
;Ожидание в цикле, |
|||
;пока занято |
||||
MOV #FWKEY+FSSEL1+FN0,&FCTL2 ;SMCLK/2 |
||||
MOV #FWKEY,&FCTL3 |
;Очистка LOCK |
|||
MOV #FWKEY+BLKWRT+WRT,&FCTL1 ;Разрешение записи |
||||
;блока |
||||
L2 |
MOV Write_Value,0(R6) |
;Месторасположение |
||
;записи |
||||
L3 |
BIT #WAIT,&FCTL3 |
;Проверка WAIT |
||
Библиотека Компэла |
||||
123 |
||||