SAR使用参考

version 1.0


1. 概述

SAR口一共四个,10bit精度,获取到的值范围在0~0x3ff之间,参考电压为3.3V,即如果读到的值是0x1D2,得到的电压为0x1D2/0x3FF *3.3=1.5v左右。


2. 内核使用SAR


2.1. 初始化SAR口

先申明一下extern void  ms_sar_hw_init (void )函数,再通过这个函数初始化SAR.

  • 目的

    初始化

  • 语法

    void  ms_sar_hw_init ();
    
  • 参数

    表2-1

    参数名称 描述
  • 返回值

    表2-2

    返回值 描述

2.2. 取SAR值

先申明一下extern int  ms_sar_get (int ch)函数,再通过这个函数读取sar口电平

  • 目的

    获取SAR口电平

  • 语法

    int  ms_sar_get (int ch)
    
  • 参数

    表2-3

    参数名称 描述
    ch SAR 通道,值范围为0~3
  • 返回值

    表2-4

    返回值 描述
    int 当前SAR口的电平

3. 用户空间使用SAR


3.1. 概述

用户空间访问sar,通过IOCTL 的方式,首先open /dev/sar,通过IOCTL初始化SAR和读取电平。


3.2. IOCTL 初始化SAR

#define MS_SAR_INIT _IO(SARADC_IOC_MAGIC, 0)

sar_fd= open("/dev/sar", /*O_RDONLY*/O_RDWR);

ioctl(sar_fd, MS_SAR_INIT, 0);

3.3. IOCTL 读取SAR值

#define SARADC_IOC_MAGIC 'a'

#define MS_SAR_SET_CHANNEL_READ_VALUE _IO(SARADC_IOC_MAGIC, 1)

typedef struct

{

    int channel_value; ////0\~3

    int adc_value; ///读取到的值

}ADC_CONFIG_READ_ADC;

stCfg.channel_value=0; ///SAR0

ioctl(sar_fd, MS_SAR_SET_CHANNEL_READ_VALUE, \&stCfg);

printf("0: read stCfg.adc_value=:%x\n", stCfg.adc_value);