kinetis的DAC例程
0赞kinetis内置12位DAC,可实现模拟量输出。本例用DAC实现1个锯齿波输出。在使用DAC之前要先配置系统集成模块,打开DAC的时钟。下面介绍相关寄存器:
DACx_DATnH - 数据寄存器高字节,仅低4位有效。
DACx_DATnL - 数据寄存器低字节。
DACx_C0 - 控制寄存器0。
DACx_C1 - 控制寄存器1。
DACx_C2 - 控制寄存器2。
DACx_SR - 状态寄存器。
下面是完整代码:
/*
* main implementation: use this 'C' sample to create your own application
*
*/
#include <stdio.h>
#include "derivative.h" /* include peripheral declarations */
void DAC0_Init()
{
SIM_SCGC2 |= (uint32_t)0x1000UL; //打开DAC时钟
DAC0_DAT0H = (uint8_t)0x00U; //值寄存器先设为0
DAC0_DAT0L = (uint8_t)0x00U;
DAC0_C1 = (uint8_t)0x00U; //禁止Buffer模式
DAC0_C0 = (uint8_t)0xC0U; //使能DAC,选择参考晓电压2,即VDDA
}
void DAC0_Out(unsigned int val)
{
DAC0_DAT0H = (val >> 8) & 0x0F;
DAC0_DAT0L = val & 0xFF;
}
void delay()
{
unsigned long int i;
for(i=0;i<4000;i++);
}
int main(void)
{
int counter = 0;
float tmp;
DAC0_Init();
DAC0_Out(0x0800);
printf("Hello (Kinetis) World in 'C' from MK60DX256Z derivative! \n\r");
for(;;) {
for(counter=0 ; counter<8192 ; counter++)
{
DAC0_Out(counter);
delay();
}
}
return 0;
}
用示波器测DAC0_OUT脚,板上J9第1脚,出现如下波形: