Файл: Семейство микроконтроллеров 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 |
|