CC2640R2F之ADC篇

原创博客,如有转载,注明出处——在金华的电子民工林。

写CC2640的ADC很多,现在提供一个自己写的ADC子程序,多人验证过都可以使用。
子程序如下:

#include "AppAdc.h"
#include <inc/hw_types.h>
#include <ti/sysbios/family/arm/m3/Hwi.h>
#include <inc/hw_memmap.h>
#include <driverlib/aux_wuc.h>
#include <driverlib/aux_adc.h>
#include <inc/hw_aux_evctl.h>
#include <inc/hw_adi.h>
#include <inc/hw_adi_4_aux.h>
#include <inc/hw_aux_anaif.h> // Will change name to anaif
uint32_t AdcOneShotRead(uint8_t auxIo,uint8 reg)
{
    uint32_t turnedOnClocks = 0;
    //////////// Config clock/////////////////////
    // Only turn on clocks that are not already enabled. Not thread-safe, obviously.
    turnedOnClocks |= AUXWUCClockStatus(AUX_WUC_ADC_CLOCK) ? 0 : AUX_WUC_ADC_CLOCK;
    turnedOnClocks |= AUXWUCClockStatus(AUX_WUC_ADI_CLOCK) ? 0 : AUX_WUC_ADI_CLOCK;
    turnedOnClocks |= AUXWUCClockStatus(AUX_WUC_ANAIF_CLOCK) ? 0 : AUX_WUC_ANAIF_CLOCK;
    // Enable clocks and wait for ready
    AUXWUCClockEnable(turnedOnClocks);
    while(AUX_WUC_CLOCK_OFF == AUXWUCClockStatus(turnedOnClocks));
    /////// Seclect auxIO  /////////////
    AUXADCSelectInput(auxIo);
    ////////// Enable ///////////
    AUXADCEnableSync(AUXADC_REF_FIXED, AUXADC_SAMPLE_TIME_2P7_US, AUXADC_TRIGGER_MANUAL);
//    delay(10);
    //Scaling disable
    if(reg) AUXADCDisableInputScaling();    //本条没屏蔽,最大的ADC电压为1.49V,适合低电压检测
    AUXADCGenManualTrigger();       // Trigger sample
//    HWREG(AUX_ANAIF_BASE + AUX_ANAIF_O_ADCTRIG) = (1 << AUX_ANAIF_ADCTRIG_START_S);
    uint32_t adcValue = AUXADCReadFifo();
    AUXADCDisable();//Power_Saving
    return adcValue;
}

第一行是自己定义的一个头文件。
函数返回4字节的AD结果。
函数形参auxIo,代表对哪个通道进行采集。
函数形参reg,表示选择基准电压,基准电压有两个选择,详情见下方头文件中的定义。
如前几篇介绍的工程管理,这些文件,可以直接放在Application文件夹下。

原创博客,如有转载,注明出处——在金华的电子民工林。

头文件的内容如下:

#include <rom.h>
/*
#define ADC_COMPB_IN_NC        0x00
#define ADC_COMPB_IN_DCOUPL    0x03
#define ADC_COMPB_IN_VSS       0x04
#define ADC_COMPB_IN_VDDS      0x05
#define ADC_COMPB_IN_AUXIO7    0x09
#define ADC_COMPB_IN_AUXIO6    0x0A
#define ADC_COMPB_IN_AUXIO5    0x0B
#define ADC_COMPB_IN_AUXIO4    0x0C
#define ADC_COMPB_IN_AUXIO3    0x0D
#define ADC_COMPB_IN_AUXIO2    0x0E
#define ADC_COMPB_IN_AUXIO1    0x0F
#define ADC_COMPB_IN_AUXIO0    0x10*/

#define ADC_REG_4_3V            FALSE
#define ADC_REG_1_49V           TRUE

extern uint32_t AdcOneShotRead(uint8_t auxIo,uint8 reg);

上图中,屏蔽掉的部分,就是ADC的通道的选择,这个定义在rom.h里。
为了更直观,各位可以再把通道重新定义成更直观的,比如

#define ADC_CHANNEL_VDD     ADC_COMPB_IN_VDDS
#define ADC_CHANNEL_IOID24     ADC_COMPB_IN_AUXIO0

具体应用,各位自己尝试。

原创博客,如有转载,注明出处——在金华的电子民工林。
1)友情伙伴:甜甜的大香瓜
2)声明:喝水不忘挖井人,转载请注明出处。
3)纠错/业务合作:897503845@qq.com
4)香瓜BLE之CC2640R2F群:557278427
5)本文出处:原创连载资料《简单粗暴学蓝牙5》
6)完整开源资料下载地址:
https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值