KL25_中断方式实现_ADC

6 篇文章 0 订阅
1 篇文章 0 订阅

以中断方式实现AD采集,,在程序中

 

 最近又看了一下ADC模块,发现该模块还是有东西可以说的。首先,模式又很多种,有差分的16位,13,11,9位模式。单通道的也同样有该几个模式。

主要有个偏移寄存器还不是太懂。。怎么用。?

以下是结构框图,任何一个模块,结构框图很重要。一定要高清搞透。



ADC有两对电压参考,一对是电压参考引脚上的电压

一对是外部链接的可选电压。

还有模拟地和模拟电压。电压选择可以通过SC2[REFSEL]位来选择。

ADC_SC1A:通常只用这一个状态控制寄存器,

该寄存器有转换完成标志位;COCO.中断使能:AIEN;差分通道选择DIFF。通道选择ADCH

以上的基本功能也不用说太多了,差不多应该能看出来。通道选择里面可以选择温度传感器。


ADC_CFG1配置寄存器

配置低功耗模式ADLPC,模块分频ADIV。长采样配置ADLSMP(长采样还是短采样)MODE模式选择。输入时钟选择ADICLK

ADC_CFG2 :MUXSEL复用功能选择。这个是用来选择AD通道的a还是b的。

ADACKEN;异步时钟输出选择:该位可以来选择异步时钟,时钟源中有一个是异步时钟,可以通过外接时钟来选择。

ADHSC:高速配置。快速转换序列。

ADLSTS:长采样时间选择,长采样可以有很多种长采样时间。0,1,2,3分别对应20ADCK 12ADCK 6 ADCK 2ADCK


ADC_RN:该寄存器存放的是结果。通过查芯片手册开业看到相应的精度对应的值。


ADC_CV:比较寄存器,该比较寄存器一共有两个CV1,CV2.通过这两个寄存器可以通过硬件来进行比较采 得的AD值,范围可以再两个值之间,之后。。。。

主要通过ADC_SC2来进行配置功能。SC2中还包含 硬件采样次数。

OFS:

偏移寄存器,这个不是很懂。

下面就是几个用来校准的寄存器。

直接看代码可以看出点东西。

ADC_SC3:包括校验和校验标志,连续采集,硬件使能,硬件均值滤波。


//===========================================================================
//函数名称:ADC_Cal
//函数返回:函数执行状态。0=成功,其它为异常。
//功能概要:校验ADC.
//===========================================================================

uint_8 ADC_Cal(ADC_MemMapPtr adcmap)
{

  uint_16 cal_var;
  
  ADC_SC2_REG(adcmap) &=  ~ADC_SC2_ADTRG_MASK ; // ADTRG置0使能软件触发   
  ADC_SC3_REG(adcmap) &= ( ~ADC_SC3_ADCO_MASK & ~ADC_SC3_AVGS_MASK ); //设置仅一次转换,清硬件均值采样次数
  ADC_SC3_REG(adcmap) |= ( ADC_SC3_AVGE_MASK | ADC_SC3_AVGS(3) );  // 设置硬件均值功能.
  
  
  ADC_SC3_REG(adcmap) |= ADC_SC3_CAL_MASK ;      // 开始校验
  while ( (ADC_SC1_REG(adcmap,0) & ADC_SC1_COCO_MASK ) == 0 ); // Wait calibration end
  	
  if (BGET(ADC_SC3_CALF_SHIFT,ADC_SC3_REG(adcmap))== 1 )
  {  
   return 1;    // 校验失败 
  }
  // Calculate plus-side calibration
  cal_var = 0x00;
  
  cal_var =  ADC_CLP0_REG(adcmap); 
  cal_var += ADC_CLP1_REG(adcmap);
  cal_var += ADC_CLP2_REG(adcmap);
  cal_var += ADC_CLP3_REG(adcmap);
  cal_var += ADC_CLP4_REG(adcmap);
  cal_var += ADC_CLPS_REG(adcmap);

  cal_var = cal_var/2;
  cal_var |= 0x8000; // 设置最高有效位

  ADC_PG_REG(adcmap) = ADC_PG_PG(cal_var);
 

  // Calculate minus-side calibration
  cal_var = 0x00;

  cal_var =  ADC_CLM0_REG(adcmap); 
  cal_var += ADC_CLM1_REG(adcmap);
  cal_var += ADC_CLM2_REG(adcmap);
  cal_var += ADC_CLM3_REG(adcmap);
  cal_var += ADC_CLM4_REG(adcmap);
  cal_var += ADC_CLMS_REG(adcmap);

  cal_var = cal_var/2;

  cal_var |= 0x8000; // 设置最高有效位

  ADC_MG_REG(adcmap) = ADC_MG_MG(cal_var); 
  
  ADC_SC3_REG(adcmap) &= ~ADC_SC3_CAL_MASK ; //清校验标志位

  return 0;
}
后面的功能描述中还包含了一个转换时间的计算,ADCK时钟。

校准功能步骤“

1.定义一个16进制的数,

2.将CLP0,CLP1,CLP2,CLP3,CLP4和CLPS加到该数中。

3.将该数除以2.

4.设置改为的最高位位1,

5.将该数最后的值放入到PG寄存器中。校验可能需要14k个ADCK和100个总线周期,对于8M的时钟源,差不多是1.7ms。

用户偏移功能:不是很懂该功能的意思。

温度传感器。芯片内部集成了一个温度传感器。

差不多了。功能很强大,却不知道如何使用


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值