Модуль DAC это 12-разрядный цифро-аналоговый преобразователь, ЦАП (digital-to-analog converter, DAC). DAC можно сконфигурировать в 8- или 12-битном режиме, и совместно с контроллером DMA. В 12-битном режима данные могут быть выровнены влево или вправо. У DAC есть два выходных канала, у каждого свой собственный преобразователь. В двухканальном режиме преобразования могут быть независимые или одновременные, когда оба канала группируются друг с другом для операций синхронного обновления. Доступен вход опорного напряжения VREF+ (используется совместно с ADC), что может использоваться для получения повышенной разрешающей способности.
Примечание: приведенная здесь информация относится к микроконтроллерам STM32F4xx, если специально не указано что-то другое (перевод раздела 14 "Digital-to-analog converter" документации [1]).
Основные возможности DAC:
• 2 выходных канала • В 12-битном режиме данные могут быть выровнены влево или вправо • Возможность синхронного обновления • Генерация сигнала шума • Генерация треугольного сигнала • 2 канала DAC, могут работать независимо или одновременно • Возможность DMA для каждого канала • Детектирование ошибки недогрузки DMA (DMA underrun) • Внешние триггеры для запуска преобразования • Вход опорного напряжения VREF+
Рис. 64 показывает блок-схему канала DAC, и в таблице 74 приведено описание выводов.
Положительное опорное напряжение DAC, определяющее самое высокое аналоговое выходное напряжение преобразования. Пределы напряжения 1.8V ≤ VREF+ ≤ VDDA.
VDDA
Вход, плюс аналогового питания.
VSSA
Вход, аналоговая земля и минус питания.
DAC_OUTx
Аналоговый выходной сигнал.
Выход канала x DAC (x = 1 или 2).
Примечание: как только канал x DAC разрешен, соответствующая ножка GPIO (PA4 или PA5) автоматически подключается к выходу аналогового преобразователя (DAC_OUTx, x = 1 или 2). Чтобы избежать паразитного потребления, сначала вывод PA4 или PA5 должен быть сконфигурирован на аналоговую функцию (AIN).
[Функциональное описание DAC]
Разрешение канала. На каждый канал DAC может быть подано питание установкой соответствующего бита ENx в регистре DAC_CR. После этого канал DAC будет разрешен по истечении задержки времени запуска (startup time tWAKEUP).
Примечание: бит ENx разрешает только макроячейку analog DAC канала x. Сам цифровой интерфейс канала x DAC разрешается, даже если бит ENx сброшен.
Разрешение выходного буфера. В DAC интегрировано 2 выходных буфера, которые могут использоваться для уменьшения выходного сопротивления и управления внешней нагрузкой напрямую, без добавления внешнего операционного усилителя. Каждый выходной буфер канала DAC может быть разрешен или запрещен с помощью соответствующего бита BOFFx в регистре DAC_CR.
Формат данных. В зависимости от выбранного режима, данные для преобразования записываются в регистр, как описано ниже.
• С одним каналом x (x = 1 или 2) DAC есть три возможности:
– 8-битное выравнивание вправо: программа должна загружать данные в биты DAC_DHR8Rx [7:0] (сохраняются в биты DHRx[11:4]). – 12-битное выравнивание влево: программа должна загружать данные в биты DAC_DHR12Lx [15:4] (сохраняются в биты DHRx[11:0]). – 12-битное выравнивание враво: программа должна загружать данные в биты DAC_DHR12Rx [11:0] (сохраняются в биты DHRx[11:0]).
В зависимости от загруженного регистра DAC_DHRyyyx, данные, записанные пользователем, сдвигаются и сохраняются в соответствующем DHRx (data holding register x, регистре хранения данных). Эти DHRx являются внутренними, не отображаемыми на адресное пространство регистрами. Затем регистр DHRx загружается в регистр DORx либо автоматически, либо программным триггером, либо по событию внешнего триггера.
Рис. 65. Регистры данных в одноканальном режиме DAC.
• С двумя каналами DAC есть три возможности:
– 8-битное выравнивание вправо: данные для канала 1 DAC загружаются в биты DAC_DHR8RD [7:0] (сохраняются в битах DHR1[11:4]), и данные канала 2 DAC загружаются в DAC_DHR8RD [15:8] (сохраняются в битах DHR2[11:4]). – 12-битное выравнивание влево: данные для канала 1 DAC загружаются в биты DAC_DHR12LD [15:4] (сохраняются в битах DHR1[11:0]) и данные для канала 2 DAC загружаются в биты DAC_DHR12LD [31:20] (сохраняются в битах DHR2[11:0]). – 12-битное выравнивание вправо: данные для канала 1 DAC загружаются в биты DAC_DHR12RD [11:0] (сохраняются в битах DHR1[11:0]) и данные для канала 2 DAC загружаются в биты DAC_DHR12LD [27:16] (сохраняются в битах DHR2[11:0]).
В зависимости от загруженного регистра DAC_DHRyyyD, данные, записанные пользователем, сдвигаются и сохраняются в DHR1 и DHR2 (data holding registers, регистры хранения данных). Эти регистры являются внутренними, не отображаемыми на адресное пространство регистрами. Регистры DHR1 и DHR2 затем загружаются соответственно в регистры DOR1 и DOR2, либо автоматически, либо программным триггером, либо по событию внешнего триггера.
Рис. 66. Регистры данных в двухканальном режиме DAC.
Преобразование DAC. DAC_DORx не могут быть записаны напрямую, и любая передача данных в канал x DAC должна выполняться загрузкой регистра DAC_DHRx (запись в DAC_DHR8Rx, DAC_DHR12Lx, DAC_DHR12Rx, DAC_DHR8RD, DAC_DHR12LD или DAC_DHR12LD).
Данные, сохраненные в регистр DAC_DHRx, автоматически передаются в регистр DAC_DORx после одного такта APB1, если не был выбран аппаратный триггер (сброшен бит TENx в регистре DAC_CR). Однако когда выбран аппаратный триггер (установлен бит TENx в регистре DAC_CR), и он сработал, передача выполняется на 3 такта APB1 позже.
Когда DAC_DORx загружен содержимым DAC_DHRx, аналоговое напряжение появляется на выходе после времени tSETTLING, которое зависит от напряжения источника питания и нагрузки аналогового выхода.
Рис. 67. Диаграмма времени для преобразования с запрещенным триггером, TENx = 0.
Выходное напряжение DAC. Цифровые входные данные преобразуются в выходные напряжения линейно, с уровнями между 0 и VREF+. Аналоговые выходные напряжения на каждой ножке канала DAC определяется следующим выражением:
DOR DACoutput = VREF x ------ 4096
Выбор триггера DAC. Если бит управления TENx установлен, преобразование может запуститься внешним триггером (от счетчика таймера, внешней линии прерывания). Биты управления TSELx[2:0] определяют, какое из 8 возможных событий вызовет преобразование, что показано в таблице 75.
Каждый раз, когда интерфейс DAC детектирует фронт нарастания уровня на выходе TRGO выбранного таймера, или на выбранной линии внешнего прерывания 9, последние сохраненные данные в регистре DAC_DHRx передаются в регистр DAC_DORx. Регистр DAC_DORx обновляется на 3 такта APB1 позже события триггера.
Если выбран программный триггер (SW), то преобразование запускается, как только был установлен бит SWTRIG. Бит SWTRIG сбросится аппаратно, как только регистр DAC_DORx обновится содержимым регистра DAC_DHRx.
Примечание: биты TSELx[2:0] не могут быть изменены, когда установлен бит ENx. Когда выбран программный триггер, передача данных из регистра DAC_DHRx в регистр DAC_DORx происходит только после одного такта APB1.
[Запрос DMA]
У каждого канала DAC есть возможность использовать DMA. Два канала DMA используются для обслуживания запросов DMA каналов DAC.
Запрос DAC DMA генерируется, когда произойдет внешний триггер (но не программный триггер), если установлен бит DMAENx.Тогда значение регистра DAC_DHRx передается в регистр DAC_DORx.
В двухканальном режиме, если установлены оба бита DMAENx, генерируются два запроса DMA. Если нужен только один запрос DMA, пользователь должен установить только соответствующий бит DMAENx. Таким методом приложение может обслуживать оба канала DAC в двухканальном режиме, используя один запрос DMA и уникальный канал DMA.
DMA underrun. При недогрузке DMA запрос DAC DMA не ставится в очередь: если поступил второй внешний триггер до того, как было получено подтверждение от первого внешнего триггера (подтверждение первого запроса), то не выдается новый запрос, и установится флаг DMAUDRx недогрузки DMA канала x в регистре DAC_SR, сигнализируя о событии ошибки. Тогда передача данных DMA запрещается, и будущий запрос DMA не обрабатывается. Канал x DAC продолжает преобразовывать старые данные.
Программа должна очистить флаг DMAUDRx записью лог. 1, очистить бит DMAEN используемого потока DMA и заново инициализировать и DMA, и канал x DAC, чтобы корректно перезапустить передачу данных. Программа должна изменить частоту срабатывания триггера преобразования DAC, или облегчить рабочую нагрузку DMA, чтобы избежать новой недогрузки DMA. И наконец, преобразование DAC должно быть возобновлено разрешением и передачи данных DMA, и разрешением триггера преобразования.
Для каждого канала x DAC также генерируется прерывание, если разрешен соответствующий бит DMAUDRIEx в регистре DAC_CR.
Для генерации псевдослучайного шума с изменяющейся амплитудой доступен регистр LFSR (linear feedback shift register). Генерация шума DAC выбирается установкой бит WAVEx[1:0] в состояние 01. Для LFSR используется предварительно загружаемое значение 0xAAA. Этот регистр обновляется через 3 такта APB1 после каждого события триггера, новые данные для регистра определяются по специальному вычислительному алгоритму.
Рис. 68. Алгоритм обновления данных в регистре DAC LFSR.
Значение LFSR, которое может маскироваться частично или полностью битами MAMPx[3:0] в регистре DAC_CR, добавляется к содержимому DAC_DHRx без переполнения, и это значение затем передается в регистр DAC_DORx.
Если LFSR получит значение 0x0000, то в него инжектируется 1 (механизм antilock-up). Можно сбросить генерацию сигнала LFSR сбросом бит WAVEx[1:0].
Можно добавить треугольный сигнал малой амплитуды к постоянному выходному уровню DAC, или генерировать медленно меняющийся треугольный сигнал. Генерация треугольника выбирается установкой бит WAVEx[1:0] в состояние 10. Амплитуда генерируемого сигнала конфигурируется битами MAMPx[3:0] в регистре DAC_CR. Внутренний счетчик треугольника инкрементируется на 3 такта APB1 позже каждого события триггера. Затем это значение добавляется без переполнения к регистру DAC_DHRx и полученная сумма передается в регистр DAC_DORx. Счетчик треугольника инкрементируется до тех пор, пока он меньше максимальной амплитуды, определенной битами MAMPx[3:0]. Как только была достигнута максимальная амплитуда, счетчик начинает декрементироваться вниз до 0, после чего начнет снова инкрементироваться, и так далее.
Рис. 70. Генерация треугольного сигнала DAC.
Можно сбросить генерацию треугольного сигнала сбросом бит WAVEx[1:0].
Примечание: должен быть разрешен триггер DAC для генерации шума, путем установки бита TENx в регистре DAC_CR. Биты MAMPx[3:0] должны быть сконфигурированы перед разрешением DAC, иначе их нельзя будет изменить.
Для эффективного использования полосы пропускания шины в приложениях, где одновременно нужны 2 канала DAC, реализованы 3 двойных регистра: DHR8RD, DHR12RD и DHR12LD. Тогда требуется уникальный доступ к регистрам, чтобы управлять обоими каналами DAC одновременно.
С этими двойными регистрами и двумя каналами DAC доступны 11 возможных режимов преобразования. Тем не менее, все режимы преобразования при необходимости могут быть выполнены с использованием отдельных регистров DHRx.
Независимый триггер. Чтобы сконфигурировать DAC в этом режиме преобразования, требуется выполнить следующую последовательность действий:
• Установка бит TEN1 и TEN2 разрешения двух триггеров каналов DAC. • Конфигурирование разных источников триггера установкой разных значений в битах TSEL1[2:0] и TSEL2[2:0]. • Загрузка двухканальных данных в желаемый регистр DHR (DAC_DHR12RD, DAC_DHR12LD или DAC_DHR8RD).
Когда сработает триггер канала 1 DAC, содержимое регистра DHR1 передается в регистр DAC_DOR1 (с задержкой 3 такта APB1). Когда сработает триггер канала 2 DAC, содержимое регистра DHR2 передается в регистр DAC_DOR2 (с задержкой 3 такта APB1).
Независимый триггер с одним LFSR. Чтобы сконфигурировать DAC в этом режиме преобразования, требуется выполнить следующую последовательность действий:
• Установка бит TEN1 и TEN2 разрешения двух триггеров каналов DAC. • Конфигурирование разных источников триггера установкой разных значений в битах TSEL1[2:0] и TSEL2[2:0]. • Конфигурирование двух каналов DAC битами WAVEx[1:0], установкой их в 01, и установка одинакового значения маски LFSR в битах MAMPx[3:0]. • Загрузка данных двух каналов DAC в желаемый регистр DHR (DHR12RD, DHR12LD или DHR8RD).
Когда сработает триггер канала 1 DAC, счетчик LFSR1, с одинаковой маской, добавится к регистру DHR1, и сумма передается в DAC_DOR1 (с задержкой 3 такта APB1). Затем обновится счетчик LFSR1. Когда сработает триггер канала 2 DAC, счетчик LFSR2, с одинаковой маской, добавится к регистру DHR2, и сумма передается в DAC_DOR2 (с задержкой 3 такта APB1). Затем обновится счетчик LFSR2.
Независимый триггер с разными LFSR. Чтобы сконфигурировать DAC в этом режиме преобразования, требуется выполнить следующую последовательность действий:
• Установка бит TEN1 и TEN2 разрешения двух триггеров каналов DAC. • Конфигурирование разных источников триггера установкой разных значений в битах TSEL1[2:0] и TSEL2[2:0]. • Конфигурирование двух каналов DAC битами WAVEx[1:0], установкой их в 01, и установка разных значений маски LFSR в битах MAMP1[3:0] и MAMP2[3:0]. • Загрузка данных двух каналов DAC в желаемый регистр DHR (DAC_DHR12RD, DAC_DHR12LD или DAC_DHR8RD).
Когда сработает триггер канала 1 DAC, счетчик LFSR1, с маской, сконфигурированной в MAMP1[3:0], добавится к регистру DHR1, и сумма передается в DAC_DOR1 (с задержкой 3 такта APB1). Затем обновится счетчик LFSR1. Когда сработает триггер канала 2 DAC, счетчик LFSR2, с маской, сконфигурированной в MAMP2[3:0], добавится к регистру DHR2, и сумма передается в DAC_DOR2 (с задержкой 3 такта APB1). Затем обновится счетчик LFSR2.
Независимый триггер с одним треугольником. Чтобы сконфигурировать DAC в этом режиме преобразования, требуется выполнить следующую последовательность действий:
• Установка бит TEN1 и TEN2 разрешения двух триггеров каналов DAC. • Конфигурирование разных источников триггера установкой разных значений в битах TSEL1[2:0] и TSEL2[2:0]. • Конфигурирование двух каналов DAC битами WAVEx[1:0], в которые записывается значение 1x, с одинаковым максимальным значением амплитуды в битах MAMPx[3:0]. • Загрузка данных двух каналов DAC в желаемый регистр DHR (DAC_DHR12RD, DAC_DHR12LD или DAC_DHR8RD).
Когда сработает триггер канала 1 DAC, счетчик треугольника канала 1 DAC, с одинаковой амплитудой треугольника, добавится к регистру DHR1, и сумма передается в DAC_DOR1 (с задержкой 3 такта APB1). Затем обновится счетчик треугольника канала 1 DAC. Когда сработает триггер канала 2 DAC, счетчик треугольника канала 2 DAC, с одинаковой амплитудой треугольника, добавится к регистру DHR2, и сумма передается в DAC_DOR2 (с задержкой 3 такта APB1). Затем обновится счетчик треугольника канала 2 DAC.
Независимый триггер с двумя треугольниками. Чтобы сконфигурировать DAC в этом режиме преобразования, требуется выполнить следующую последовательность действий:
• Установка бит TEN1 и TEN2 разрешения двух триггеров каналов DAC. • Конфигурирование разных источников триггера установкой разных значений в битах TSEL1[2:0] и TSEL2[2:0]. • Конфигурирование двух каналов DAC битами WAVEx[1:0], в которые записывается значение 1x, с разными максимальными значениями амплитуды в битах MAMP1[3:0] и MAMP2[3:0]. • Загрузка данных двух каналов DAC в желаемый регистр DHR (DAC_DHR12RD, DAC_DHR12LD или DAC_DHR8RD).
Когда сработает триггер канала 1 DAC, счетчик треугольника канала 1 DAC, с амплитудой треугольника, сконфигурированной битами MAMP1[3:0], добавится к регистру DHR1, и сумма передается в DAC_DOR1 (с задержкой 3 такта APB1). Когда сработает триггер канала 2 DAC, счетчик треугольника канала 2 DAC, с амплитудой треугольника, сконфигурированной битами MAMP2[3:0], добавится к регистру DHR2, и сумма передается в DAC_DOR2 (с задержкой 3 такта APB1).
Одновременный программный старт. Чтобы сконфигурировать DAC в этом режиме преобразования, требуется выполнить следующую последовательность действий:
• Загрузка данных двух каналов DAC в желаемый регистр DHR (DAC_DHR12RD, DAC_DHR12LD или DAC_DHR8RD).
В этой конфигурации с задержкой 1 такт APB1 регистры DHR1 и DHR2 передаются соответственно в регистры DAC_DOR1 и DAC_DOR2.
Одновременный триггер. Чтобы сконфигурировать DAC в этом режиме преобразования, требуется выполнить следующую последовательность действий:
• Установка бит TEN1 и TEN2 разрешения двух триггеров каналов DAC. • Конфигурирование одинакового источника триггера для обоих каналов DAC путем установки одинакового значения в битах TSEL1[2:0] и TSEL2[2:0]. • Загрузка данных двух каналов DAC в желаемый регистр DHR (DAC_DHR12RD, DAC_DHR12LD или DAC_DHR8RD).
Когда сработает триггер, регистры DHR1 и DHR2 передаются соответственно в регистры DAC_DOR1 и DAC_DOR2 (с задержкой 3 такта APB1).
Одновременный триггер с одним LFSR. Чтобы сконфигурировать DAC в этом режиме преобразования, требуется выполнить следующую последовательность действий:
• Установка бит TEN1 и TEN2 разрешения двух триггеров каналов DAC. • Конфигурирование одинакового источника триггера для обоих каналов DAC путем установки одинакового значения в битах TSEL1[2:0] и TSEL2[2:0]. • Конфигурирование двух каналов DAC битами WAVEx[1:0], установкой их в 01, и установка одинакового значения маски LFSR в битах MAMPx[3:0]. • Загрузка двух каналов данных DAC в желаемый регистр DHR (DHR12RD, DHR12LD или DHR8RD).
Когда сработает триггер, счетчик LFSR1, с одинаковой маской, добавится к регистру DHR1, и сумма передается в DAC_DOR1 (с задержкой 3 такта APB1). Затем обновится счетчик LFSR1. Одновременно произойдет то же самое и с каналом 2: счетчик LFSR2, с одинаковой маской, добавится к регистру DHR2, и сумма будет передана в DAC_DOR2 (с задержкой 3 такта APB1). Затем обновится счетчик LFSR2.
Одновременный триггер с разными LFSR. Чтобы сконфигурировать DAC в этом режиме преобразования, требуется выполнить следующую последовательность действий:
• Установка бит TEN1 и TEN2 разрешения двух триггеров каналов DAC. • Конфигурирование одинакового источника триггера для обоих каналов DAC путем установки одинакового значения в битах TSEL1[2:0] и TSEL2[2:0]. • Конфигурирование двух каналов DAC битами WAVEx[1:0], установкой их в 01, и установка разных значений маски LFSR в битах MAMP1[3:0] и MAMP2[3:0]. • Загрузка двух каналов данных DAC в желаемый регистр DHR (DHR12RD, DHR12LD или DHR8RD).
Когда сработает триггер, счетчик LFSR1, с маской, сконфигурированной битами MAMP1[3:0], добавится к регистру DHR1, и сумма передается в DAC_DOR1 (с задержкой 3 такта APB1). Затем обновится счетчик LFSR1. Одновременно то же самое произойдет и с каналом 2: счетчик LFSR2, с маской, сконфигурированной битами MAMP2[3:0], добавится к регистру DHR2, и сумма будет передана в DAC_DOR2 (с задержкой 3 такта APB1). Затем обновится счетчик LFSR2.
Одновременный триггер с одним треугольником. Чтобы сконфигурировать DAC в этом режиме преобразования, требуется выполнить следующую последовательность действий:
• Установка бит TEN1 и TEN2 разрешения двух триггеров каналов DAC. • Конфигурирование одинакового источника триггера для обоих каналов DAC путем установки одинакового значения в битах TSEL1[2:0] и TSEL2[2:0]. • Конфигурирование двух каналов DAC битами WAVEx[1:0], установкой их в 1x, и установка одинакового значения амплитуды битами MAMPx[3:0]. • Загрузка двух каналов данных DAC в желаемый регистр DHR (DHR12RD, DHR12LD или DHR8RD).
Когда сработает триггер, счетчик треугольника канала 1, с одинаковой амплитудой, добавится к регистру DHR1, и сумма передается в DAC_DOR1 (с задержкой 3 такта APB1). Затем обновится счетчик треугольника канала 1. Одновременно произойдет то же самое и с каналом 2: счетчик треугольника канала 2, с одинаковой амплитудой, добавится к регистру DHR2, и сумма будет передана в DAC_DOR2 (с задержкой 3 такта APB1). Затем обновится счетчик треугольника канала 2.
Одновременный триггер с разными треугольниками. Чтобы сконфигурировать DAC в этом режиме преобразования, требуется выполнить следующую последовательность действий:
• Установка бит TEN1 и TEN2 разрешения двух триггеров каналов DAC. • Конфигурирование одинакового источника триггера для обоих каналов DAC путем установки одинакового значения в битах TSEL1[2:0] и TSEL2[2:0]. • Конфигурирование двух каналов DAC битами WAVEx[1:0], установкой их в 1x, и установка одинакового значения амплитуды битами MAMPx[3:0]. • Загрузка двух каналов данных DAC в желаемый регистр DHR (DHR12RD, DHR12LD или DHR8RD).
Когда сработает триггер, счетчик треугольника канала 1, с одинаковой амплитудой, добавится к регистру DHR1, и сумма передается в DAC_DOR1 (с задержкой 3 такта APB1). Затем обновится счетчик треугольника канала 1. Одновременно произойдет то же самое и с каналом 2: счетчик треугольника канала 2, с одинаковой амплитудой, добавится к регистру DHR2, и сумма будет передана в DAC_DOR2 (с задержкой 3 такта APB1). Затем обновится счетчик треугольника канала 2.
[Регистры DAC]
К регистрам периферийного устройства DAC нужно обращаться как к словам (32-битный доступ). Смещение адреса указано относительно базового адреса DAC_BASE (см. файл stm32f429xx.h). Для адресного пространства DAC зарезервированы адреса 0x0x40007400 .. 0x400077FF (базовый адрес 0x40007400).
В описании функций регистров используются следующие сокращения:
read/write (rw) Программа может читать и записывать эти биты.
read-only (r) Программа может только читать эти биты.
write-only (w) Программа может только записывать в этот бит. Чтение бита вернет значение сброса.
read/clear (rc_w1) Программа может прочитать бит, а также сбросить его путем записью 1. Запись 0 не дает никакого эффекта.
read/clear (rc_w0) Программа может прочитать бит, а также сбросить его путем записью 0. Запись 1 не дает никакого эффекта.
read/clear by read (rc_r) Программа может прочитать этот бит. Чтение этого бита автоматически сбросит его в 0. Запись 0 в бит не дает никакого эффекта.
read/set (rs) Программа может прочитать, а также установить этот бит. Запись 0 в бит не дает никакого эффекта.
read-only write trigger (rt_w) Программа может прочитать этот бит. Запись 0 или 1 вызовет появление события (триггер), но не окажет никакого влияния на значение бита.
toggle (t) Программа может только переключить этот бит записью 1. Запись 0 не дает никакого эффекта.
Reserved (Res.) Зарезервированный бит, его значение должно сохраняться на значении сброса.
Биты 31:30 зарезервированы, и должны удерживаться в состоянии сброса (все нули).
DMAUDRIE2 (бит 29): DAC channel2 DMA underrun interrupt enable, бит разрешает прерывание недогрузки DMA для канала 2 DAC. Этот бит устанавливается и очищается программой.
0: прерывание запрещено (по умолчанию). 1: прерывание разрешено.
DMAEN2 (бит 28): DAC channel2 DMA enable, разрешение DMA для канала 2 DAC. Этот бит устанавливается и очищается программой.
0: режим DMA для канала 2 DAC запрещен. 1: режим DMA для канала 2 DAC разрешен.
MAMP2[3:0] (биты 27:24): выбор маски/амплитуды канала 2 DAC. Эти биты записываются программой, чтобы выбрать маску в режиме генерации сигнала шума, или амплитуды в режиме генерации треугольника.
Примечание: используется только если бит TEN2 = 1 (разрешен триггер канала 2 DAC).
TSEL2[2:0] (биты 21:19): DAC channel2 trigger selection, выбор триггера канала 2 DAC. Эти биты выбирают внешнее событие (триггер), используемое для канала 2 DAC.
Примечание: используется только если бит TEN2 = 1 (разрешен триггер канала 2 DAC).
TEN2 (бит 18): DAC channel2 trigger enable, разрешение триггера канала 2 DAC. Этот бит устанавливается и очищается программой, чтобы разрешить/запретить триггер канала 2 DAC.
0: триггер канала 2 DAC запрещен, и записанные в регистр DAC_DHRx данные передаются в регистр DAC_DOR2 с задержкой в 1 такт APB1. 1: триггер канала 2 DAC разрешен, и записанные в регистр DAC_DHRx данные передаются в регистр DAC_DOR2 с задержкой в 3 такта APB1.
Примечание: когда выбран программный триггер, передача данных из регистра DAC_DHRx в регистр DAC_DOR2 занимает только 1 такт APB1.
BOFF2 (бит 17): DAC channel2 output buffer disable, запрет выходного буфера канала 2 DAC. Этот бит очищается и устанавливается программой, чтобы разрешить/запретить выходной буфер канала 2 DAC.
0: выходной буфер канала 2 DAC разрешен (по умолчанию). 1: выходной буфер канала 2 DAC запрещен.
EN2 (бит 16): разрешение канала 2 DAC. Этот бит устанавливается и очищается программой, чтобы разрешить/запретить канал 2 DAC.
0: канал 2 DAC запрещен. 1: канал 2 DAC разрешен.
Биты 15:14 зарезервированы, и должны удерживаться в состоянии сброса (все нули).
DMAUDRIE1 (бит 13): DAC channel1 DMA underrun interrupt enable, бит разрешает прерывание недогрузки DMA для канала 1 DAC. Этот бит устанавливается и очищается программой.
0: прерывание запрещено (по умолчанию). 1: прерывание разрешено.
DMAEN1 (бит 12): DAC channel1 DMA enable, разрешение DMA для канала 1 DAC. Этот бит устанавливается и очищается программой.
0: режим DMA для канала 1 DAC запрещен. 1: режим DMA для канала 1 DAC разрешен.
MAMP1[3:0] (биты 11:8): выбор маски/амплитуды канала 1 DAC. Эти биты записываются программой, чтобы выбрать маску в режиме генерации сигнала шума, или амплитуды в режиме генерации треугольника.
Примечание: используется только если бит TEN1 = 1 (разрешен триггер канала 1 DAC).
TSEL1[2:0] (биты 5:3): DAC channel1 trigger selection, выбор триггера канала 1 DAC. Эти биты выбирают внешнее событие (триггер), используемое для канала 1 DAC.
Примечание: используется только если бит TEN1 = 1 (разрешен триггер канала 1 DAC).
TEN1 (бит 2): DAC channel1 trigger enable, разрешение триггера канала 1 DAC. Этот бит устанавливается и очищается программой, чтобы разрешить/запретить триггер канала 1 DAC.
0: триггер канала 1 DAC запрещен, и записанные в регистр DAC_DHRx данные передаются в регистр DAC_DOR1 с задержкой в 1 такт APB1. 1: триггер канала 1 DAC разрешен, и записанные в регистр DAC_DHRx данные передаются в регистр DAC_DOR1 с задержкой в 3 такта APB1.
Примечание: когда выбран программный триггер, передача данных из регистра DAC_DHRx в регистр DAC_DOR1 занимает только 1 такт APB1.
BOFF1 (бит 1): DAC channel1 output buffer disable, запрет выходного буфера канала 1 DAC. Этот бит очищается и устанавливается программой, чтобы разрешить/запретить выходной буфер канала 1 DAC.
0: выходной буфер канала 1 DAC разрешен (по умолчанию). 1: выходной буфер канала 1 DAC запрещен.
EN1 (бит 0): разрешение канала 1 DAC. Этот бит устанавливается и очищается программой, чтобы разрешить/запретить канал 1 DAC.
Биты 31:30 зарезервированы, и должны удерживаться в состоянии сброса (все нули).
DMAUDR2 (бит 29): DAC channel2 DMA underrun flag, флаг недогрузки DMA канала 2 DAC. Этот бит устанавливается аппаратно, и очищается программой (путем записи в него 1).
0: не было события недогрузки DMA на канале 2 DAC. 1: было событие недогрузки DMA на канале 2 DAC. Выбранный в настоящий момент триггер, управляющий преобразованием на канале 2 DAC, срабатывает со слишком высокой частотой, большей чем DMA может обслужить.
Биты 28:14 зарезервированы, и должны удерживаться в состоянии сброса (все нули).
DMAUDR1 (бит 13): DAC channel1 DMA underrun flag, флаг недогрузки DMA канала 1 DAC. Этот бит устанавливается аппаратно, и очищается программой (путем записи в него 1).
0: не было события недогрузки DMA на канале 1 DAC. 1: было событие недогрузки DMA на канале 1 DAC. Выбранный в настоящий момент триггер, управляющий преобразованием на канале 1 DAC, срабатывает со слишком высокой частотой, большей чем DMA может обслужить.
[Примеры]
DAC_SignalAny - проект, основа которого сгенерирована в STM32CubeMX с использованием FreeRTOS. Процессор работает на частоте 168 МГц, TIM2 используется для генерации системных тиков 1 мс, TIM6 настроен на частоту срабатывания прерываний 44100 Гц (см. макрос DAC_SAMPLE_RATE). Для DAC используется программный триггер запуска преобразования. В обработчике прерывания инкрементируется счетчик фазы, и по таблице синуса берется новое значение для записи в DAC (см. код обработчика прерывания TIM6_DAC_IRQHandler). Каждую секунду в задаче StartDefaultTask запускается генерация новой частоты, частоты меняются циклически от 500 Гц до 20000 Гц с шагом 500 Гц.
DAC_SignalsGeneration - проект из примеров библиотеки STM32Cube_FW_F4_V1.24.0. Здесь DAC может работать в двух режимах (режим переключается нажатием кнопки Tamper/Key) - либо генерация треугольного сигнала, либо лестничного. Генерацией лестничного сигнала управляет DMA, без участия программы. DMA посылает в DAC 6 фиксированных значений из массива aEscalator8bit[6], смена значений происходит по триггеру таймера TIM6.
Примеры можно скачать в архиве [2], они компилировались и тестировались под управлением IAR 8.30.
[Ссылки]
1. RM0090 Reference manual STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 advanced Arm®-based 32-bit MCUs site:st.com. 2. 200312STM32F429-DAC-examples.zip - примеры использования DAC.