hi3518e ADC 连续采样并获取电压值

对于hi3518e 主控芯片内部ADC采样的描述有位牛人描述的很到位。
https://blog.csdn.net/u013738338/article/details/78602986
那个大哥从datasheet出发深入浅出地将hi3518e ADC采样过程描述地很好。

接下来我要用改进过的hisi ADC源码来实现电源电压检测,这份代码读者直接获取、编译就可用。

首先介绍程序的架构。
1.hi_adc.ko提供ADC初始化、开始采样、结束采样、更改采样速度与周期、单次采样、连续采样、挂采样结束中断处理函数等相关函数。
2.power.ko中以定时器软中断的方式从hi_adc.ko提供的接口中定时获取 ADC采样值。
我们先看hi_adc.ko的源码(改进过的默认连续采样)

#include <linux/init.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/timer.h>
#include <linux/miscdevice.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <asm/uaccess.h>
#include <asm/io.h>
#include <linux/kthread.h>
#include <linux/string.h>
#include <linux/sched.h>
#include <linux/interrupt.h>
#include <mach/irqs.h>
#include <linux/wait.h>
#include <linux/delay.h>
#include <linux/proc_fs.h>

#include "hi_adc.h"

/***************************Define Macro*************************/
#define SUPPORT_CHANNEL    0x4

#define SAR_ADC_BASE       0x200B0000
#define PERI_CRG32_BASE    0x2003007C

#define ADC_CTRL           0x00  //寄存器配置
#define ADC_GLITCH_SAMPEL  0x04  //滤波毛刺配置
#define ADC_TIME_SCAN      0x08
#define ADC_DATA_MASK      0x0c
#define ADC_INT_MASK       0x10  //int enable, 0:disable, 1:enable
#define ADC_INT_STATUS     0x14  //int state
#define ADC_INT_CLR        0x18  //int clr
#define ADC_START          0x1c  //start auto scan
#define ADC_STOP           0x20  //stop

#define ADC_IRQ_ENABLE     0x01
#define ADC_IRQ_DISABLE    0x00
#define ADC_CLK_ENABLE     (1<<2)  //0为使能
#define ADC_POWER_ENABLE   0x00
#define TIME_OUT           HZ * 5    // 队列等待时间 

//ADC_CTRL
#define ADC_ACTIVE_BIT(x)     (x << 24)    //precision, 11111100(6 bits),11111000(5 bits)...
#define DATA_DELTA(x)         (x << 20)    //误差范围,连续扫描模式配置值>2,手册没有说明
#define DEGLITCH_BYPASS       (1 << 17)    //滤毛刺, 0:enable, 1:bypass
#define ADC_RESET             (1 << 15)    //reset, 0:quit, 1:enter reset
#def
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值