- •Микроконтроллеры msp430 Введение
- •1. Центральный процессор msp430
- •1.1. Адресное пространство микроконтроллеров msp430f1xx
- •1.2. Регистровый файл
- •1.3. Байтовая и словная формы инструкций.
- •1.4. Режимы адресации
- •1.4.1 Регистровая адресация
- •1.4.2. Индексная адресация
- •1.4.3 Символьная адресация
- •1.4.4 Абсолютная адресация
- •1.4.5. Косвенная адресация
- •1.4.6. Косвенная адресация с автоинкрементом
- •1.4.7 Непосредственная адресация
- •2. Система команд msp микроконтроллеров
- •2.1. Двухадресные команды
- •2.2 Одноадресные команды
- •2.3 Команды переходов
- •2.4. Эмулируемые команды
- •3. Периферийные устройства микроконтроллеров msp430f1xx
- •3.1 Внешние выводы микроконтроллера msp430f149
- •3.2 Система прерываний
- •3.3 Система тактирования
- •3.4 Сторожевой таймер
- •3.5 Аппаратный умножитель
- •3.6 Порты ввода/вывода
- •3.7 Таймер a3
- •3.8 Таймер b7
- •3.9 Интерфейс usart
- •3.9.1 Режим uart
- •3.9.1.1 Передача данных
- •3.9.1.2 Прием данных
- •3.9.1.3 Поддержка коммуникации в многопроцессорных системах
- •3.9.1.4 Обнаружение стартового бита при приеме
- •3.9.1.5 Скорость передачи
- •3.9.1.6 Регистры usart
- •3.9.2 Режим spi
- •3.9.3 Режим i2c
- •3.9.3.1 Общие сведения о шине i2c
- •3.9.3.2 Режимы работы usart в режиме i2c
- •3.9.3.3 Арбитраж
- •3.9.3.4 Тактирование i2c модуля
- •3.9.3.4 Инициализация модуля i2c
- •3.9.3.5 Регистры модуля usart в режиме i2c
- •3.10 Аналоговый компаратор
- •3.11 Аналого-цифровой преобразователь adc12
- •3.12 Flash контроллер
- •3.12.1 Стирание Flash памяти
- •3.12.2 Запись Flash памяти
- •3.12.3 Регистры Flash контроллера
- •3.13 Цифро-аналоговый преобразователь
- •Контроллер dma
Контроллер 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% своего временного ресурса.
