Руководство пользователя MSP430 (1041606), страница 12
Текст из файла (страница 12)
Когда запись байта/слова выполняется из ОЗУ, ЦПУ продолжает выполнять код из ОЗУ. Бит BUSY должен стать равным нулю, прежде чем ЦПУ обратится к флэш-памяти снова, иначе произойдет нарушение прав доступа и установка флага ACCVIFG, а результат записи будет непредсказуем.
Инициирование записи байта/слова программой из флэш-памяти
Программный поток, инициирующий запись байта/слова из флэш-памяти показан на рис.5.8.
Рис.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 ; Разрешение прерываний |
Инициирование записи байта/слова программой из ОЗУ
Программный поток, инициирующий запись байта/слова из ОЗУ показан на рис.5.9.
Рис.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 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-байт.
Блочная запись не может быть инициирована из флэш-памяти. Блочная запись должна инициироваться только из ОЗУ или ПЗУ. Бит BUSY остается установленным в течение всего цикла записи блока. Бит WAIT должен проверяться между записью каждого байта или слова в блоке. Очередной байт или слово блока могут быть записаны, когда бит WAIT установлен. При записи последовательности блоков бит BLKWRT необходимо очищать после завершения записи текущего блока. Бит BLKWRT может быть установлен для инициирования записи следующего блока после выдержки заданного времени восстановления флэш t(end). Бит BUSY очищается после завершения записи каждого блока, информируя о возможности записи следующего блока. На рис.5.11 показана временная диаграмма процедуры блочной записи.
Рис.5-11 Временная диаграмма цикла блочной записи
Программный поток записи блока и пример
Программный поток записи блока показан на рис.5.12, а ниже приводится соответствующий пример.
Рис.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 JZ L3 ; Ожидание в цикле, пока WAIT=0 INCD R6 ; Указание на следующее слово DEC R5 ; Декремент счетчика записи JNZ L2 ; Конец блока? MOV #FWKEY,&FCTL1 ; Очистка WRT,BLKWRT L4 BIT #BUSY,&FCTL3 ; Проверка BUSY JNZ L4 ; Ожидание в цикле, пока занято MOV #FWKEY+LOCK,&FCTL3 ; Установка LOCK ... ; Повторный запуск сторожевого таймера, ; если необходимо EINT ; Разрешение прерываний |
5.3.4 Доступ к флэш-памяти во время записи или стирания
Когда выполняется любая операция записи или стирания, инициированная из ОЗУ и BUSY=1, ЦПУ не может выполнять чтение или запись любой ячейки флэш-памяти. В противном случае произойдет нарушение прав доступа, будет установлен флаг ACCVIFG и результат окажется непредсказуемым. Также, если запись во флэш-память предпринята с WRT=0, устанавливается флаг прерывания ACCVIFG, а содержимое флэш-памяти не изменяется.
Когда инициируется запись байта/слова или любая операция стирания программой из флэш-памяти, контроллер флэш возвращает ЦПУ код операции 03FFFh при выборке следующей команды. Код операции 03FFFh – это команда JMP PC. Это приведет к зацикливанию ЦПУ, пока работа с флэш не будет закончена. Когда операция с флэш-памятью закончена и BUSY=0, контроллер флэш позволяет ЦПУ выполнить выборку правильного кода операции и выполнение программы возобновляется.
Условия доступа к флэш-памяти, когда BUSY=1 приведены в таблице 5.3.
Таблица 5-3. Доступ к флэш-памяти при BUSY=1
Операция с флэш-памятью | Доступ к флэш-памяти | WAIT | Результат |
Любой режим стирания или запись байта/слова | Чтение | 0 | ACCVIFG = 1, читается значение 03FFFh |
Запись | 0 | ACCVIFG = 1. Запись игнорируется | |
Выборка команды | 0 | ACCVIFG = 0. CPU считывает код 03FFFh. Это команда JMP PC. | |
Запись блока | Любой | 0 | ACCVIFG = 1, LOCK = 1 |
Чтение | 1 | ACCVIFG = 0, читается значение 03FFFh | |
Запись | 1 | ACCVIFG = 0. Запись игнорируется | |
Выборка команды | 1 | ACCVIFG = 1, LOCK = 1 |
Все источники прерываний необходимо заблокировать перед инициализацией любой операции с флэш-памятью. Если бы разрешенное прерывание произошло во время операции с флэш-памятью, ЦПУ сделало бы выборку кода 03FFFh в качестве адреса процедуры обработки прерывания. ЦПУ выполнило бы команду JMP PC при BUSY=1. После завершения операции с флэш-памятью, ЦПУ начало бы выполнение кода с адреса 03FFFh, который не является правильным адресом процедуры обработки прерывания.
5.3.5 Останов цикла записи или стирания
Любая операция записи или стирания может быть остановлена до момента нормального завершения путем установки бита аварийного выхода EMEX. Установка бита EMEX немедленно останавливает активную операцию и контроллер флэш-памяти. Все операции с флэш-памятью прекращаются, она возвращается в режим чтения, а все биты в регистре FCTL1 сбрасываются. Результат предполагавшейся операции с флэш-памятью будет непредсказуем.
5.3.6 Конфигурирование и доступ к контроллеру флэш-памяти
FCTLx – это 16-разрядные регистры записи/чтения, защищенные паролем. Любая операция чтения или записи доступна только при использовании команды-слова, а запись возможна только при наличии в старшем байте пароля записи 0A5h. Любая запись в любой FCTLx регистр с любым значением в старшем байте, отличном от 0A5h вызовет нарушение ключа защиты, установку флага KEYV и запуск системного сброса PUC. При любом чтении любого регистра FCTLx результат содержит в старшем байте значение 096h.
Любая запись в FCTL1 во время стирания или операции записи байта/слова приведет к нарушению прав доступа и установке флага ACCVIFG. Запись в FCTL1 возможна в режиме блочной записи, когда WAIT=1, однако запись в FCTL1 в режиме блочной записи, когда WAIT=0 приведет к нарушению прав доступа и установке флага ACCVIFG.
Любая запись в FCTL2, когда BUSY=1 приведет к нарушению прав доступа.
Любой FCTLx регистр может быть прочитан, когда BUSY=1. Чтение не приведет к нарушению прав доступа.
5.3.7 Прерывания контроллера флэш-памяти
Контроллер флэш имеет два источника прерывания: KEYV и ACCVIFG. Флаг ACCVIFG устанавливается, когда происходит нарушение прав доступа. Когда бит ACCVIE устанавливается вновь после записи или стирания флэш-памяти, установленный флаг ACCVIFG будет генерировать запрос прерывания. Флаг ACCVIFG – источник вектора немаскируемого прерывания NMI, поэтому нет необходимости устанавливать GIE для запроса прерывания по флагу ACCVIFG. Помимо этого, ACCVIFG можно проверить программно, чтобы определить, было ли нарушение прав доступа. Флаг ACCVIFG должен сбрасываться программно.
Флаг нарушения ключа KEYV устанавливается, когда выполняется запись в любой управляющий регистр контроллера флэш с неправильным паролем. Когда это происходит, генерируется сигнал PUC, немедленно сбрасывая устройство.
5.3.8 Программирование устройств с флэш-памятью
Имеется три способа программирования флэш-устройств MSP430. Все способы поддерживают внутрисистемное программирование (ISP):
-
Программирование через JTAG1
-
Программирование через самозагрузчик
-
Программирование через пользовательское решение
Программирование флэш-памяти через JTAG
Устройства MSP430 могут программироваться через JTAG-порт. Для JTAG-интерфейса нужны четыре сигнальных линии (5 сигнальных линий у 20 и 28-выводных устройств), общий провод и опционально VCC и nonRST/NMI.
JTAG-порт защищен с помощью предохранителей. Перегорание предохранителей явление необратимое – в результате срабатывания предохранителя JTAG-порт отключается. Последующий доступ к устройству через JTAG-порт становится невозможен. Подробности см. в приложении «Programming a Flash-Based MSP430 Using the JTAG Interface2» на сайте www.ti.com/sc/msp430.
Программирование флэш-памяти через самозагрузчик (BSL)
Каждое MSP430 устройство с флэш-памятью содержит самозагрузчик BSL. Он позволяет пользователю читать или программировать флэш-память или ОЗУ с помощью последовательного интерфейса UART3. Доступ к флэш-памяти MSP430 через BSL защищен 256-разрядным паролем, определяемым пользователем. Подробности см. в приложении «Features of the MSP430 Bootstrap Loader4» на сайте www.ti.com/sc/msp430.
Программирование флэш-памяти через пользовательское решение
Способность ЦПУ в MSP430 записывать собственную флэш-память позволяет реализовать внутрисистемное программирование внешними пользовательскими решениями, как показано на рис.5.13. Пользователь может выбрать, каким образом данные будут поступать в MSP430 с использованием любого имеющегося доступного способа (UART, SPI и пр.). Разработанное пользователем программное обеспечение может получать данные и программировать флэш-память. Так как этот тип решения разработан пользователем, его можно настроить таким образом, чтобы наиболее полно удовлетворялись потребности в программировании, стирании и обновлении флэш-памяти.
Рис.5-13 Решение по программированию, разработанное пользователем
5.4 Регистры флэш-памяти
Перечень регистров флэш-памяти приведен в таблице 5.4.
Таблица 5-4. Регистры флэш-памяти
Регистр | Краткое обозначение | Тип регистра | Адрес | Исходное состояние |
Регистр 1 управления флэш-памятью | FCTL1 | Чтение/запись | 0128h | 09600h с PUC |
Регистр 2 управления флэш-памятью | FCTL2 | Чтение/запись | 012Ah | 09642h с PUC |
Регистр 3 управления флэш-памятью | FCTL3 | Чтение/запись | 012Ch | 09618h с PUC |
Регистр 1 разрешения прерывания | IE1 | Чтение/запись | 000h | Сброс с PUC |
FCTL1, регистр управления флэш-памятью
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
FRKEY, читается как 096h |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
BLKWRT | WRT | Резерв | Резерв | Резерв | MERAS | ERASE | Резерв |
rw-0 | rw-0 | r0 | r0 | r0 | rw-0 | rw-0 | r0 |
FRKEY/FWKEY | Биты 15-8 | Пароль FCTLx. Всегда читается как 096h. Должен записываться как 0A5h, в противном случае будет генерироваться сигнал PUC. | |||||||||||||||
BLKWRT | Бит 7 | Режим блочной записи. Для режима блочной записи также должен быть установлен WRT. Бит BLKWRT автоматически сбрасывается при установке EMEX. | |||||||||||||||
WRT | Бит 6 | Запись. Этот бит используется для выбора любого режима записи. Бит WRT автоматически сбрасывается при установке EMEX. | |||||||||||||||
Резерв | Биты 5-3 | Зарезервировано. Всегда читается как 0. | |||||||||||||||
MERAS | Бит 2 | Массовое стирание и обычное стирание. Эти биты используются совместно для выбора режима стирания. Биты MERAS и ERASE автоматически сбрасываются, когда устанавливается EMEX. | |||||||||||||||
ERASE | Бит 1 | ||||||||||||||||
| |||||||||||||||||
Резерв | Биты 5-3 | Зарезервировано. Всегда читается как 0. |
FCTL2, регистр управления флэш-памятью
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
FWKEYx, читается как 096h |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
FSSELx | FNx |
rw-0 | rw-1 | rw-0 | rw-0 | rw-0 | rw-0 | rw-1 | rw-0 |
FWKEY | Биты 15-8 | Пароль FCTLx. Всегда читается как 096h. Должен записываться как 0A5h, в противном случае будет генерироваться сигнал PUC. |
FSSELx | Биты 7-6 | Выбор источника тактирования контроллера флэш |
FNx | Биты 5-0 | Делитель тактовой частоты для контроллера флэш. Эти шесть битов позволяют установить необходимый коэффициент деления для тактирования контроллера флэш. Значение коэффициента деления равно FNx+1. К примеру, когда FNx=00h, коэффициент деления равен 1. Когда FNx=02Fh, коэффициент деления равен 64. |
FCTL3, регистр управления флэш-памятью
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
FWKEYx, читается как 096h | |||||||
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Резерв | EMEX | LOCK | WAIT | ACCVIFG | KEYV | BUSY |
r0 | r0 | rw-0 | rw-1 | r-1 | rw-0 | rw-(0) | r(w)-0 |
FWKEY | Биты 15-8 | Пароль FCTLx. Всегда читается как 096h. Должен записываться как 0A5h, в противном случае будет генерироваться сигнал PUC. |
Резерв | Биты 7-6 | Зарезервировано. Всегда читается как 0. |
EMEX | Бит 5 | Аварийный выход |
LOCK | Бит 4 | Блокировка. Этот бит разблокирует флэш-память для выполнения записи или стирания. Бит LOCK может быть установлен в любой момент во время записи байта/слова или операции стирания, при этом выполняемая операция будет нормально завершена. В режиме блочной записи, если бит LOCK устанавливается, когда BLKWRT=WAIT=1, биты BLKWRT и WAIT сбрасываются и режим нормально заканчивается. |
WAIT | Бит 3 | Ожидание. Указывает, что происходит запись флэш-памяти. |
ACCVIFG | Бит 2 | Флаг прерывания при нарушении прав доступа |
KEYV | Бит 1 | Ключ нарушения безопасности флэш. Этот бит показывает, что был записан неправильный пароль FCTLx в любой регистр управления флэш-памятью и при его установке генерируется сигнал PUC. Бит KEYV должен быть сброшен программно. |
BUSY | Бит 0 | Занято. Этот бит показывает состояние тактового генератора флэш. |
IE1, регистр 1 разрешения прерывания
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|
| ACCVIE |
|
|
|
|
|
|
| rw-0 |
|
|
|
|
|
| Биты 7-6, 4-0 | Эти биты могут быть использованы для других модулей. См. справочной руководство конкретного устройства. |
ACCVIE | Бит 5 | Разрешение прерывания при нарушении доступа к флэш-памяти. Этот бит разрешает прерывание от ACCVIFG. Поскольку остальные биты в IE1 могут быть использованы для других модулей, рекомендуется устанавливать и очищать этот бит с помощью команд BIS.B или BIC.B, вместо команд MOV.B или CLR.B. |
Раздел 6 Супервизор напряжения питания
В этом разделе описывается работа супервизора напряжения питания (SVS1). Модуль SVS реализован в устройствах MSP430x15x и MSP430x16x.