ADC.c 2.55 KB
Newer Older
崔立宝's avatar
崔立宝 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
/******************************************************************************
文 件 名:ADC.c
功能描述:ADC驱动库文件
作    者:张暄
版    本:V1.0
日    期:2017.03.25
******************************************************************************/

#include "ADC.h"

/******************************************************************************
函数名:ADC_Init
功  能:ADC初始化
        需要预先在ADC.h中定义分辨率、采样点数及ADC时钟频率
参  数:无
返回值:无
******************************************************************************/
void ADC_Init(void)
{
  ATDDIEN = 0x0FFF;             //全部A/D端口不作为ADC使用,要调用ADC_Channel_Enable函数开启

  //ATDCTL0 = 0x0F;             //不使用连续转换,不需要设置此寄存器
  ATDCTL1 = ADC_ATDCTL1_VALUE;  //设置分辨率,不使用外部触发
  ATDCTL2 = 0x40;			          //读某结果自动清CCFn标志,不使用内部时钟,不使用外部触发,不使用中断
  ATDCTL3 = 0x88;               //结果右对齐,每次只转换1个通道,不使用FIFO模式
  ATDCTL4 = ADC_SMP_VALUE | ADC_PRS_VALUE;
}

/******************************************************************************
函数名:ADC_Channel_Enable
功  能:启用相应ADC通道
        初始化完毕后,各通处于关闭状态,需要调用此函数开启
参  数:Ch :需要开启的ADC通道
返回值:无
******************************************************************************/
void ADC_Channel_Enable(uint8_t Ch)
{
  uint16_t ChBit;

  if(Ch >= ADC_MAX_CHANNEL_CNT)
    return;

  ChBit = 1 << Ch;
  ATDDIEN &= ~ChBit;
}

/******************************************************************************
函数名:ADC_Start_Conversion
功  能:启用相应ADC通道的转换
参  数:Ch :需要启动转换的ADC通道
返回值:无
******************************************************************************/
void ADC_Start_Conversion(uint8_t Ch)
{
  if(Ch < ADC_MAX_CHANNEL_CNT)
    ATDCTL5 = Ch;
}

/******************************************************************************
函数名:ADC_Get_Conversion_Status
功  能:获取前一次启动的ADC转换的状态
参  数:无
返回值:ADC_CONV_COMPLETE      转换已完成
        ADC_CONV_NOT_COMPLETE  转换未完成
******************************************************************************/
uint8_t ADC_Get_Conversion_Status(void)
{
  if (ATDSTAT0_SCF)
    return ADC_CONV_COMPLETE;
  else
    return ADC_CONV_NOT_COMPLETE;
}

/******************************************************************************
函数名:ADC_Get_Conversion_Result
功  能:获取前一次启动的ADC转换的转换结果
参  数:无
返回值:转换结果数值
******************************************************************************/
uint16_t ADC_Get_Conversion_Result(void)
{
  return ATDDR0;
}