Руководство пользователя MSP430 (1041606), страница 15
Текст из файла (страница 15)
Когда канал 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-переноса:
-
Одиночный, блочный или пакетно-блочный DMA-перенос может быть остановлен NMI-прерыванием, если установлен бит ENNMI в регистре DMACTL1.
-
Пакетно-блочный перенос может быть остановлен очисткой бита DMAEN.
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.