kinetisADC例程
0赞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值的变化。
