DAC (数模转换器)
简介
DAC用于将12bit的数字码值通过模拟电路转换为模拟电压。输出电压范围为0~Vref(此处的Vref可以选择内部参考电压和外部参考电压,内部参考电压可以选择2.5V和1.65V,外部参考电压来自引脚VDAC输入电压,输入电压一般与芯片电压VDD一致)。 DAC模块包含2个物理通道DAC0和DAC1。 DAC支持立即加载和影子加载模式,可以产生静态波、方波、三角波、正弦波等波形,既可以通过配置DAC发送寄存 器产生,又可以通过WAG外设产生。
功能概述
支持2个独立通道,有不同的输出电压和中断
支持配置为静态输出特定值
支持产生静态波、方波、三角波、正弦波等波形,既可以通过配置 DAC 发数寄存器产生,又可以通过 WAG 外设产生
支持事件触发影子加载模式和软件配置寄存器立即加载模式
支持 7 个不同的触发源选择
支持选择外灌基准或内部带隙基准电压
支持通过 CPU 和 DMA 握手配置发波数据
支持补码和偏移码输出选择
支持对 2 个独立通道的 DAC 上电校准
支持软件配置输出保持功能
电压直接输出
电压直接输出模式下,用户可以直接通过配置 DAC TDAT寄存器来输出指定的电压值。这种需要软件对TDAT 寄存器进行写入:
1. 只输出固定电压值,不产生波形,软件单次对寄存器进行写入即可,输出电压通过以下方式进行计算: \(Vout = TDAT * Vref / 4096\)
DAC连续波输出
连续波输出共有 3 种模式:中断方式、DMA模式、WAG 输入。
中断方式
中断方式下,用户可以通过配置触发事件和触发源,在固定时刻对寄存器进行写入,从而产生连续波。可以提前准备好波形数据,在DAC输出完成中断中更新DAC TDAT寄存器,等待下一次触发事件来之后生效。
DMA模式
DMA模式分两种方式:
常规使用是使用DMA传输数据输入对DAC.TDAT写入,但是DAC输出触发源使用SRPWM/ETIMER等事件,此时DAC输出波形值也需要提前准备好,方便DMA写入。这种方式的写入较中断方式省掉了CPU资源,并且也能做到输出波形频率可控。
DAC触发源选择DMA加载完成事件作为触发源,并且也通过DMA传输对DAC.TDAT写入,每次DMA传输完成后就会重新加载新的值,此时在使用DMA作为触发并且同时作为传输完成加载信号的输出方式时,一定需要配置触发延迟时间,将触发信号与传输加载信号错开。
WAG输入
WAG生成波形输出,DAC的输出数据选择来自WAG模块,WAG模块用于生成各种波形进行输出,此时DAC的输出完全来自WAG模块,不需要提前准备好波形数据,并且不需要单独的DMA通路,不需要外部触发。
DAC数据输出格式
DAC数据输出格式分为补码、偏移码、取反输出格式,三种输出模式下,输入数据和实际输出值和电压值的对应关系。
偏移码输出:
补码输出:
取反输出:
软件配置流程
基础发波配置流程如下:
配置触发模式 调用
DAC_configTriggerMode()传入通道和触发配置结构体设置参考电压 调用
DAC_setReferenceVoltage()传入通道和参考电压引用选择触发源 调用
DAC_setTriggerSource()传入通道和触发源配置输出 调用
DAC_configOutput()传入通道和输出配置结构体使能输出 调用
DAC_enableOutput()传入通道设置输出电压值 调用
DAC_setValue()传入通道和输出电压值
应用示例
DAC基础发波示例:DAC/DAC_BasicVoltOutput。
DAC-DMA示例:DAC/DAC_DMAWaveGen。
API Reference
Header File
Functions
-
void DAC_configTriggerMode(DAC_Type *DACx, DAC_TriggerConfig *config)
Config trigger mode.
- 参数:
DACx – select DAC device [DAC0 ~ DAC1]
config – DAC initial structure pointer
-
void DAC_configOutput(DAC_Type *DACx, DAC_OutputConfig *config)
Config output.
- 参数:
DACx – DAC peripheral [DAC0~DAC1]
config –
-
void DAC_setReferenceVoltage(DAC_Type *DACx, DAC_ReferenceVoltage source)
Sets the DAC Reference Voltage.
- Attention
if reference voltage select VREF, should call SYSCTRL_enableAnalogReferenceInternal enable VREF
- 参数:
DACx – DAC peripheral [DAC0~DAC1]
source – Reference voltage select, VDAC or VREF
-
void DAC_setTriggerSource(DAC_Type *DACx, DAC_TriggerSel source)
Sets DAC trigger source.
- 参数:
DACx – DAC peripheral [DAC0~DAC1]
source – trigger source ref to DAC_TRIGGER_SEL_xxxx
-
void DAC_setValue(DAC_Type *DACx, uint16_t value)
Set the DAC Shadow Output Value.
- 参数:
DACx – DAC peripheral [DAC0~DAC1]
value – 12-bit code to be loaded into the active value register
-
uint16_t DAC_getValue(DAC_Type *DACx)
Get the DAC Shadow Output Value.
- 参数:
DACx – DAC peripheral [DAC0~DAC1]
- 返回:
uint16_t Returns the DAC shadow output value.
-
void DAC_enableOutput(DAC_Type *DACx)
Enable the DAC Output.
- 参数:
DACx – DAC peripheral [DAC0~DAC1]
-
void DAC_disableOutput(DAC_Type *DACx)
Disable the DAC Output.
- 参数:
DACx – DAC peripheral [DAC0~DAC1]
-
void DAC_SWTrigger(DAC_Type *DACx)
Software trigger the specified DAC.
- 参数:
DACx – select DAC device [DAC0 ~ DAC1]
-
FlagStatus DAC_getTrigRepeatStatus(DAC_Type *DACx)
Get trigger signal repeat report status.
- 参数:
DACx – select DAC device [DAC0 ~ DAC1]
- 返回:
FlagStatus SET: DAC trigger repeat occurs RESET: DAC trigger repeat does not occur
-
void DAC_clearTrigRepeatStatus(DAC_Type *DACx)
Clear the specified DAC repeat status.
- 参数:
DACx – select DAC device [DAC0 ~ DAC1]
-
FlagStatus DAC_getTransferStatus(DAC_Type *DACx)
Get the specified DAC txd end report.
- 参数:
DACx – select DAC device [DAC0 ~ DAC1]
- 返回:
FlagStatus if SET, DAC is Transferred Done
-
void DAC_clearTransferStatus(DAC_Type *DACx)
Clear the specified DAC txd end report.
- 参数:
DACx – select DAC device [DAC0 ~ DAC1]
-
void DAC_enableInterrupt(DAC_Type *DACx)
Enable the specified DAC interrupt.
- 参数:
DACx – select DAC device [DAC0 ~ DAC1]
-
void DAC_disableInterrupt(DAC_Type *DACx)
Disable the specified DAC interrupt.
- 参数:
DACx – select DAC device [DAC0 ~ DAC1]
-
void DAC_clearInterruptStatus(DAC_Type *DACx)
Enable or disable the specified DAC interrupt.
- 参数:
DACx – select DAC device [DAC0 ~ DAC1]
-
ITStatus DAC_getInterruptStatus(DAC_Type *DACx)
Get the specified DAC interrupt status.
- 参数:
DACx – select DAC device [DAC0 ~ DAC1]
- 返回:
ITStatus SET: DAC interrupt occurs RESET: DAC interrupt does not occur
-
void DAC_enableDMA(DAC_Type *DACx)
Enable the specified DAC DMA handshake.
- 参数:
DACx – select DAC device [DAC0 ~ DAC1]
-
void DAC_disableDMA(DAC_Type *DACx)
Disable the specified DAC DMA handshake.
备注
Calling this function only when DMA channel is in idle state.
- 参数:
DACx – select DAC device [DAC0 ~ DAC1]
-
void DAC_enableSWHold(DAC_Type *DACx)
Enable dac output software hold functionality.
- 参数:
DACx – select DAC device [DAC0 ~ DAC1]
-
void DAC_disableSWHold(DAC_Type *DACx)
Disable dac output software hold functionality.
- 参数:
DACx – select DAC device [DAC0 ~ DAC1]
-
void DAC_enableHWHold(DAC_Type *DACx)
Enable dac output software hold functionality.
- 参数:
DACx –
-
void DAC_disableHWHold(DAC_Type *DACx)
Disable dac output hardware hold functionality.
- 参数:
DACx –
-
void DAC_setOffsetTrim(DAC_Type *DACx, uint16_t nValue)
Set the spedified DAC os adjust value.
- 参数:
DACx – select DAC device [DAC0 ~ DAC1]
value – offset value for DAC calibration
-
uint16_t DAC_getOffsetTrim(DAC_Type *DACx)
Get the specified DAC os adjust value.
- 参数:
DACx – select DAC device [DAC0 ~ DAC1]
- 返回:
uint16_t offset adjust value
-
void DAC_setGainADJ(DAC_Type *DACx, uint16_t value)
Set the specified DAC gain adjust value.
- 参数:
DACx – select DAC device [DAC0 ~ DAC1]
value – gain value for DAC calibration
-
uint16_t DAC_getGainADJ(DAC_Type *DACx)
Get the specified DAC gain adjust value.
- 参数:
DACx – select DAC device [DAC0 ~ DAC1]
- 返回:
uint16_t gain adjust value
Structures
-
struct DAC_TriggerConfig
DAC Init structure definition.
-
struct DAC_OutputConfig
Enumerations
-
enum DAC_ReferenceVoltage
DAC Ref Source enumeration.
Values:
-
enumerator DAC_REFSEL_PAD
DAC Reference to IOPAD
-
enumerator DAC_REFSEL_INNER_LDO
DAC Reference to inner Vref
-
enumerator DAC_REFSEL_PAD
-
enum DAC_OutputFormat
DAC Trigger Source enumeration.
备注
when dac trigger source selected as follow: DAC_TRIGGER_SEL_STIM DAC_TRIGGER_SEL_ETIM DAC_TRIGGER_SEL_SPWM DAC_TRIGGER_SEL_SELF_TX_DONE DAC_TRIGGER_SEL_ACOMP DAC load mode should select [DAC_LOAD_MODE_SHADOW]
Values:
-
enumerator DAC_OUTPUT_DIRECT
-
enumerator DAC_OUTPUT_INVERTED
-
enumerator DAC_OUTPUT_DIRECT
-
enum DAC_SrcSel
Values:
-
enumerator DAC_SRC_SEL_REG
DAC data load from register
-
enumerator DAC_SRC_SEL_WAG
DAC data load from WAG module
-
enumerator DAC_SRC_SEL_REG
-
enum DAC_TriggerSel
Values that can be passed to DAC_setTriggerSource() as the mode parameter.
Values:
-
enumerator DAC_TRIGGER_SEL_SW
DAC trigger Source Software
-
enumerator DAC_TRIGGER_SEL_STIMER
DAC trigger Source PIT Timer
-
enumerator DAC_TRIGGER_SEL_ETIM
DAC trigger Source ETimer
-
enumerator DAC_TRIGGER_SEL_SRPWM
DAC trigger Source SrPWM Sync Signal to DAC
-
enumerator DAC_TRIGGER_SEL_SELF_TX_DONE
DAC trigger Source by self tx done
-
enumerator DAC_TRIGGER_SEL_DMA
DAC trigger Source DMA
-
enumerator DAC_TRIGGER_SEL_SW