/*
*********************************************************************************************************
*
*	模块名称 : AD7606数据采集模块
*	文件名称 : bsp_ad7606.h
*	版    本 : V1.0
*
*	Copyright (C), 2013-2014, 安富莱电子 www.armfly.com
*
*********************************************************************************************************
*/

#ifndef __AD7606_H
#define __AD7606_H
#include "interface.h"

/* 过采样倍率 */
typedef enum
{
    AD_OS_NO  = 0,
    AD_OS_X2  = 1,
    AD_OS_X4  = 2,
    AD_OS_X8  = 3,
    AD_OS_X16 = 4,
    AD_OS_X32 = 5,
    AD_OS_X64 = 6
} AD7606_OS_E;

/* AD数据采集缓冲区 FIFO */
#define ADC_FIFO_SIZE (2 * 1024) /* 总体样本数 */

typedef struct
{
    uint8_t ucOS;       /* 过采样倍率，0 - 6. 0表示无过采样 */
    uint8_t ucRange;    /* 输入量程，0表示正负5V, 1表示正负10V */
    int16_t sNowAdc[8]; /* 当前ADC值, 有符号数 */
} AD7606_VAR_T;

typedef struct
{
    /* FIFO 结构 */
    uint16_t usRead;  /* 读指针 */
    uint16_t usWrite; /* 写指针 */

    uint16_t usCount; /* 新数据个数 */
    uint8_t  ucFull;  /* FIFO满标志 */

    int16_t sBuf[ADC_FIFO_SIZE];
} AD7606_FIFO_T;

void ad7606_init(void);
void AD7606_SetOS(uint8_t _ucOS);
void AD7606_SetInputRange(uint8_t _ucRange);
void AD7606_Reset(void);
void AD7606_StartConvst(void);
void AD7606_ReadNowAdc(void);

/* 下面的函数用于FIFO操作模式 */
void    AD7606_EnterAutoMode(uint32_t _ulFreq);
void    AD7606_StartRecord(uint32_t _ulFreq);
void    AD7606_StopRecord(void);
uint8_t AD7606_FifoNewData(void);
uint8_t AD7606_ReadFifo(uint16_t *_usReadAdc);
uint8_t AD7606_FifoFull(void);

/* 全局变量 */
extern AD7606_VAR_T  g_tAD7606;
extern AD7606_FIFO_T g_tAdcFifo;

#endif

/***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/
