freetech

kinetis的DAC例程

0
阅读(2642)

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脚,出现如下波形:

image