freetech

kinetisADC例程

0
阅读(3237)

kinetis内置16位逐次逼近ADC,下面通过一个例子说明其用法。在使用FTM之前要先配置系统集成模块,打开ADC的时钟。下面介绍相关寄存器:

ADCx_SC1n - 状态和控制寄存器1,0~4位是通道选择位,第5位是差分/单端选择位,第6位是中断允许位,第7位是转换完成标志位。

ADCx_SC2 - 状态和控制寄存器2。

ADCx_SC3 - 状态和控制寄存器3。

ADCx_CFG1 - 配置寄存器1。第0~1位是输入时钟选择,第2~3位是模式选择位,可选8、10、12、16位模式,第4位是转换时间选择位,第5~6位是时钟分频选择位,第7位是低功耗配置位。

ADCx_CFG2 - 配置寄存器2。第0~1位是长转换时间选择位,第2位是高速配置位,第3位是同步时钟输出控制位,第4位是引脚复用选择位。

 

下面是完整代码:

/*
* main implementation: use this 'C' sample to create your own application
*
*/

#include <stdio.h>

#include "derivative.h" /* include peripheral declarations */

void ADC_Init()
{
    SIM_SCGC6 |= (uint32_t)0x08000000;
    ADC0_CFG1 = (uint32_t)0x2C;            //16位模式,总线时钟2分频。
}

unsigned int ADC_Read(unsigned char ch)
{
    ADC0_SC1A = ch;
    while( (ADC0_SC1A&0x80) == 0);
    return ADC0_RA;
}
int main(void)
{
    int counter = 0;
    ADC_Init();
    ADC0_SC1A = 0;
    while( (ADC0_SC1A&0x80) == 0);
    printf("Hello (Kinetis) World in 'C' from MK60DX256Z derivative! \n\r");
    for(;;) {      

        counter = ADC_Read(0);
    }
    return 0;
}

调节电位器R18,观察调试窗口counter值的变化。