Kinetis10包含两个独立的12位数模转换模块,DAC0和DAC1,用于将数字转换成对应的模拟电压。转换后的模拟电压可由外部引脚输出,也可以通过芯片内部连接输入到比较器模块、放大器模块、和模数转换模块。
DAC的参考电压可以二选一,一个来自外部或VREF模块的输出,默认连接到DACREF_1;另一个时VDDA,默认连接到DACREF_2。如果选择VDDA,则DAC的参考电压为3.3V。
12位二进制的表示范围为0~4095的无符号数。对应数据转换成模拟电压输出范围从VREF/4096~VREF。以VREF为3.3V计算,则是约0.8mV~3.3V,数据每变化1,输出电压变化约0.8mV。
将数据放入DAC的数据寄存器(DACx_DATL中的DACDATA[11:0]位),即可将数据转换为模拟电压。电压Vout= VREF * (1 + DACDAT0[11:0])/4096。在大量数据转换的应用中,也可以将数据放入DAC的缓冲区,由触发源输入触发信号,在触发信号的触发下,自动挨个将缓冲区中的数据转换为模拟电压。
缓冲区大小为1~16可设置大小的以word为单位的区域,转换的时候,由读指针指向正在转换的数据,可通过访问读指针获知当前正在转换的缓冲区单元。数据转换的次序为从顶部到底部依次转换,从顶部到底部之间,用户可设置位置标记(watermark)作为预警位置,当读指针指向缓冲区顶部、底部或位置标记处时,都有状态位可供查询,也可以发出中断请求。
触发信号可来自PDB模块的TRIG输出详细可查看PDB模块设置。
同时DAC模块也支持DMA操作,可通过DMA的方式向缓冲区中传递数据,大大提高了效率。
1. DAC数据低位寄存器(DACx_DATnL)
在没有启用数据缓冲区的情况下,DATA[11:0]控制输出的电压,该寄存器存放的是DATA[7:0]位,此时Vout= Vin *(1 + DACDAT0[11:0])/4096。
2. DAC数据高位寄存器(DACx_DATnH)
该寄存器存放的是DATA[11:8]位。
注意,数据寄存器共16个word,每个word都由高8位DACx_DATnH和低8位DACx_DATnH组成。16个word组成DAC的缓冲区,如不使用缓冲区,则默认只使用DACx_DAT0H和DACx_DAT0L。
3. DAC状态寄存器(DACx_SR)
该寄存器中包含DMA缓冲区读指针位置的有关标志。缓冲区大小为1~16可设置大小的以word为单位的区域,转换的时候,由读指针指向正在转换的数据,数据转换的次序为从顶部到底部依次转换,从顶部到底部之间,用户可设置位置标记(watermark)作为预警位置,当读指针指向缓冲区顶部、底部或位置标记处时,都有状态位可供查询,该寄存器中存放的就是这些标志位。如果DMA功能使能的话,当DMA请求完成后,这些标志会被DMA自动清除。这些标志位都是写0清除,写1无效。
l DACBFWMF:DAC缓冲区水位标志。
DACBFWMF=0:DAC缓冲区读指针未达位置标记;
DACBFWMF=1:DAC缓冲区读指针达到位置标记。
l DACBFRPTF:DAC缓冲区读指针到顶标志,顶部为起始位置。
DACBFRPTF=0:DAC缓冲区读指针不为0;
DACBFRPTF=1:DAC缓冲区读指针为0。
l DACBFRPBF:DAC缓冲区读指针到底标志,底部为结束位置。
DACBFRPBF=0:DAC缓冲区读指针不等于DACBFUP;
DACBFRPBF=1:DAC缓冲区读指针等于DACBFUP。