Главная Учебники - Разные Микроконтроллеры MSP430. Руководство пользователя
поиск по сайту правообладателям
|
|
|
содержание .. 1 2 3 ..
Раздел 5
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Примечание: Минимальное
напряжение VCC во время записи или стирания флэш-памяти Минимальное значение напряжения VCC во время записи или стирания флэш-памяти должно составлять 2,7В. Если VCC падает ниже 2,7В во время записи или стирания, результат записи или стирания будет непредсказуемым. |

Рис.5-1 Блок-схема модуля флэш-памяти
Флэш-память в MSP430 разбита на сегменты. В неё может быть записан один бит, байт или слово, но сегмент – это минимальный размер флэш-памяти, который можно стереть. Три режима стирания позволяют стереть один сегмент, стереть все главные сегменты или стереть все сегменты (основные и информационные сегменты).
Флэш-память разделена на основной и информационный разделы памяти. Нет никаких различий в работе основного и информационного разделов памяти. Программный код или данные могут быть расположены в любом разделе. Различие между этими двумя разделами заключается в разных размерах сегмента и различных физических адресах.
Информационная память имеет два 128-байтных сегмента (в устройствах MSP430x1101 есть только один сегмент). Основная память имеет два или более 512-байтных сегмента. См. справочное руководство конкретного устройства для выяснения точной карты памяти.
На рис.5.2 показана сегментация памяти на основе примера 4 кБ флэш-памяти, имеющей восемь основных сегментов и оба информационных сегмента.

Рис.5-2 Сегменты флэш-памяти, пример для 4кБ
Режим по умолчанию для флэш-памяти – режим чтения. В этом режиме флэш-память не может быть стерта или записана, тактовый генератор и генератор напряжения выключены – память работает подобно ПЗУ.
Флэш-память MSP430 поддерживает внутрисистемное программирование (ISP) и не нуждается в использовании дополнительного внешнего напряжения. ЦПУ может программировать собственную флэш-память. Приведенные ниже режимы записи/стирания флэш-памяти выбираются битами BLKWRT, WRT, MERAS, ERASE:
Чтение или запись флэш-памяти во время программирования или стирания запрещены. Если требуется выполнение программы ЦПУ в течении записи или стирания, исполняемый код должен быть помещен в ОЗУ. Любое обновление флэш может инициироваться из флэш-памяти или ОЗУ.
5.3.1 Тактовый генератор флэш-памяти
Операции записи и стирания управляются тактовым генератором флэш-памяти, показанным на рис.5.3. Рабочая частота f(FTG) тактового генератора должна лежать в диапазоне от ~ 257 кГц до ~ 476 кГц (точные данные см. в руководстве по конкретному устройству).

Рис.5-3 Блок-схема тактового генератора флэш-памяти
Тактовый генератор флэш-памяти может тактироваться от ACLK, SMCLK или MCLK. Тактовый сигнал выбранного источника должен быть поделен с помощью битов FNx для обеспечения необходимых требований к частоте f(FTG). Если появляется девиация (отклонение) частоты f(FTG) от требуемого значения в ходе записи или стирания, результат записи или стирания может быть непредсказуемым или же флэш-память окажется подвергнутой ударной перегрузке сверх допустимых пределов, гарантирующих надежную работу.
5.3.2 Стирание флэш-памяти
После стирания бит флэш-памяти читается как «1». Можно программировать индивидуально каждый бит, меняя его значение с «1» на «0», но перепрограммирование от «0» к «1» требует выполнения цикла стирания. Сегмент – это наименьшее количество флэш-памяти, которое можно стереть. Существует три режима стирания, которые могут быть выбраны с помощью битов ERASE и MERAS в соответствии с таблицей 5-1.
Таблица 5-1. Режимы стирания
| MERAS | ERASE | Режим стирания |
| 0 | 1 | Стирание сегмента |
| 1 | 0 | Массовое стирание (стирание всех сегментов основной памяти) |
| 1 | 1 | Стирание всей флэш-памяти (основных и информационных сегментов) |
Любое стирание инициируется фиктивной2 записью в адресный диапазон, который будет стерт. Фиктивная запись запускает тактовый генератор флэш-памяти и процедуру стирания. На рис.5.4 показан временной цикл процесса стирания. Бит BUSY устанавливается немедленно после фиктивной записи и остается установленным в течение всего цикла стирания. Биты BUSY, MERAS и ERASE автоматически очищаются, когда цикл завершен. Временные параметры цикла стирания не зависят от объема представленной в устройстве флэш-памяти. Продолжительность цикла стирания одинакова для всех устройств MSP430.

Рис.5-4 Временная диаграмма цикла стирания
Фиктивная запись по адресу, который лежит вне диапазона стирания не приводит к запуску цикла стирания, не воздействует на флэш-память и не влияет на флаги. Такая ошибочная фиктивная запись игнорируется.
Прерывания должны быть отключены перед началом цикла стирания флэш-памяти. После завершения цикла стирания прерывания могут быть разрешены вновь. Любое прерывание, произошедшее во время цикла стирания, вызовет установку соответствующего флага, а после разрешения прерываний будет сгенерирован запрос на обработку прерывания.
Инициирование процедуры стирания из программы, находящейся в флэш-памяти
Любой цикл стирания может быть инициирован программой, находящейся как во флэш-памяти, так и в ОЗУ. Когда стирание сегмента инициировано программой из флэш-памяти, все тактирование выполняется контроллером флэш-памяти, а ЦПУ останавливается до завершения цикла стирания. После окончания цикла стирания ЦПУ продолжает выполнение программного кода с команды, следующей за фиктивной записью.
Когда цикл стирания инициируется программой их флэш-памяти, возможно стирание кода, необходимого для выполнения после завершения стирания. Если это произойдет, работа ЦПУ после окончания цикла стирания будет непредсказуема.
Программный поток, инициирующий стирание из флэш-памяти, показан на рис.5.5.

Рис.5-5. Цикл стирания, инициируемый программой из флэш-памяти
; Стирание сегмента из флэш. 514 кГц < SMCLK < 952 кГц ; Принимается ACCVIE = NMIIE = OFIE = 0. MOV #WDTPW+WDTHOLD,&WDTCTL ; Отключение WDT DINT ; Запрещение прерываний MOV #FWKEY+FSSEL1+FN0,&FCTL2 ; SMCLK/2 MOV #FWKEY,&FCTL3 ; Очистка LOCK MOV #FWKEY+ERASE,&FCTL1 ; Разрешение стирания сегмента CLR &0FC10h ; Фиктивная запись, стирание S1 MOV #FWKEY+LOCK,&FCTL3 ; Выполнено, установка LOCK ... ; Повторное включение WDT? EINT ; Разрешение прерываний |
Инициирование процедуры стирания программой из ОЗУ
Любой цикл стирания может быть инициирован из ОЗУ. В этом случае ЦПУ не приостанавливается, и может продолжать выполнять код из ОЗУ. Доступ ЦПУ к любому адресу флэш-памяти возможен после окончания цикла стирания, которое определяется путем опроса бита BUSY. Попытка доступа к флэш-памяти, когда BUSY=1 приведет к нарушению доступа с последующей установкой флага ACCVIFG и непредсказуемым результатам процедуры стирания.
Программный поток стирания из флэш-памяти программой из ОЗУ показан на рис.5.6.

Рис.5-6. Цикл стирания, инициируемый программой из ОЗУ
; Стирание сегмента программой из ОЗУ. 514 кГц < SMCLK < 952 кГц ; Принимается ACCVIE = NMIIE = OFIE = 0. MOV #WDTPW+WDTHOLD,&WDTCTL ; Отключение WDT DINT ; Запрещение прерываний L1 BIT #BUSY,&FCTL3 ; Проверка BUSY JNZ L1 ; Ожидание, пока занято MOV #FWKEY+FSSEL1+FN0,&FCTL2 ; SMCLK/2 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 ; Разрешение прерываний |
5.3.3 Запись в флэш-память
Режимы записи, задаваемые битами WRT и BLKWRT приведены в таблице 5.2.
Таблица 5-2. Режимы записи
| BLKWRT | WRT | Режим записи |
| 0 | 1 | Запись байта/слова |
| 1 | 1 | Запись блока |
Каждый из режимов записи использует последовательность собственных команд записи, но режим блочной записи позволяет выполнять запись примерно вдвое быстрее по сравнению с режимом байт/слово, поскольку генератор напряжения остается включенным до завершения записи блока. Любая команда, модифицирующая получателя может использоваться для изменения месторасположения в флэш-памяти как в режиме записи байта/слова, так и в режиме блочной записи.
Бит BUSY установлен, пока активна процедура записи и очищается, когда запись завершена. Если операция записи инициирована из ОЗУ, ЦПУ не должен обращаться к флэш-памяти, пока BUSY=1. В противном случае произойдет нарушение прав доступа, будет установлен флаг ACCVIFG, а результат записи окажется непредсказуем.
Запись байта/слова
Операция записи байта/слова может инициироваться программой из флэш-памяти или из ОЗУ. Когда инициирование происходит из флэш-памяти, все тактирование осуществляется контроллером флэш-памяти, а ЦПУ ожидает завершения записи. После выполнения записи ЦПУ продолжает выполнение кода с команды, следующей за командой записи. Временная диаграмма процедуры записи байта/слова показана на рис. 5.7.

Рис.5-7 Временная диаграмма операции записи байта/слова
Когда запись байта/слова выполняется из ОЗУ, ЦПУ продолжает выполнять код из ОЗУ. Бит 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-байт.

Рис.5-10 Блоки флэш-памяти
Блочная запись не может быть инициирована из флэш-памяти. Блочная запись должна инициироваться только из ОЗУ или ПЗУ. Бит 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):
Программирование флэш-памяти через 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 FWKEY, должен записываться как 0A5h |
| 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. 0 Режим блочной записи выключен 1 Режим блочной записи включен |
|||||||||||||||
| WRT | Бит 6 | Запись. Этот бит
используется для выбора любого режима записи. Бит WRT автоматически
сбрасывается при установке EMEX. 0 Режим записи выключен 1 Режим записи включен |
|||||||||||||||
| Резерв | Биты 5-3 | Зарезервировано. Всегда читается как 0. | |||||||||||||||
| MERAS | Бит 2 | Массовое стирание и обычное стирание. Эти биты используются совместно для выбора режима стирания. Биты MERAS и ERASE автоматически сбрасываются, когда устанавливается EMEX. | |||||||||||||||
| ERASE | Бит 1 | ||||||||||||||||
|
|||||||||||||||||
| Резерв | Биты 5-3 | Зарезервировано. Всегда читается как 0. | |||||||||||||||
FCTL2, регистр управления флэш-памятью
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
| FWKEYx,
читается как 096h должен записываться как 0A5h |
| 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 | Выбор источника
тактирования контроллера флэш 00 ACLK 01 MCLK 10 SMCLK 11 SMCLK |
| FNx | Биты 5-0 | Делитель тактовой частоты для контроллера флэш. Эти шесть битов позволяют установить необходимый коэффициент деления для тактирования контроллера флэш. Значение коэффициента деления равно FNx+1. К примеру, когда FNx=00h, коэффициент деления равен 1. Когда FNx=02Fh, коэффициент деления равен 64. |
FCTL3, регистр управления флэш-памятью
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
| FWKEYx,
читается как 096h должен записываться как 0A5h |
| 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 | Аварийный выход 0 Нет аварийного выхода 1 Аварийный выход |
| LOCK | Бит 4 | Блокировка. Этот бит
разблокирует флэш-память для выполнения записи или стирания. Бит LOCK
может быть установлен в любой момент во время записи байта/слова или
операции стирания, при этом выполняемая операция будет нормально
завершена. В режиме блочной записи, если бит LOCK устанавливается, когда
BLKWRT=WAIT=1, биты BLKWRT и WAIT сбрасываются и режим нормально
заканчивается. 0 Разблокировано 1 Заблокировано |
| WAIT | Бит 3 | Ожидание. Указывает,
что происходит запись флэш-памяти. 0 Флэш-память не готова для записи следующего байта/слова. 1 Флэш-память готова для записи следующего байта/слова. |
| ACCVIFG | Бит 2 | Флаг прерывания при
нарушении прав доступа 0 Прерывание не ожидается 1 Ожидание прерывание |
| KEYV | Бит 1 | Ключ нарушения
безопасности флэш. Этот бит показывает, что был записан неправильный
пароль FCTLx в любой регистр управления флэш-памятью и при его установке
генерируется сигнал PUC. Бит KEYV должен быть сброшен программно. 0 Был записан корректный пароль FCTLx 1 Был записан некорректный пароль FCTLx |
| BUSY | Бит 0 | Занято. Этот бит
показывает состояние тактового генератора флэш. 0 Не занят 1 Занят |
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. 0 Прерывание запрещено 1 Прерывание разрешено |
В этом разделе описывается работа супервизора напряжения питания (SVS1). Модуль SVS реализован в устройствах MSP430x15x и MSP430x16x.
6.1 Введение в SVS
Супервизор напряжения питания (SVS) используется для мониторинга напряжения питания AVCC или внешнего напряжения. SVS может быть сконфигурирован так, чтобы выполнялась установка флага или генерировался сигнал сброса POR, когда напряжение питания или внешнее напряжение снижаются ниже порога, установленного пользователем.
SVS обладает следующими возможностями:
Блок-схема SVS показана на рис.6.1.

Рис.6-1 Блок схема модуля SVS
6.2 Функционирование SVS
SVS определяет снижение напряжения AVCC ниже заданного уровня. Модуль SVS можно сконфигурировать на выработку сигнала POR или установку флага при снижении напряжения. После сигнала POR модуль SVS отключается, чтобы сохранить потребление тока.
6.2.1 Конфигурирование SVS
Биты VLDx используются для включения/выключения SVS и выбора одного из 14 пороговых уровней (V(SYS_IT-)) для сравнения с AVCC. SVS выключен, когда VLDx=0 и включен, когда VLDx>0. Бит SVSON не включает SVS. Он показывает включенное/выключенное состояние модуля SVS и может использоваться для определения, включен ли SVS.
При VLDx=1111 выбирается внешний канал SVSin. Напряжение на SVSin сравнивается с внутренним уровнем напряжения, равным приблизительно 1.2В.
6.2.1 Функционирование компаратора SVS
Состояние пониженного напряжения появляется, когда AVCC понижается меньше выбранного порога или когда внешнее напряжение снижается ниже порога в 1.2В. Любое состояние пониженного напряжения устанавливает бит SVSFG.
Бит PORON включает или выключает функцию сброса устройства от SVS. Если PORON=1, при установке бита SVSFG генерируется сигнал POR. Если PORON=0, состояние пониженного напряжения устанавливает SVSFG, но не приводит к генерации сигнала POR.
Бит SVSFG при установке фиксируется. Благодаря этому пользователь может определить, что ранее произошло понижение напряжения. Бит SVSFG должен сбрасываться программным обеспечением пользователя. Если состояние пониженного напряжение остается в момент сброса бита SVSFG, он немедленно устанавливается снова модулем SVS.
6.2.3 Изменение битов VLDx
После изменения битов VLDx выдерживаются две установочных задержки, позволяющие установиться схеме SVS. В течение каждой задержки SVS не будет устанавливать SVSFG. Задержки td(SVSon) и tsettle показаны на рис.6.2. Задержка td(SVSon) действует, когда VLDx изменяются от нуля к любому отличному от нуля значению, и составляет примерно 50 мкС. Задержка tsettle действует при изменении битов VLDx от любого ненулевого значения к любому другому ненулевому значению и составляет максимум ~12 мкС. Точные значения задержек см. в руководстве по конкретному устройству.
Во время задержек SVS не устанавливает флаг состояния пониженного напряжения и не сбрасывает устройство, а бит SVSON остается очищенным. Программное обеспечение может проверять бит SVSON для определения момента окончания задержки и начала достоверного мониторинга напряжения модулем SVS.
6.2.4 Рабочий диапазон SVS
Каждый уровень SVS имеет гистерезис для уменьшения чувствительности к малым изменениям питающего напряжения, когда величина AVCC близка к установленному порогу. Работа SVS и SVS/Brownout2 взаимодействие показано на рис.6.3.

Рис.6-3 Рабочие уровни для SVS и схемы Brownout/сброс
6.3 Регистры SVS
Перечень регистров SVS приведен в таблице 6.1.
Таблица 6-1. Регистры SVS
| Регистр | Краткое обозначение | Тип регистра | Адрес | Исходное состояние |
| Управляющий регистр SVS | SVSCTL | Чтение/запись | 050h | Сбрасывается после POR |
SVSCTL, регистр управления SVS
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| VLDx | PORON | SVSON | SVSOP | SVSFG |
| rw-(0) | rw-(0) | rw-(0) | rw-(0) | rw-(0) | r | r | rw-(0) |
| VLDx | Биты 7-4 | Детектируемый уровень
напряжения. Эти биты включают SVS и позволяют выбрать номинальный
пороговый уровень напряжения SVS. Точные параметры см. в руководстве на
конкретное устройство. |
| PORON | Бит 3 | Включение POR. Этот бит
разрешает флагу SVSFG вызывать сброс устройства сигналом POR. 0 SVSFG не вызывает POR 1 Установка SVSFG приводит к генерации POR |
| SVSON | Бит 2 | Включение SVS. Этот бит
отражает состояние работы SVS. Этот бит НЕ ВКЛЮЧАЕТ SVS. SVS включается
установкой VLDx > 0. 0 SVS выключен 1 SVS включен |
| SVSOP | Бит 1 | Выход SVS. Этот бит
отражает выходное значение компаратора SVS. 0 Выход компаратора SVS имеет высокий уровень 1 Выход компаратора SVS имеет низкий уровень |
| SVSFG | Бит 0 | Флаг SVS. Этот бит
показывает состояние пониженного напряжения. Бит SVSFG остается
установленным после устранения состояния пониженного напряжения до
сброса программным обеспечением. 0 Состояние пониженного напряжения не произошло 1 Произошло либо уже присутствует состояние пониженного напряжения |
В этом разделе описывается аппаратный умножитель. Аппаратный умножитель реализован в устройствах MSP430x14x и MSP430x16x.
7.1 Введение в аппаратный умножитель
Аппаратный умножитель является периферийным устройством и не является частью ЦПУ MSP430. Это означает, что его действия не пересекаются с действиями ЦПУ. Регистры умножителя – это периферийные регистры, которые загружаются и читаются командами ЦПУ.
Аппаратный умножитель поддерживает:
Блок-схема аппаратного умножителя показана на рис.7.1.

Рис.7-1 Блок-схема аппаратного умножителя
7.2 Функционирование аппаратного умножителя
Аппаратный умножитель поддерживает операции умножения без знака, умножения со знаком, умножения без знака с накоплением и умножение со знаком и накоплением. Тип операции выбирается адресом, в который записан первый операнд. Аппаратный умножитель имеет два 16-разрядных регистра OP1 и OP2 и три регистра результата RESLO, RESHI и SUMEXT. В регистре RESLO содержится младшее слово результата, в RESHI - старшее слово результата, а в регистре SUMEXT находится информация о результате. Результат может быть прочитан следующей командой после записи в OP2, кроме случая, когда используется косвенный режим адресации.
7.2.1 Регистры операндов
Регистр OP1 первого операнда имеет четыре адреса, показанные в таблице 7.1, используемые при выборе режима умножения. Запись первого операнда по желаемому адресу позволит выбрать тип операции умножения, но не приведет к началу выполнения какой-либо операции. Запись второго операнда в регистр OP2 второго операнда инициирует операцию умножения. Запись в OP2 стартует выбранную операцию над значениями, сохраненными в OP1 и OP2. Результат записывается в три регистра результата RESLO, RESHI и SUMEXT.
Повторение операций умножения может выполняться без перезагрузки OP1, если значение в OP1 используется для последовательных операций. Нет необходимости перезаписывать значение в OP1 для выполнения операций.
Таблица 7-1. Адреса OP1
| Адрес OP1 |
Имя регистра | Операция |
| 0130h | MPY | Умножение без знака |
| 0132h | MPYS | Умножение со знаком |
| 0134h | MAC | Умножение без знака с накоплением |
| 0136h | MACS | Умножение со знаком и накоплением |
7.2.2 Регистры результата
Младший регистр результата RESLO содержит младшие 16 разрядов вычисленного результата. Содержимое старшего регистра результата RESHI зависит от операции умножения. Различные варианты содержимого RESHI приведены в таблице 7.2.
Таблица 7-2. Возможные варианты содержимого регистра RESHI
| Режим | Содержимое RESHI |
| MPY | Старшие 16 разрядов результата |
| MPYS | В старшем бите MSB регистра находится знак результата. Оставшиеся биты содержат старшие 15 разрядов результата. Используется представление результата с дополнением до двух. |
| MAC | Старшие 16 разрядов результата |
| MACS | Старшие 16 разрядов результата. Используется представление результата с дополнением до двух. |
Содержимое регистра расширенного суммирования SUMEXT зависит от выполненной операции умножения. Различные варианты содержимого SUMEXT приведены в таблице 7.3.
Таблица 7-3. Возможные варианты содержимого регистра SUMEXT
| Режим | SUMEXT | ||||||
| MPY | SUMEXT всегда содержит 0000h | ||||||
| MPYS |
|
||||||
| MAC |
|
||||||
| MACS |
|
Потеря значащих разрядов и переполнение в режиме MACS
Умножитель не может автоматически определить потерю значащих разрядов или переполнение в режиме MACS. Диапазон аккумулятора для положительных чисел равен 0 – 7FFF FFFFh, а для отрицательных чисел 0FFF FFFh – 8000 0000h. Переполнение происходит, когда результат суммирования двух отрицательных чисел выходит за диапазон для положительного числа. Потеря значащих разрядов происходит, когда результат сложения двух положительных чисел выходит за диапазон для отрицательного числа. В обоих случаях регистр SUMEXT содержит правильный знак результата: 0FFFFh при переполнении и 0000h при потере значащих разрядов. Программное обеспечение пользователя должно определить и соответствующим образом обработать эти состояния.
7.2.3 Примеры программного обеспечения
Ниже приведены примеры для всех режимов умножителя. Все режимы 8*8 используют абсолютные адреса для регистров, поскольку ассемблер не позволит обеспечить доступ типа .B к регистрам-словам, когда используются метки из стандартного файла определений.
; 16x16 умножение без знака MOV #01234h,&MPY ; Загрузка первого операнда MOV #05678h,&OP2 ; Загрузка второго операнда ; ... ; Обработка результатов ; 8x8 умножение без знака. Абсолютная адресация. MOV.B #012h,&0130h ; Загрузка первого операнда MOV.B #034h,&0138h ; Загрузка второго операнда ; ... ; Обработка результатов ; 16x16 умножение со знаком MOV #01234h,&MPYS ; Загрузка первого операнда MOV #05678h,&OP2 ; Загрузка второго операнда ; ... ; Обработка результатов ; 8x8 умножение со знаком. Абсолютная адресация. MOV.B #012h,&0132h ; Загрузка первого операнда SXT &MPYS ; Знаковое расширение первого операнда MOV.B #034h,&0138h ; Загрузка второго операнда SXT &OP2 ; Знаковое расширение второго операнда ; (запуск второго умножения) ; ... ; Обработка результатов ; 16x16 умножение без знака с накоплением MOV #01234h,&MAC ; Загрузка первого операнда MOV #05678h,&OP2 ; Загрузка второго операнда ; ... ; Обработка результатов ; 8x8 умножение без знака с накоплением. Абсолютная адресация. MOV.B #012h,&0134h ; Загрузка первого операнда MOV.B #034h,&0138h ; Загрузка второго операнда ; ... ; Обработка результатов ; 16x16 умножение со знаком и накоплением MOV #01234h,&MACS ; Загрузка первого операнда MOV #05678h,&OP2 ; Загрузка второго операнда ; ... ; Обработка результатов ; 8x8 умножение со знаком и накоплением. Абсолютная адресация MOV.B #012h,&0136h ; Загрузка первого операнда SXT &MACS ; Знаковое расширение первого операнда MOV.B #034h,R5 ; Временное расположение второго операнда SXT R5 ; Знаковое расширение второго операнда MOV R5,&OP2 ; Загрузка второго операнда ; ... ; Обработка результатов |
7.2.4 Косвенная адресация RESLO
Когда используется косвенный или косвенный автоинкрементный режим адресации для доступа к регистрам результата, нужна, по крайней мере, одна команда между загрузкой второго операнда и доступа к одному из регистров результата:
; Доступ к результатам умножителя с косвенной адресацией MOV #RESLO,R5 ; Загрузка адреса RESLO в R5 для косвенной адресации MOV &OPER1,&MPY ; Загрузка первого операнда MOV &OPER2,&OP2 ; Загрузка второго операнда NOP ; Необходим один цикл MOV @R5+,&xxx ; Пересылка RESLO MOV @R5,&xxx ; Пересылка RESHI |
7.2.5 Использование прерываний
Если прерывание произошло после записи OP1, но до записи OP2, а умножитель используется в процедуре обработки прерывания, исходный выбранный режим умножителя будет потерян и результат станет непредсказуемым. Чтобы этого избежать, нужно отключать прерывания перед использованием аппаратного умножителя и не использовать его в процедурах обработки прерывания.
; Отключение прерываний перед использованием аппаратного умножителя DINT ; Запрещение прерываний NOP ; Требуется для DINT MOV #xxh,&MPY ; Загрузка первого операнда MOV #xxh,&OP2 ; Загрузка второго операнда EINT ; Разрешение прерываний ; Обработка результатов |
7.3 Регистры аппаратного умножителя
Перечень регистров аппаратного умножителя приведен в таблице 7.4.
Таблица 7-4. Регистры аппаратного умножителя
| Регистр | Краткое обозначение |
Тип регистра |
Адрес | Исходное состояние |
| Операнд один – умножение | MPY | Чтение/запись | 0130h | Неизменное |
| Операнд один – умножение со знаком | MPYS | Чтение/запись | 0132h | Неизменное |
| Операнд один – умножение с накоплением | MAC | Чтение/запись | 0134h | Неизменное |
| Операнд один – умножение со знаком и накоплением | MACS | Чтение/запись | 0136h | Неизменное |
| Операнд два | OP2 | Чтение/запись | 0138h | Неизменное |
| Младшее слово результата | RESLO | Чтение/запись | 013Ah | Неопределенное |
| Старшее слово результата | RESHI | Чтение/запись | 013Ch | Неопределенное |
| Регистр знакового дополнения | SUMEXT | Чтение | 013Eh | Неопределенное |
Модуль контроллера DMA переносит данные из одного адреса в другой без участия ЦПУ. Этот раздел описывает работу контроллера DMA. Контроллер DMA реализован в устройствах MSP430x15x и MSP430x16x.
8.1 Введение в контроллер DMA
Контроллер прямого доступа к памяти (DMA) переносит данные из одного адреса в другой во всем адресном диапазоне без вмешательства ЦПУ. К примеру, контроллер DMA может переместить данные из памяти преобразования ADC12 в ОЗУ.
Использование контроллера DMA может увеличить пропускную способность периферийных модулей. Также в результате его использования можно достигнуть снижения потребляемой системой мощности, позволяя ЦПУ оставаться в режиме пониженного энергопотребления без пробуждения для пересылки данных в/из периферии.
Контроллер DMA обладает следующими возможностями:
Блок-схема контроллера DMA показана на рис.8.1.

Рис.8-1. Блок-схема контроллера DMA
8.2 Функционирование DMA
Модуль контроллера DMA конфигурируется программным обеспечением пользователя. В этом разделе описывается инициализация и функционирование DMA.
8.2.1 Режимы адресации DMA
Контроллер DMA имеет четыре режима адресации переноса, показанные на рис.8.2:
Режим адресации переноса конфигурируется отдельно для каждого канала DMA. Например, канал 0 может выполнять пересылку между двумя фиксированными адресами, в то время как канал 1 осуществляет перемещение между двумя блоками адресов.
Режимы адресации DMA конфигурируются с помощью управляющих битов DMASRCINCR и DMADSTINCR. Бит DMASRCINCR выбирается, если адрес источника DMA (DMAxSA) инкрементируется, декрементируется или не изменяется после каждого DMA-переноса. Бит DMADSTINCR выбирается, если адрес источника DMA (DMAxDA) инкрементируется, декрементируется или не изменяется после каждого DMA-переноса.
DMA-перенос может быть таким: байт-байт, слово-слово, байт-слово или слово-байт. Когда выполняется перенос слово-байт, перемещается только младший байт слова-источника. Когда выполняется перенос байт-слово, старший байт слова-получателя очищается, когда происходит перемещение.

Рис.8-2. Режимы адресации DMA
8.2.2 Режимы переноса DMA
Контроллер DMA имеет шесть режимов переноса:
Режим переноса в каждом канале DMA может индивидуально конфигурироваться с помощью битов DMADTx. Например, канал 0 может быть сконфигурирован в режиме одиночного переноса, в то время как канал 1 сконфигурирован в режиме пакетно-блочного переноса, а канал 2 работает в повторяющемся блочном режиме. Режим DMA-переноса конфигурируется независимо от режима адресации DMA. Любой режим адресации DMA может использоваться с любым режимом DMA-переноса.
Диаграмма состояний DMA показана на рис.8.3.

* Биты DMASRCINCR и DMADSTCINCR определяют, будут ли
временные регистры инкрементированны или декрементированны
Биты DMADSTBYTE и DMASRCBYTE определяют, инкрементируются/декркментируются
ли они одним байтом или словом
** Однажды стартовав, пакетно-блочный режим работает
непрерывно до сброса бита DMAEN. Дополнительных событий запуска не требуется
Рис.8-3. Диаграмма состояний DMA
Одиночный перенос
Когда канал DMA сконфигурирован в одиночном режиме переноса, пересылка каждого байта/слова требует отдельного запуска. Одиночный режим переноса устанавливается при DMADTx=0. Когда DMADTx=0, бит DMAEN очищается после каждой пересылки и должен быть установлен снова для выполнения очередной пересылки. Режим повторного одиночного переноса устанавливается при DMADTx=4. Когда DMATx=4, контроллер DMA остается включенным с DMAEN=1 и DMA-перенос происходит каждый раз, когда выполняется запуск.
Регистр DMAxSZ содержит количество пересылок, которые нужно выполнить. Если DMAxSZ=0, перенос не выполняется. Содержимое регистра DMAxSZ копируется во временный регистр и уменьшается с каждым переносом. Когда регистр DMAxSZ декрементируется до нуля, он перезагружается из временного регистра и выполняется установка соответствующего флага DMAIFG.
Блочный перенос В блочном режиме перенос полного блока данных выполняется после всего лишь одного запуска. Режим блочного переноса устанавливается при DMADTx=1. Когда DMADTx=1, бит DMAEN очищается после завершения переноса блока и должен быть установлен снова до запуска процесса переноса другого блока. После того, как поблочный перенос был запущен, последующие сигналы запуска, появляющиеся во время переноса, игнорируются.
Режим повторного поблочного переноса устанавливается при DMADTx=5. Когда DMADTx=5, бит DMAEN остается установленным после завершения переноса блока. Следующий запуск после завершения повторного поблочного переноса запустит другой блочный перенос.
Регистр DMAxSZ используется для задания размера блока, а биты DMADSTINCR и DMASRCINCR выбираются, если DMA-адрес получателя (DMAxDA) и DMA-адрес источника (DMAxSA) инкрементируется или декрементируется после каждого переноса блока.
Во время блочного или повторяющегося блочного переноса регистры DMAxSA, DMAxDA и DMAxSZ копируются во временные регистры. Временные значения DMAxSA и DMAxDA инкрементируются и декрементируются после каждой пересылки в блоке. Регистр DMAxSZ декрементируется после каждого переноса блока и отображает количество пересылок, оставшихся в блоке. Когда регистр DMAxSZ декрементируется до нуля, он перезагружается из временного регистра, а затем устанавливается соответствующий флаг DMAIFG.
В процессе переноса блока ЦПУ приостанавливается до завершения переноса блока. Для выполнения поблочного переноса необходимо 2*MCLK*DMAxSZ тактовых цикла. После завершения переноса блока ЦПУ возобновляет работу с предыдущего состояния.
Пакетно-блочный перенос
Пакетно-блочный перенос – это поблочные пересылки, чередуемые с работой ЦПУ. В пакетно-блочном режиме ЦПУ выполняет 2 MCLK цикла после пересылки каждых четырех байт/слов блока. Во время пакетно-блочного переноса производительность ЦПУ составляет 20% от номинальной. Установка пакетно-блочного режима происходит при DMADT={2,3}. После пакетно-блочного переноса ЦПУ возвращается к 100% производительности, а бит DMAEN очищается. DMAEN должен быть установлен снова перед запуском другой пакетно-блочной передачи. После того, как пакетно-блочный перенос был запущен, последующие сигналы запуска, появляющиеся во время пакетно-блочного переноса, игнорируются.
Повторяющийся пакетно-блочный режим устанавливается при DMADT={6,7}. Когда DMADTx={6,7}, бит DMAEN остается установленным после завершения пакетно-блочного переноса, и никакие дальнейшие сигналы запуска для инициирования другого пакетно-блочного переноса не требуются. Другой пакетно-блочный перенос начинается немедленно после завершения текущего пакетно-блочного переноса. В этом случае DMA-переносы должны останавливаться либо путем очистки бита DMAEN, либо по NMI-прерыванию, когда бит ENNMI установлен. В повторяющемся пакетно-блочном режиме производительность ЦПУ постоянно составляет 20%, пока повторяющийся пакетно-блочный перенос не будет остановлен.
Инициирование DMA-переносов
DMA-переносы инициируются программным или аппаратным обеспечением в соответствии с описанием в таблице 8.1. Источники запуска конфигурируются для каждого канала независимо с помощью битов DMAxTSELx.
Таблица 8-1. Источники запуска DMA
| DMAxTSELx | Запуск DMA | Действие, приводящее к запуску |
| 0000 | DMAREQ | Установка бита DMAREQ запускает DMA-перенос. DMAREQ автоматически сбрасывается, когда начинается DMA-перенос. |
| 0001 | TACCR2 CCIFG | DMA-перенос запускается, когда устанавливается флаг TACCR2 CCIFG. TACCR2 CCIFG автоматически сбрасывается, когда начинается DMA-перенос. |
| 0010 | TBCCR2 CCIFG | DMA-перенос запускается, когда устанавливается флаг TBCCR2 CCIFG. TBCCR2 CCIFG автоматически сбрасывается, когда начинается DMA-перенос. |
| 0011 | Прием данных через I2C | DMA-перенос запускается, когда модуль I2C принимает новые данные. Флаг RXRDYIFG не влияет на запуск DMA-переноса. RXRDYIFG не очищается, когда начинается DMA-перенос, а программная установка RXRDYIFG не приводит к запуску DMA-переноса. |
| 0100 | Готовность передачи I2C | DMA-перенос запускается, когда модуль I2C готов передавать новые данные. Флаг TXRDYIFG не влияет на запуск DMA-перенос. TXRDYIFG не очищается, когда начинается DMA-перенос, а программная установка TXRDYIFG не приводит к запуску DMA-переноса. |
| 0101 | DAC12_0 DAC12IFG | DMA-перенос запускается, когда устанавливается флаг DAC12IFG DAC12_0. Флаг DAC12IFG DAC12_0 автоматически сбрасывается, когда начинается DMA-перенос. |
| 0110 | ADC12IFGx | DMA-перенос запускается, когда устанавливается ADAC12IFG. Флаг ADC12IFGx автоматически выбирается при конфигурировании ADC12. Когда ADC12 выполняет одиночное или повторяющееся преобразование в одном канале, флаг преобразования ADC12IFGx запускает DMA-перенос. Когда ADC12 выполняет одиночную или повторяющуюся последовательность преобразований, флаг ADC12IFGx после последнего преобразования в последовательности запускает DMA-перенос. Флаг ADC12IFGx не сбрасывается автоматически, когда начинается DMA-перенос. Все флаги ADC12IFGx автоматически сбрасываются, когда выполняется доступ к соответствующему регистру ADC12MEMx либо программой, либо контроллером DMA. |
| 0111-1101 | Нет запуска | Запуск DMA-передачи не производится. |
| 1110 | DMAxIFG | Флаг DMA0IFG запускает DMA канал 1. Флаг DMA1IFG запускает DMA канал 2. Флаг DMA2IFG запускает DMA канал 0. Ни один из флагов DMAxIFG автоматически не сбрасывается, когда начинается DMA-перенос. |
| 1111 | DMAE0 | Внешний запуск от DMAE0. |
Запуск по фронту
Когда DMALEVEL=0, запуск производится по перепаду сигнала: фронт сигнала запуска инициирует пересылку. В режиме одиночного перемещения каждый DMA-перенос нуждается в собственном сигнале запуска. Когда используется блочный или пакетно-блочный режимы, для инициирования переноса требуется только один сигнал запуска.
Запуск по уровню
Когда DMALEVEL=1, активизируется запуск по уровню. Правильная работа в режиме запуска по уровню возможна при выборе внешнего триггера (сигнала запуска) DMAE0 в качестве DMA-триггера.
Когда DMALEVEL=1, DMA-перенос данных выполняется до тех пор, пока сигнал запуска имеет высокий уровень, а бит DMAEN остается установленным. Когда DMALEVEL=1, рекомендуется использовать режимы DMA-пересылки DMADTx={0, 1, 2, 3}, поскольку бит DMAEN автоматически сбрасывается после конфигурирования DMA-переноса.
Когда DMALEVEL=1, сигнал запуска должен иметь высокий уровень при блочном или пакетно-блочном переносе до завершения переноса. Если сигнал запуска становится низким во время блочного или пакетно-блочного переноса, контроллер DMA удерживается в текущем состоянии до тех пор, пока сигнал запуска снова не станет высоким или пока не произойдет программной модификации DMA-регистров. Если DMA-регистры не модифицировались программой когда сигнал запуска опять стал высоким, перенос возобновляется с момента, когда сигнал запуска низким.
Останов выполнения команд при выполнении DMA-переноса
Бит DMAONFETCH управляет приостановкой ЦПУ для выполнения DMA-переноса. Когда DMAONFETCH=0, при получении сигнала DMA-запуска ЦПУ немедленно останавливается и начинается DMA-перенос. Когда DMAONFETCH=1, ЦПУ завершает текущую выполняемую команду, после чего контроллер DMA останавливает ЦПУ и начинает DMA-перенос.
8.2.4 Останов DMA-переноса
Есть два способа остановить выполнение DMA-переноса:
8.2.5 Приоритеты каналов DMA
По умолчанию приоритеты DMA-каналов такие: DMA0-DMA1-DMA2. Если одновременно появляются или находятся в ожидании два или три сигнала DMA-запуска, первым завершает DMA-перенос (одиночный, блочный или пакетно-блочный перенос) канал с наивысшим приоритетом, затем канал со вторым приоритетом и в завершении канал с третьим приоритетом. Выполняющиеся DMA-переносы не приостанавливаются, если запускается перенос в DMA-канале с более высоким приоритетом. Канал с высшим приоритетом ожидает завершения выполняющегося DMA-переноса, а только затем стартует.
Приоритеты DMA-каналов конфигурируются с помощью бита ROUNDROBIN. Когда бит ROUNDROBIN установлен, низший приоритет получает канал, завершивший DMA-перенос. Последовательность приоритетов DMA-каналов всегда остается подобной DMA0-DMA1-DMA2, например:
| Приоритет DMA | Завершенный перенос | Новый приоритет DMA |
| DMA0 – DMA1 – DMA2 | DMA1 | DMA2 – DMA0 – DMA1 |
| DMA2 – DMA0 – DMA1 | DMA2 | DMA0 – DMA1 – DMA2 |
| DMA0 – DMA1 – DMA2 | DMA0 | DMA1 – DMA2 – DMA0 |
Когда бит ROUNDROBIN очищен, приоритет DMA возвращается к приоритету по умолчанию.
8.2.6 Длительность цикла DMA-переноса
DMA нуждается в одном или двух тактовых циклах MCLK для синхронизации перед каждым одиночным переносом или полным блочным или пакетно-блочным переносом. Для переноса каждого байта/слова нужно два цикла MCLK после синхронизации и один цикл времени задержки после переноса. Поскольку DMA использует MCLK, продолжительность цикла DMA определяется режимом работы MSP430 и установками системы тактирования.
Если источник MCLK активен, но ЦПУ выключено, DMA будет использовать источник MCLK для каждого переноса без включения ЦПУ. Если источник MCLK выключен, DMA временно перезапустит MCLK с тактированием от DCOCLK для выполнения одиночного переноса или полного блочного или пакетно-блочного переноса. ЦПУ остается выключенным, а после завершения переноса выключается MCLK. Максимальная длительность цикла DMA для всех режимов работы показана в таблице 8.2.
Таблица 8-2. Максимальная длительность цикла DMA
| Режим работы ЦПУ | Источник тактирования |
Максимальная продолжительность цикла DMA |
| Активный режим | MCLK=DCOCLK | 4 цикла MCLK |
| Активный режим | MCLK=LFXT1CLK | 4 цикла MCLK |
| Режим пониженного потребления LPM0/1 | MCLK=DCOCLK | 5 циклов MCLK |
| Режим пониженного потребления LPM3/4 | MCLK=DCOCLK | 5 циклов MCLK + 6 мкС* |
| Режим пониженного потребления LPM0/1 | MCLK=LFXT1CLK | 5 циклов MCLK |
| Режим пониженного потребления LPM3 | MCLK=LFXT1CLK | 5 циклов MCLK |
| Режим пониженного потребления LPM4 | MCLK=LFXT1CLK | 5 циклов MCLK + 6 мкС* |
* Дополнительные 6 мкС необходимы для запуска DCOCLK. Этот параметр в справочном руководстве называется t(LPMx).
8.2.7 Использование DMA с системными прерываниями
DMA переносы не прерываются системными прерываниями. Системные прерывания ожидают завершения DMA-переноса. Немаскируемые NMI-прерывания могут прервать работу DMA-контроллера, если установлен бит ENNMI.
Процедуры обработки системного прерывания прерываются DMA-событиями. Если процедура обработки прерывания или какая-либо другая подпрограмма должны выполняться без прерываний, контроллер DMA необходимо отключить перед выполнением такой подпрограммы.
8.2.8 Прерывания контроллера DMA
Каждый канал DMA имеет собственный флаг DMAIFG. Каждый флаг DMAIFG устанавливается в любом режиме, когда соответствующий счетный регистр DMAxSZ обнуляется. Если соответствующие биты DMAIE и GIE установлены, генерируется запрос прерывания.
Все флаги DMAIFG - источники в векторе прерывания только одного контроллера DMA, а вектор прерывания общий с модулем DAC12. Программное обеспечение должно проверить флаги DMAIFG и DAC12IFG, чтобы определить источник прерывания. Флаги DMAIFG автоматически не сбрасываются и должны быть сброшены программно.
8.3 Регистры DMA
Перечень регистров DMA приведен в таблице 8.3.
Таблица 8-3. Регистры DMA
| Регистр | Краткое обозначение | Тип регистра |
Адрес | Исходное состояние |
| Регистр 0 управления DMA | DMACTL0 | Чтение/запись | 0122h | Сбрасывается с POR |
| Регистр 1 управления DMA | DMACTL1 | Чтение/запись | 0124h | Сбрасывается с POR |
| Регистр управления канала 0 DMA | DMA0CTL | Чтение/запись | 01E0h | Сбрасывается с POR |
| Регистр адреса источника канала 0 DMA | DMA0SA | Чтение/запись | 01E2h | Не изменяется |
| Регистр адреса получателя канала 0 DMA | DMA0DA | Чтение/запись | 01E4h | Не изменяется |
| Регистр объема переноса канала 0 DMA | DMA0SZ | Чтение/запись | 01E6h | Не изменяется |
| Регистр управления канала 1 DMA | DMA1CTL | Чтение/запись | 01E8h | Сбрасывается с POR |
| Регистр адреса источника канала 1 DMA | DMA1SA | Чтение/запись | 01EAh | Не изменяется |
| Регистр адреса получателя канала 1 DMA | DMA1DA | Чтение/запись | 01ECh | Не изменяется |
| Регистр объема переноса канала 1 DMA | DMA1SZ | Чтение/запись | 01EEh | Не изменяется |
| Регистр управления канала 2 DMA | DMA2CTL | Чтение/запись | 01F0h | Сбрасывается с POR |
| Регистр адреса источника канала 2 DMA | DMA2SA | Чтение/запись | 01F2h | Не изменяется |
| Регистр адреса получателя канала 2 DMA | DMA2DA | Чтение/запись | 01F4h | Не изменяется |
| Регистр объема переноса канала 2 DMA | DMA2SZ | Чтение/запись | 01F6h | Не изменяется |
DMACTL0, регистр 0 управления DMA
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
| Зарезервировано | DMA2TSELx |
| rw-(0) | rw-(0) | rw-(0) | rw-(0) | rw-(0) | rw-(0) | rw-(0) | rw-(0) |
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| DMA1TSELx | DMA0TSELx |
| rw-(0) | rw-(0) | rw-(0) | rw-(0) | rw-(0) | rw-(0) | rw-(0) | rw-(0) |
| Зарезервировано | Биты 15-12 | Зарезервировано |
| DMA2TSELx | Биты 11-8 | Выбор источника сигнала
запуска DMA. Эти биты определяют источник сигнала запуска DMA-переноса.0000 Бит DMAREQ (программный запуск)
0001 Выход Timer_A CCR2
0010 Выход Timer_B CCR2
0011 Готовность приема I2C
0100 Готовность передачи I2C
0101 Бит DAC12IFG DAC12_0CTL
0110 ADC12 ADC12IFGx
0111 Действие не производится
1000 Действие не производится
1001 Действие не производится
1010 Действие не производится
1011 Действие не производится
1100 Действие не производится
1101 Действие не производится
1110 Бит DMA0IFG запускает канал 1 DMA
Бит DMA1IFG запускает канал 2 DMA
Бит DMA2IFG запускает канал 0 DMA
1111 Внешний запуск DMAE0
|
| DMA1TSELx | Биты 7-4 | Подобно DMA2TSELx |
| DMA0TSELx | Биты 3-0 | Подобно DMA2TSELx |
DMACTL1, регистр 1 управления DMA
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| r-0 | r-0 | r-0 | r-0 | r-0 | r-0 | r-0 | r-0 |
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 0 | 0 | 0 | 0 | 0 | DMA ONFETCH |
ROUND ROBIN |
ENNMI |
| r-0 | r-0 | r-0 | r-0 | r-0 | rw-(0) | rw-(0) | rw-(0) |
| Зарезер вировано |
Биты 15-3 |
Зарезервировано. Только чтение. Всегда читаются как 0. |
| DMA ONFETCH |
Бит 2 | Выборка DMA0 DMA перенос происходит немедленно 1 DMA перенос происходит при выборке следующей команды после запуска |
| ROUND ROBIN |
Бит 1 | Этот бит включает
циклическое переключение приоритетов каналов DMA.0 Устанавливается следующий приоритет DMA каналов: DMA0-DMA1-DMA2 1 Приоритет DMA каналов изменяется с каждым переносом |
| ENNMI | Бит 0 | Разрешение NMI. Этот
бит разрешает прерывание DMA переноса немаскируемым прерыванием NMI.
Когда NMI прерывает DMA перенос, текущий перенос завершается нормально,
но последующие переносы прекращаются и устанавливается флаг DMAABORT.0 NMI прерывание не прерывает DMA перенос. 1 NMI прерывание прерывает DMA перенос. |
DMAxCTL, регистр управления DMA каналом x
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
| Зарезер вировано |
DMADTx | DMADSTINCRx | DMASRCINCRx |
| rw-(0) | rw-(0) | rw-(0) | rw-(0) | rw-(0) | rw-(0) | rw-(0) | rw-(0) |
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| DMA DSTBYTE |
DMA SRCBYTE |
DMALEVEL | DMAEN | DMAIFG | DMAIE | DMA ABORT |
DMAREQ |
| rw-(0) | rw-(0) | rw-(0) | rw-(0) | rw-(0) | rw-(0) | rw-(0) | rw-(0) |
| Зарезер вировано |
Бит 15 | Зарезервирован. |
| DMADTx | Биты 14-12 |
Режим переноса DMA.000 Одиночный перенос 001 Блочный перенос 010 Пакетно-блочный перенос 011 Пакетно-блочный перенос 100 Повторный одиночный перенос 101 Повторный блочный перенос 110 Повторный пакетно-блочный перенос 111 Повторный пакетно-блочный перенос |
| DMA DSTINCRx |
Биты 11-10 |
Инкремент DMA
получателя. Этот бит позволяет выбрать автоматическое инкрементирование
или декрементирование адреса получателя после каждого переноса байта или
слова. Когда DMADSTBYTE=1, адрес получателя инкрементируется на единицу.
Когда DMADSTBYTE=0, адрес получателя инкрементируется на 2. DMAxDA
копируется во временный регистр и уже временный регистр инкрементируется
или декрементируется. DMAxDA не инкрементируется и не декрементируется.00 Адрес получателя не изменяется 01 Адрес получателя не изменяется 10 Адрес получателя декрементируется 11 Адрес получателя инкрементируется |
| DMA SRCINCRx |
Биты 9-8 | Инкремент DMA
источника. Этот бит позволяет выбрать автоматическое инкрементирование
или декрементирование адреса источника после каждого переноса байта или
слова. Когда DMASRCBYTE=1, адрес источника инкрементируется на единицу.
Когда DMASRCBYTE=0, адрес источника инкрементируется на 2. DMAxSA
копируется во временный регистр и уже временный регистр инкрементируется
или декрементируется. DMAxSA не инкрементируется и не декрементируется.00 Адрес источника не изменяется 01 Адрес источника не изменяется 10 Адрес источника декрементируется 11 Адрес источника инкрементируется |
| DMA DSTBYTE |
Бит 7 | Байт DMA получателя.
Этот бит определяет, какой формат будет иметь получатель: байт или
слово.0 Слово. 1 Байт. |
| DMA SRCBYTE |
Бит 6 | Байт DMA источника.
Этот бит определяет, какой формат будет иметь источник: байт или слово.0 Слово. 1 Байт. |
| DMA LEVEL |
Бит 5 | Уровень DMA. Этот бит
позволяет выбрать условие запуска переноса: по перепаду или по уровню.0 Чувствительность к перепаду 1 Чувствительность к уровню |
| DMAEN | Бит 4 | Разрешение DMA0 Запрещено 1 Разрешено |
| DMAIFG | Бит 3 | Флаг DMA прерывания0 Прерывание не ожидается 1 Ожидается прерывание |
| DMAIE | Бит 2 | Разрешение DMA
прерывания0 Запрещено 1 Разрешено |
| DMA ABORT |
Бит 1 | Прекращение DMA
переносов. Этот бит показывает, что DMA перенос был прерван NMI
прерыванием.0 DMA перенос не прерывался 1 DMA перенос был прерван NMI прерыванием |
| DMAREQ | Бит 0 | Запрос DMA. Программное
управление стартом DMA. Бит DMAREQ сбрасывается автоматически.0 Нет DMA старта 1 Старт DMA |
DMAxSA, регистр адреса источника DMA
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
| DMAxSAx |
| rw | rw | rw | rw | rw | rw | rw | rw |
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| DMAxSAx |
| rw | rw | rw | rw | rw | rw | rw | rw |
| DMAxSAx | Биты 15-0 | Адрес DMA источника. Регистр адреса источника указывает адрес источника DMA для одиночных переносов или первый адрес источника для блочных переносов. Регистр адреса источника остается неизменным во время блочных или пакетно-блочных переносов. |
DMAxDA, регистр адреса получателя DMA
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
| DMAxDAx |
| rw | rw | rw | rw | rw | rw | rw | rw |
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| DMAxDAx |
| rw | rw | rw | rw | rw | rw | rw | rw |
| DMAxDAx | Биты 15-0 | Адрес DMA получателя. Регистр адреса получателя указывает адрес получателя DMA для одиночных переносов или первый адрес получателя для блочных переносов. Регистр DMAxDA остается неизменным во время блочных или пакетно-блочных переносов. |
DMAxSZ, адресный регистр размера DMA
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
| DMAxSZx |
| rw | rw | rw | rw | rw | rw | rw | rw |
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| DMAxSZx |
| rw | rw | rw | rw | rw | rw | rw | rw |
| DMAxSZx | Биты 15-0 | Размер DMA. Регистр размера DMA определяет количество данных при переносе блока. Регистр DMAxSZ декрементируется при каждом переносе слова или байта. Когда DMAxSZ декрементируется до нуля, в него немедленно автоматически перезагружается предыдущее значение инициализации. 00000h Перенос запрещен 00001h Перенос одного байта или слова 00002h Перенос двух байт или слов . . 0FFFFh Перенос 65535 байт или слов |
содержание .. 1 2 3 ..