Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MSP430_НВВ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.67 Mб
Скачать
    1. Контроллер dma

Контроллер DMA (Direct Memory Access – прямой доступ к памяти) предназначен для быстрой пересылки содержимого байта/слова/блока с одним начальным адресом в байт/слово/блок памяти с другим адресом без использования ресурсов процессорного ядра. Использование DMA приводит к увеличению производительности всей системы, а также, в некоторых случаях, снижению общего потребления, т.к. контроллер DMA способен выполнять пересылки в то время, когда процессорное ядро находится в режиме пониженного энергопотребления.

Контроллер DMA имеет следующие основные характеристики:

  • Три независимых канала переноса:

  • 2 такта частоты MCLK для переноса байта/слова;

  • Размер перемещаемого блока – до 65535 байт/слов;

  • 14 различных событий, инициирующих процесс пересылки данных для каждого канала;

  • 4 различных режима адресации приемника/источника данных;

  • Поддержка одиночного, блочного или прерывистого блочного режимов переноса.

Процесс запуска пересылок инициируется либо программно, либо автоматически при генерации какого-либо события от периферийных устройств: готовность приемника/передатчика последовательных интерфейсов, срабатывание модулей захвата-сравнения, окончание преобразования АЦП и т.д.

Контроллер DMA поддерживает четыре режимы адресации к данным, устанавливаемых независимо для каждого канала:

  • Пересылка байта/слова источника в байт/слово приемника. Может использоваться, например, для преобразователей интерфейсов - данные, принимаемые UART, автоматически пересылаются в передатчик SPI.

  • Пересылка байта/слова источника в массив байт/слов приемника. Может использоваться для автоматического приема данных от UART и сохранения их в блоке памяти ОЗУ.

  • Пересылка содержимого массива байт/слов источника в байт/слово приемника. Может использоваться при последовательной пересылки содержимого блока данных, располагающихся в ОЗУ, в передатчик UART.

  • Пересылка содержимого массива байт/слов источника в массив байт/слов приемника. Может использоваться, например, при сохранении содержимого буферной памяти АЦП в ОЗУ.

Адрес источника и приемника сохраняются в 16-ти разрядных регистрах DMAxSA и DMAxDA соответственно. После пересылки данных содержимое этих регистров автоматически модифицируются (увеличиваются или уменьшаются) согласно состоянию битовых полей DMADSTINCR и DMASRCINCR регистра управления. Количество пересылок определяется содержимым регистра DMAxSZ. Пересылки инициируются срабатыванием источника запуска DMA при условии, что бит регистра управления DMAEN установлен в 1. Перед стартом цикла DMA содержимое регистров DMAxSA, DMAxDA и DMAxSZ автоматически сохраняются во временных буферах, а по окончанию цикла их значения восстанавливаются.

Контроллер DMA поддерживает шесть режимов работы, устанавливаемых независимо для каждого канала. Режим работы определяется состоянием битов DMADT регистра управления. Различают следующие режимы работы:

  • Одиночные пересылки. Каждая пересылка требует срабатывания источника старта, содержимое регистра DMAxSZ уменьшается на 1 после каждой пересылки. При достижении содержимого DMAxSZ нулевого значения, бит DAMEN автоматически сбрасывается в 0, и устанавливается флаг требования прерывания DMAIFG.

  • Блочные пересылки. Блок данных размером, определяемым содержимым DMAxSZ, пересылается при срабатывании источника старта. По окончанию пересылок бит DMAEN автоматически сбрасывается и устанавливается флаг DMAIFG. Во время пересылки блока процессорное ядро приостанавливает свою работу.

  • Блочные прерывистые пересылки. Данный режим отличается от блочного режима тем, что во время пересылки блока работа контроллера DMA перемежается с активностью процессорного ядра. При этом общий временной ресурс распределяется следующим образом: 20% времени работает CPU, и 80% - DMA. После окончания цикла DMA, процессор восстанавливает свою полную производительность.

  • Одиночные повторяющиеся пересылки. Отличаются от одиночных тем, что по окончанию цикла DMA бит разрешения DMAEN остается установленным, поэтому по следующему срабатыванию источника старта весь цикл автоматически начинается с начала. Для остановки данного режима достаточно программно установить бит DMAEN в состояние 0.

  • Блочные повторяющиеся пересылки. Отличаются от блочных тем, что по окончанию цикла DMA, бит DMAEN остается установленным. Поэтому при срабатывании источника старта цикл DMA повторяется с начала.

  • Блочные прерывистые повторяющиеся пересылки. Отличаются от блочных прерывистых тем, что по окончанию цикла DMA, бит DMAEN остается установленным.

4-х битное поле DMAxTSEL определяет источник старта DMA для каждого канала. Как правило, старт цикла DMA вызывается установкой флага требования прерывания периферийных устройств. После старта DMA эти флаги автоматически сбрасываются.

Используются следующие коды этого поля.

  • Код 0 – программный запуск DMA. Установка бита DMAREQ регистра управления канала вызывает старт соответствующего канала DMA. После старта этот бит автоматически сбрасывается.

  • Код 1– модуль захвата-сравнения 2 таймера А. DMA стартует при установке бита TACCTL2.CCIFG. В том случае, если установлен бит разрешения данного прерывания TACCTL2.CCIE, цикл DMA не запускается.

  • Код 2 – модуль захвата-сравнения 2 таймера В. DMA стартует при установке бита TBCCTL2.CCIFG. В том случае, если установлен бит разрешения данного прерывания (TBCCTL2.CCIE), цикл DMA не запускается.

  • Код 3 – приемник USART0. DMA стартует при установки бита IFG1.URXIFG0. В случае если бит разрешения прерывания IE1.URXIE0 установлен, запуск DMA не производится. В режиме I2C запуск производится при условии приема данных, но не при установке флага I2CIFG.RXRDYIFG. Бит RXRDYIFG автоматически не сбрасывается.

  • Код 4 – передатчик USART0. DMA стартует при установки бита IFG1.UTXIFG0. В случае если бит разрешения прерывания IE1.UTXIE0 установлен, запуск DMA не производится. В режиме I2C запуск производится при условии готовности к передаче данных, но не при установке флага I2CIFG.TXRDYIFG. Бит TXRDYIFG автоматически не сбрасывается

  • Код 5 – канал 0 ЦАП. DMA стартует при установки флага DAC12_0CTL.DAC12IFG. В случае если бит разрешения прерывания DAC12_0CTL.DAC12IE установлен, запуск DMA не производится.

  • Код 6 – АЦП. DMA стартует при установке флага в регистре ADC12IFG, соответствующего последнему преобразованию в серии.

  • Код 7 – модуль захвата-сравнения 0 таймера А. DMA стартует при установке бита TACCTL0.CCIFG. В случае если установлен бит разрешения прерывания TACCTL0.CCIE, цикл DMA не запускается.

  • Код 8 – модуль захвата-сравнения 0 таймера В. DMA стартует при установке бита TBCCTL0.CCIFG. В случае если установлен бит разрешения прерывания TBCCTL0.CCIE0, цикл DMA не запускается.

  • Код 9 – приемник USART1. DMA стартует при установки бита IFG2.URXIFG1. В случае если бит разрешения прерывания IE2.URXIE1 установлен, запуск DMA не производится.

  • Код 10 – передатчик USART1. DMA стартует при установки бита IFG2.UTXIFG1. В случае если бит разрешения прерывания IE2.UTXIE1 установлен, запуск DMA не производится.

  • Код 11 – аппаратный умножитель. Цикл DMA запускается когда аппаратный умножитель готов для приема новых операндов.

  • Код 12 – зарезервирован.

  • Код 13 – зарезервирован.

  • Код 14 – окончание цикла DMA. DMA стартует при установке флага DMAIFG. При этом канал DMA0 запускается по окончании пересылок канала DMA2, канал DMA1 – по завершению работы DMA0, а канал DMA2 – по завершению работы DMA1.

  • Код 15 – внешний источник, подключенный к выводу DMAE0.

Если разрешены несколько каналов DMA и источники старта этих каналов срабатывают одновременно, то последовательность работы каналов будет определяться их приоритетами: сначала отработает канал DMA0, потом DMA1 и, наконец, DMA2. Установка бита ROUNDROBIN регистра управления позволяет динамически менять приоритеты каналов. Т.е. только что отработавшему каналу присваивается самый низкий приоритет.

В том случае, если генерируется запрос разрешенных прерываний во время блочной пересылки DMA, прерывание не берется до окончания цикла DMA. Единственная возможность прервать блочную пересылку – это прерывание NMI при установленном бите разрешения ENNMI регистра управления DMA.

Регистры модуля DMA представлены в таблице 19.

Таблица 19

Имя

Назначение регистра

Нач.адрес

DMACTL0

Регистр управления 0 модуля DMA

122h

DMACTL1

Регистр управления 1 модуля DMA

124h

DMA0CTL

Регистр управления канала 0 DMA

1E0h

DMA0SA

Регистр адреса источника канала 0 DMA

1E2h

DMA0DA

Регистр адреса приемника канала 0 DMA

1E4h

DMA0SZ

Регистр размера блока канала 0 DMA

1E6h

DMA1CTL

Регистр управления канала 1 DMA

1E8h

DMA1SA

Регистр адреса источника канала 1 DMA

1EAh

DMA1DA

Регистр адреса приемника канала 1 DMA

1ECh

DMA1SZ

Регистр размера блока канала 1 DMA

1EEh

DMA2CTL

Регистр управления канала 2 DMA

1F0h

DMA2SA

Регистр адреса источника канала 2 DMA

1F2h

DMA2DA

Регистр адреса приемника канала 2 DMA

1F4h

DMA2SZ

Регистр размера блока канала 2 DMA

1F6h

    • DMACTL0 (DMA Control) – содержат биты управления модуля DMA. Регистр доступен по записи и чтению с помощью словных форм инструкций. Регистр содержат следующие биты:

15 12 11 8

-

DMA2TSEL

7 4 3 0

DMA1TSEL

DMA0TSEL

  • Биты 15..12 – зарезервированы.

  • Биты 11..8 – DMA2TSEL 3,2,1,0 (DMA Trigger Select) – выбор источника старта цикла канала 2 модуля DMA

DMA2TSEL

Источник

0000b

DMAREQ

0001b

TACCTL2.CCIFG

0010b

TBCCTL2.CCIFG

0011b

IFG1.URXIFG0

0100b

IFG1.UTXIFG0

0101b

DAC12_0CTL.DAC12IFG

0110b

ADC12IFG

0111b

TACCTL0.CCIFG

1000b

TBCCTL0.CCIFG

1001b

IFG2.URXIFG1

1010b

IFG2.UTXIFG1

1011b

Готовность аппаратного умножителя

1100b

Зарезервирован

1101b

Зарезервирован

1110b

DMAxCTL.DMAIFG

1111b

Внешний вывод DMAE0

  • Биты 7..4 – DMA1TSEL 3,2,1,0 (DMA Trigger Select) – выбор источника старта цикла канала 1 модуля DMA. Имеют то же назначение, что и биты DMA2TSEL.

  • Биты 3..0 – DMA0TSEL 3,2,1,0 (DMA Trigger Select) – выбор источника старта цикла канала 0 модуля DMA. Имеют то же назначение, что и биты DMA2TSEL.

    • DMACTL1 – содержат биты управления модуля DMA. Регистр доступен по записи и чтению с помощью словных форм инструкций. Регистр содержат следующие биты:

15 8

-

7 3 2 1 0

-

DMAONFETCH

ROUNDROBIN

ENNMI

  • Биты 15..3 – зарезервированы.

  • Бит 2 – DMAONFETCH – выборка DMA. Если этот бит установлен, цикл пересылок DMA начинается непосредственно после срабатывания источника старта DMA. Если бит сброшен – цикл DMA начинается только после того, как текущая инструкция процессора будет выполнена. Бит необходимо устанавливать в том случае, если DMA контроллер используется для записи данных во Flash память, в противном случае разработчики микросхемы обещают непредсказуемое поведение системы.

  • Бит 1 – ROUNDROBIN – карусель. Установка этого бита приводит к циклическому изменению приоритетов каналов DMA после каждого срабатывания. Сброс задает фиксированный приоритет – DMA0, DMA1, DMA2.

  • Бит 0 – ENNMI (Enable NMI) – разрешение NMI. Установка этого бита разрешает обработку прерывания NMI во время блочных пересылок DMA.

    • DMAxCTL – управление канала “x” DMA. Все три регистра имеют одинаковую структуру и доступны по записи и чтению с помощью словных форм инструкций. Регистры имеют следующую структуру:

15 14 13 12 11 10 9 8

-

DMADT 2,1,0

DMADSTINCR 1,0

DMASRCINCR 1,0

7 6 5 4 3 2 1 0

DMADSTBYTE

DMASRCBYTE

DMA LEVEL

DMAEN

DMAIFG

DMAIE

DMA ABORT

DMAREQ

  • Биты 15 – зарезервирован.

  • Биты 14..12 – DMADT 2,1,0 (DMA Data Transfer) – задают режим пересылки данных DMA.

DMADT

Режим

0000b

Одиночный

0001b

Блочный

0010b

Блочный прерывистый

0011b

Блочный прерывистый

0100b

Повторяющийся одиночный

0101b

Повторяющийся блочный

0110b

Повторяющийся блочный прерывистый

0111b

Повторяющийся блочный прерывистый

  • Биты 11,10 – DMADSTINCR 1,0 (DMA Destination Increment) – увеличение назначения. Задают режим модификации содержимого регистра адреса приемника DMAxDA после пересылки данных.

DMADSTINCR1

DMADSTINCR0

Модификация

0

0

Не модифицируется

0

1

Не модифицируется

1

0

Уменьшается

1

1

Увеличивается

Если выбран режим с модификацией, то в случае байтового переноса, содержимое регистра DMAxDA изменяется на 1, в случае словного – на 2.

  • Биты 9,8 – DMASRCINCR 1,0 (DMA Source Increment) – увеличение источника. Задают режим модификации содержимого регистра адреса источника DMAxSA после пересылки данных.

DMASRCINCR1

DMASRCINCR0

Модификация

0

0

Не модифицируется

0

1

Не модифицируется

1

0

Уменьшается

1

1

Увеличивается

Если выбран режим с модификацией, то в случае байтового переноса, содержимое регистра DMAxSA изменяется на 1, в случае словного – на 2.

  • Биты 7 – DMADSTBYTE (Destination Byte) – Байтовый приемник. Установка/сброс этого бита назначают байтовую/словную разрядность регистра-приемника.

  • Биты 6 – DMASRCBYTE (Source Byte) – Байтовый источник. Установка/сброс этого бита назначают байтовую/словную разрядность регистра-источника.

  • Бит 5 – DMALEVEL – чувствительность к уровню запуска. Состояние этого бита имеет значение только в том случае, если в качестве источника старта выбран внешний вывод DMAE0. Если бит сброшен, старт DMA производится по растущему фронту внешнего сигнала. Если бит установлен, DMA производит пересылки до тех пор, пока сигнал DMAE0 находится в состоянии логической 1.

  • Бит 4 – DMAEN (DMA Enable) – разрешение DMA. Установка/сброс этого бита разрешает/запрещает работу DMA.

  • Бит 3 – DMAIFG (DMA Interrupt Flag) – флаг требования прерывания DMA. Устанавливается аппаратно по окончанию цикла DMA (содержимое регистра DMAxSZ стало равно 0). Если данное прерывание разрешено, программа переходит на обработку прерывания с вектором 0FFE0h. Т.к. данный вектор объединяет все каналы DMA и прерывания от ЦАП, подпрограмма обработки должна анализировать все флаги требования прерывания для определения источника прерывания. Сбрасываться этот флаг должен программно.

  • Бит 2 – DMAIE (Interrupt Enable) – разрешение прерывания. Установка/сброс этого бита разрешает/запрещает прерывания от канала DMA.

  • Бит 1 – DMAABORT – принудительный останов DMA. Устанавливается аппаратно, сигнализируя, что текущий цикл DMA был прерван сигналом NMI. Сбрасываться должен программно.

  • Бит 0 – DMAREQ (Request) – запрос. Бит программного запуска DMA. Установка бита вызывает запуск DMA в случае, если выбран программный запуск (соответствующие биты DMAxTSEL установлены в состояние 0000b). Сбрасывается в ноль автоматически.

    • DMAxSA (DMA Source Address ) – 16-ти разрядный регистр, который должен содержать начальный адрес источника данных.

    • DMAxDA (DMA Destination Address) - 16-ти разрядный регистр, который должен содержать начальный адрес приемника данных.

    • DMAxSZ (DMA Size) - 16-ти разрядный регистр, содержащий счетчик количества пересылок DMA.

ПРИМЕР.

С помощью DMA и ЦАП осуществить аппаратную генерацию синусоидального сигнала частотой 1000 Hz. Таблица отсчетов синуса состоит из 64-х значений. Тактовая частота микроконтроллера – 8 MHz.

Условия задачи совпадают с примером, приведенным в п.3.13. Поэтому временные характеристики работы модуля сравнения 1 таймера TA3 можно взять из упомянутого примера. Однако для полной аппаратной поддержки генерации синуса необходимо, чтобы таймер работал в “Up” режиме, генерируя импульсы на выходе TACC1 каждые 15.625 us, т.е. в регистр TACCR0 необходимо записать значение 125. Если установить режим работы TACC1 “Reset/Set”, то длительность этих импульсов будет определяться содержимым регистра TACCR1. Пусть длительность этих импульсов составляет 1 us. Тогда в TACCR1 необходимо записать 8. По переднему фронту этого импульса будет произведена загрузка данных из буфера ЦАП и установлен флаг DAC12_0CTL.DAC12IFG. Этот флаг может инициировать пересылку DMA из источника (регистр DMA0SA должен быть настроен на таблицу синусов) в приемник (регистр DMA0DA должен содержать адрес регистра DAC12_0DAT). Количество пересылок должно соответствовать количеству отсчетов таблицы синусов (64-отсчета), а режим – повторяющийся однократный, т.к. при достижении конца таблицы, необходимо автоматически пересылать данные с ее начала.

bis #60h, &ADC12CTL0 ; включаем источник опорного напряжения 2.5 В

mov #09F2h, &DAC12_0CTL ; DAC12LSEL=2, DAC12IR=1, DAC12AMP=7,

; DAC12DF=1, DAC12ENC=1

mov #0E0h, &TACCTL1 ; TAСС1: Режим работы “Reset/Set”

mov #125, &TACCR0 ; Период тактирования ЦАП

mov #8, &TACCR1 ; Длительность выходного импульса

mov #TASSEL1+MC0+TACLR, &TACTL ; TA3: “Up” режим,

; тактирование от SMCLK

mov #5, &DMACTL0 ; Запуск DMA0 отDAC12_0CTL.DAC12IFG

mov #4300h, &DMA0CTL ; Одиночные повторяющиеся пересылки,

; инкремент источника

mov #SinTab, &DMA0SAL ; Адрес источника

mov #DAC12_0DAT, &DMA0DAL ; Адрес приемника

mov #64, &DMA0SZ ; Размер таблицы

bis #10h, &DMA0CTL ; Разрешение DMA

. . .

SinTab: ; начальный адрес таблицы синуса

DW . . . . .

DW . . . . .

Следует заметить, что на каждую пересылку процессор приостанавливает свою работу на 4 машинных такта: – 2 тратиться на работу DMA, и 2 на синхронизацию процессора. Таким образом, если сравнить реализацию данного примера с примером, приведенным в п.3.13, при той же функциональности, использование DMA позволяет на порядок увеличить временной ресурс процессора. Т.е. на поддержание генерации синусоидального сигнала процессор тратит всего 3.2% своего временного ресурса.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]