Поиск по сайту: |
|
По базе: |
|
Главная страница > Применение > Микроконтроллеров > MSP430 |
|
|||||||||||||||||
Техника самопрограммирования флэш-памяти MSP430Резюме Самопрограммируемость Flash становится все более и более важной функцией. Однако при выполнении программирования/стирания Flash памяти программы микроконтроллер не может одновременно выполнять прикладную программу, расположенную в том же массиве памяти. Таким образом, микроконтроллер только с одним встроенным массивом Flash памяти не может одновременно выполнять программу и изменять ее. Проблема может быть решена двумя способами: 1) Команды стирания/программирования Flash памяти перед выполнением должны копироваться в ОЗУ. 2) При выполнении стирания/программирования вычислительное ядро переходит в режим Idle. В данном примере применения описывается, как выполнить операции стирания/программирования Flash памяти, а также приводится необходимое программное обеспечение. 1 Введение Самопрограммируемость Flash становится все более и более важной функцией. Однако при выполнении программирования/стирания Flash памяти программы микроконтроллер не может одновременно выполнять прикладную программу, расположенную в том же массиве памяти. Таким образом, микроконтроллер только с одним встроенным массивом Flash памяти не может одновременно выполнять программу и изменять ее. Есть два подхода к решению этой задачи. Первый состоит в том, что команды стирания/программирования Flash памяти перед выполнением копируются в ОЗУ. Второй - в том, что при выполнении стирания/программирования вычислительное ядро переходит в режим Idle. Все микроконтроллеры семейства MSP430 компании Texas Instruments имеют встроенный контроллер Flash памяти, который позволяет выполнять прикладную программу и изменять содержимое одного и того же модуля Flash памяти. Этот пример применения описывает способ, который позволяет стирать/программировать Flash память, а также приводятся тексты программных модулей, необходимых для выполнения этих операций. 2 Состав Flash модуля Состав Flash модуль MSP430:
Три 16-разрядных управляющих регистра FCTL1, FCTL2 и FCTL3 полностью управляют Flash модулем (см. рисунок 1). Более детальное описание этих регистров можно найти в руководстве пользователя по микроконтроллерам семейства MSP430 (документ SLAU049).
3 Стирание и программирование Flash памяти Обычно вычислительное ядро считывает из Flash памяти данные или код прикладной программы. Однако, иногда данные во Flash памяти необходимо изменить при выполнении программы. В течение этой операции стирания-записи (то есть перепрограммирования) Flash памяти управление осуществляется от задающего генератора, имеющегося в модуле Flash. В это время вычислительное ядро не может получить доступа к Flash памяти и, следовательно, программа должна находиться в другом месте, например в ОЗУ, или вычислительное ядро должно перейти в Idle режим. После завершения программирования Flash памяти вычислительное ядро вновь берет управление над ней на себя. Оба эти метода имеют свои преимущества. В настоящее время микроконтроллеры семейства MSP430 имеют один модуль Flash для хранения данных и прикладной программы. Это означает, что при программировании Flash памяти векторы прерываний недоступны и никакие запросы на прерывание не могут быть обработаны. Поэтому, при модификации Flash памяти все источники прерывания, вплоть до сторожевого таймера, должны быть отключены. Это можно сделать при помощи программы, приведенной на рисунке 2. dint ; блокировка всех маскируемых прерываний clr.b &IE1 ; блокировка NMI, ACCV и OF прерываний mov #5A80h, &WDTCTL ; блокировка сторожевого таймераРисунок 2. Программа блокировки всех прерываний и сторожевого таймера 3.1 Программирование Flash памяти с копированием прикладной программы в ОЗУ При программировании Flash памяти ОЗУ - единственная память, из которой вычислительное ядро может выполнять прикладную программу. Пример программы, приведенный на рисунке 3, копирует функцию программирования Flash памяти в стек для выполнения прикладной программы в из ОЗУ. Когда Flash память становится снова доступной, счетчик команд указывает на Flash память и указатель стека восстанавливается. Бит Busy (бит 0 в FCTL3) указывает доступность Flash памяти. В приложении A приведена прикладная программа flash _ram.s43, которая может выполнять три функции:
Выполнение программы из ОЗУ позволяет вычислительному ядру работать в процессе изменения Flash памяти. Это позволяет MSP430 выполнять программирование Flash памяти и, например, принимать данные через UART. Конечно, в этой ситуации обнаружение принятых данных может быть реализовано только путем опроса флага принятия данных UART. MODULE flash_ww PUBLIC Flash_ww RSEG CODE #define _CPU_ 5 /* 5=MSP430F1121, 6=MSP430F149 device */ #include <Std_def.s43> ;*********************************************************************** ; Запись во Flash память слова ; *********************************************************************** ; Запись 1 слова во Flash путем копирования небольшой функции (18 байт) ; в ОЗУ при помощи динамической памяти, расположенной в стеке. ; Определение функции: void Flash_ww( int *Data_ptr, int word ) ; скрэтч-регистр: R12 = int *Data_ptr ; R14 - int слово ; R13, R15 - общего назначения ; Предположение: При записи Flash не занята (Flash _ww_start) ; *********************************************************************** Flash _ww dint ; защита стека от повреждения clr.b &IE1 ; блокировка NMI, ACCV и OF прерываний mov #5A80h, &WDTCTL ; блокировка сторожевого таймера mov #Flash_ww_end, R13 ; определение конечного адреса и длины mov #Flash_ww_length, R15 ; функция, которая будет скопирована в ОЗУ mov #0A500h, &FCTL3 ; LOCK = 0 copy push @R13 ; копирование функции в ОЗУ decd R13 dec R15 jnz copy mov SP,R15 mov #0A540h,&FCTL1 ; WRT = 1 call R15 ; вызов из ОЗУ функции записи Flash mov #0A500h,&FCTL1 ; WRT = 0 mov #0A510h,&FCTL3 ; LOCK = 1 add #2*Flash_ww_length,SP ; обслуживание стека ret ;-------------------------Функция записи Flash памяти------------------------ Flash _ww_start mov R14,0 (R12) ; запись байта во Flash память wait_bf бит #1, &FCTL3 ; ожидание флага занятости jnz wait_bf Flash _ww_end ret ; вычисление номера слова Flash памяти, которое необходимо записать в ОЗУ Flash _ww_length EQU (Flash _ww_end-Flash_ww_start+2)/2 ENDMOD Рисунок 3. Программа копирования кода прикладной программы из Flash памяти в стек 3.2 Прямое перепрограммирование Flash памяти Flash модуль MSP430 имеет уникальную функцию - самопрограммируемость. Эта функция позволяет перепрограммировать Flash память без копирования программы в другую память. Когда памяти в течение перепрограммирования Flash памяти вычислительное ядро выбирает команды из нее, Flash модуль возвращает вычислительному ядру команду 3FFFh (JMP $). Эта команда "зацикливает" вычислительное ядро до тех пор, пока перепрограммирование Flash памяти не будет закончено. По окончании перепрограммирования Flash модуль возвращает следующую команду, и выполнение программы продолжается. Как можно увидеть из кода программы, приведенной на рисунке 3, это - самый простой способ перепрограммировать Flash память микроконтроллеров семейства MSP430. Однако у этого метода имеется один недостаток - при перепрограммировании Flash памяти вычислительное ядро находится в режиме останова и никакая программа или подпрограмма обработки прерывания не может в это время выполняться. Кроме того, этот метод позволяет перепрограммировать Flash память только байтами или словами (7 бит в FCTL1 сброшен), а значит не может использоваться режим быстрой записи сегментами. Более полные примеры программ для стирания и записи Flash памяти при помощи этой функции приведены в приложении А (файл Flash _idle.c) и приложении В (файл Flash _test.c). / ***********************************************************************/ /* Flash _ww */ /* запись одного слова (16 бит) во Flash память*/ / ***********************************************************************/ void Flash_ww( int *Data_ptr, int word ) { FCTL3 = 0x0A500; /* Lock = 0 */ FCTL1 = 0x0A540;/* WRT = 1 */ *Data_ptr=word;/* запись слова */ FCTL1 = 0x0A500;/* WRT = 0 */ FCTL3 = 0x0A510; /* Lock = 1 */ } Рисунок 4. подпрограмма остановки вычислительного ядра при перепрограммировании Flash памяти 4 Демонстрационная программа Было реализовано два метода перепрограммирования Flash памяти:
Файл Flash _ram.s43 содержит программу перепрограммирования Flash памяти из ОЗУ, которая написана на ассемблере и может быть вызвана из C компилятора. Файл Flash _idle.c содержит программу прямого перепрограммирования Flash памяти. Эти файлы содержат одинаковые функции:
Поскольку они имеют одинаковый формат вызова, то они взаимозаменяемы, что и показано на рисунке 5. Демонстрационной программе необходимы три следующих файла:
5 Заключение В данном примере применения описаны два метода перепрограммирования Flash памяти и приведены примеры их программной реализации. В том случае, когда необходимо обеспечить функционирование вычислительного ядра (например, прием данных при помощи UART), нужно использовать метод перепрограммирования из ОЗУ. При этом методе необходима дополнительная память. Более простой метод состоит в остановке вычислительного ядра при перепрограммировании Flash память. Длительность записи одного слова приблизительно равняется 80 мкс, а одного сегмента - 12 мс. Пример программы:
виртуальный сонник, магия для женщин
Главная - Микросхемы - DOC - ЖКИ - Источники питания - Электромеханика - Интерфейсы - Программы - Применения - Статьи |
|
Впервые? | Реклама на сайте | О проекте | Карта портала тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru ©1998-2023 Рынок Микроэлектроники |
|