/******************************************************************************
�� �� ����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;			          //��ij����Զ���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;
}