Файл: Семейство микроконтроллеров MSP430X1XX, руководство пользователя (2004).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 16.06.2025

Просмотров: 2845

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Раздел VIII.

Контроллер DMA

щего флага DMAIFG. Когда DMADTx=0, бит DMAEN автоматически очищается, когда DMAxSZ декрементируется до нуля и он должен быть снова установлен для выполнения другого переноса.

В повторяющемся одиночном режиме переноса контроллер DMA остается включенным с DMAEN=1, и переносы выполняются каждый раз при появлении условия запуска.

Блочные переносы

Вблочном режиме перенос полного блока данных выполняется после всего лишь одного запуска. Когда DMADTx=1, бит DMAEN очищается после завершения переноса блока и должен быть установлен снова перед запуском переноса другого блока. После запуска переноса блока все последующие сигналы запуска, поступающие в ходе выполнения блочного переноса, игнорируются. Диаграмма состояний блочного переноса показана на рис. 8-4.

Регистр DMAxSZ используется для задания размера блока, а биты DMADSTINCRx и DMASRCINCRx выбираются, если адрес получателя и адрес источника инкрементируется или декрементируется после каждого переноса блока. Если DMAxSZ=0, переносы не выполняются.

Регистры DMAxSA, DMAxDA и DMAxSZ копируются во временные регистры. Временные значения DMAxSA и DMAxDA инкрементируются или декрементируются после каждого переноса в блоке. Регистр DMAxSZ декрементируется после каждого переноса блока и содержит количество оставшихся в блоке переносов. Когда регистр DMAxSZ декрементируется до нуля, он перезагружается из временного регистра, и устанавливается соответствующий флаг DMAIFG.

ВпроцессепереносаблокаЦПУприостанавливаетсядозавершенияпереноса блока. Для выполнения поблочного переноса необходимо 2×MCLK×DMA×SZ тактовых циклов. После завершения переноса блока ЦПУ возобновляет работу

спредыдущего состояния.

Врежиме повторяющегося блочного переноса бит DMAEN остается установленным после завершения переноса блока. Следующий после завершенного повторяющегося блочного переноса сигнал запуска запустит другой блочный перенос.

Пакетно-блочные переносы

В пакетно-блочном режиме переносы блоков, чередуются с работой ЦПУ. ЦПУ выполняет 2 MCLK цикла после переноса каждых четырех байт/слов блока. В результате производительность ЦПУ составляет 20% от номинальной. После завершения пакетно-блочного переноса ЦПУ вновь начинает работать со 100% производительностью, а бит DMAEN очищается. DMAEN должен быть установ-

Библиотека Компэла

151


MSP430x1xxFamily

DMAEN = 0

Сброс

DMAEN = 0

DMAEN = 1

DMAREQ = 0

T_Size

DMAxSZ

DMAxSZ

T_Size

[DMADTx = 1

DMAxSA

T_SourceAdd

DMAxDA

T_DestAdd

и DMAxSZ = 0]

или DMAEN = 0

DMAABORT = 1

Ожидание

DMAABORT = 0

DMAEN = 0

DMAREQ = 0

T_Size DMAxSZ

DMAxSA T_SourceAdd

DMAxDA T_DestAdd

Ожидание запуска

[+Запуск и DMALEVEL = 0 ]

или

[Запуск = 1 и DMALEVEL = 1]

2 x MCLK

Останов ЦПУ,

перенос одного

[ENNMI = 1

байта/слова

и NMI событие

или

DMAxSZ > 0

[DMALEVEL = 1

и запуск = 0]

Декремент DMAxSZ Модификация T_SourceAdd Модификация T_DestAdd

DMADTx = 5

иDMAxSZ = 0

иDMAEN = 1

Рис. 8-4. Диаграмма состояний блочного переноса DMA

лен снова перед запуском другого пакетно-блочного переноса. После запуска пакетно-блочного переноса последующие сигналы запуска, появляющиеся во время выполнения пакетно-блочного переноса, игнорируются. Диаграмма состояний пакетно-блочного переноса показана на рис. 8-5.

Регистр DMAxSZ используется для задания размера блока, а биты DMADSTINCRx и DMASRCINCRx выбираются, если адрес получателя и адрес источника инкрементируется или декрементируется после каждого переноса блока. Если DMAxSZ=0, переносы не выполняются.

Регистры DMAxSZ, DMAxDA и DMAxSZ копируются во временные регистры. Временные значения DMAxSA и DMAxDA инкрементируются или декремен-

152

Библиотека Компэла


Раздел VIII.

Контроллер DMA

DMAEN = 0

Сброс

DMAEN = 0

DMAEN = 0

DMAREQ = 0

DMAEN = 1

T_Size

DMAxSZ

[DMADTx = {2, 3}

DMAxSZ

T_Size

DMAxSA

T_SourceAdd

и DMAxSZ = 0]

DMAxDA

T_DestAdd

или

DMAEN = 0

DMAABORT = 1

Ожидание

DMAABORT=0

Ожидание запуска

[+Запуск и DMALEVEL = 0 ]

или

2 x MCLK

[Запуск = 1 и DMALEVEL = 1]

Останов ЦПУ,

перенос одного

слова/байта

[ENNMI = 1

и событие NMI

DMAREQ = 0

или

T_Size

DMAxSZ

[DMALEVEL = 1

DMAxSA

T_SourceAdd

и Запуск = 0]

DMAxDA

T_DestAdd

Декремент DMAxSZ

DMAxSZ > 0

Модификация T_SourceAdd

Модификация T_DestAdd

DMAxSZ > 0 и

DMAxSZ > 0

выполнен перенос

множества из 4•х слов/байт

[DMADTx = {6, 7}

AND DMAxSZ = 0]

2 x MCLK

Пакетный режим (ЦПУ освобождается на 2хMCLK)

Рис. 8-5. Диаграмма состояний пакетно-блочного переноса DMA

Библиотека Компэла

153


MSP430x1xxFamily

тируются после каждого переноса в блоке. Регистр DMAxSZ декрементируется после каждого переноса блока и содержит количество оставшихся в блоке переносов. Когда DMAxSZ декрементируется до нуля, он перезагружается из временного регистра и устанавливается соответствующий флаг DMAIFG.

В повторяющемся пакетно-блочном режиме бит DMAEN остается установленным после завершения пакетно-блочного переноса и последующие сигналы запуска для инициирования пакетно-блочного переноса не нужны. Другой па- кетно-блочный перенос начинается немедленно после завершенного пакетноблочного переноса. В этом случае, переносы могут быть остановлены очисткой бит DMAEN или по NMI-прерыванию, если установлен ENNMI. В режиме повторяющегося пакетно-блочного переноса производительность будет ЦПУ составлять 20% от номинальной до момента остановки пакетно-блочного переноса.

8.2.3 Инициирование DMA-переносов

Источники запуска переноса в каждом канале DMA конфигурируются независимо с помощью битов DMAxTSELx в соответствии с таблицей 8-2. Биты DMAxTSELx должны модифицироваться только тогда, когда бит DMAEN DMACTLx равен 0. В противном случае могут произойти непредсказуемые запуски DMA.

Когда выбирается условие запуска, оно не должно быть уже выполнено, поскольку в этом случае запуск не произойдет. К примеру, если бит TACCR2 CCIFG выбран как источник запуска, и он уже был установлен, перенос не будет выполнен до момента новой установки бита TACCR2 CCIFG.

Запуски по фронту

Когда DMALEVEL=0, используется условие запуска по фронту, когда фронт сигнала запуска инициирует перенос. В режиме одиночного переноса для выполнения каждого переноса необходим собственный сигнал запуска. Когда используется блочный или пакетно-блочный режим, для инициирования блочного или пакетно-блочного переноса необходим только один сигнал запуска.

Запуски по уровню

Когда DMALEVEL=1, используется условие запуска по уровню. Для правильной работы механизм запуска по уровню может использоваться только тогда, когда в качестве условия запуска выбран внешний триггер DMAE0. DMA переносы запускаются в течение всего времени, пока сигнал запуска имеет высокий уровень и бит DMAEN остается установленным.

Для завершения блочного или пакетно-блочного переноса сигнал запуска должен оставаться в состоянии высокого уровня. Если во время выполнения

154

Библиотека Компэла


Раздел VIII.

Контроллер DMA

блочного или пакетно-блочного переноса сигнал запуска переходит в состояние низкого уровня, контроллер DMA удерживается в текущем состоянии до тех пор, пока сигнал запуска вновь не примет высокий уровень или пока регистры DMA не будут модифицированы программным обеспечением. Если регистры DMA программно не модифицировались, когда сигнал запуска снова перешел в состояние высокого уровня, перенос возобновляется с того состояния, в котором он оставался, когда сигнал запуска стал низкого уровня.

Когда DMALEVEL=1, рекомендуется выбирать режимы переноса при DMADTx={0, 1, 2, 3}, поскольку бит DMAEN автоматически сбрасывается после конфигурирования переноса.

Останов выполнения команд для DMA переносов

Бит DMAONFETCH определяет, когда ЦПУ остановится для выполнения DMA переноса. Когда DMAONFETCH=0, ЦПУ останавливается немедленно и перенос начинается, когда получен сигнал запуска. Когда DMAONFETCH=1, ЦПУ заканчивает выполнение текущей команды, затем контроллер DMA останавливает ЦПУ и начинает перенос.

Примечание: DMAONFETCH обязательно должен использоваться, когда DMA записывает в флэш.

Если контроллер DMA используется для записи во флэш-память, бит DMAONFETCH должен быть установлен. В противном случае результат работы может быть непредсказуем.

Таблица 8-2. Источники запуска DMA

DMAxTSELx

Действие

0000

Установка бита DMAREQ запускает DMA-перенос. Бит DMAREQ автоматически сбрасывается, когда начинается перенос.

Перенос запускается, когда устанавливается флаг TACCR2 CCIFG. Флаг TACCR2 0001 CCIFG автоматически сбрасывается, когда начинается перенос. Если бит TACCR2

CCIE установлен, флаг TACCR2 CCIFG не запустит перенос.

Перенос запускается, когда устанавливается флаг TBCCR2 CCIFG. Флаг TBCCR2 0010 CCIFG автоматически сбрасывается, когда начинается перенос. Если бит TBCCR2

CCIE установлен, флаг TBCCR2 CCIFG не запустит перенос.

Перенос запускается, когда модуль USART0 принимает новые данные. В режиме I2C запуск происходит при условии приема данных, но не при установке флага RXRDYIFG. RXRDYIFG не очищается, когда начинается перенос, а программная установка

0011 RXRDYIFG не приводит к запуску переноса. Если RXRDYIE установлен, условие приема данных не вызовет запуска переноса. В UART или SPI режимах перенос запускается, когда установлен флаг URXIFG0. URXIFG0 автоматически сбрасывается, когда начинается перенос. Если URXIE0 установлен, флаг URXIFG0 не запускает перенос.

Библиотека Компэла

155