/* Includes ----------------------------------------------------------*/
#include "ads1220.h"
#include "gpio.h"
#include "debug.h"
/* Private define --------------------------------------------------*/
#define D_WORK_MODE E_WORK_MODE_NORMAL //����ģʽ
#define D_CONVERT_MODE E_CONVERT_MODE_SHOT //ת��ģʽ
#define D_TEMP_SEN_CFG E_TEMP_SEN_SW_DIS //�¶ȴ�����
#define D_BSC_CFG E_BCS_SW_DIS //�ջٵ���Դ
#define D_VREF_CFG E_REF_INT_2_048V //�ο���ѹ
#define D_FIR_CFG E_FIR_NO_50_60Hz //������50Hz ��60Hz
#define D_GAIN_CFG E_GAIN_128 //128������
#define D_PSW_CFG E_PSW_DIS //�Ͳ��Դ����
#define D_DRDY_CFG E_RDY_MODE_ONLY_RDY //RDY�ź����
#define D_SPEED_CFG E_DATA_RATE_90Hz
/* Private typedef ------------------------------------------------*/
/* Private constants --------------------------------------------*/
/* Private variables ---------------------------------------------*/
/* Private function prototypes -----------------------------*/
/* Public constants ---------------------------------------------*/
/* Public variables ----------------------------------------------*/
/********************************************************************
* name : ADS1220Reset
* description : ADS1220 ��λ
* Input : eIdx
* Output : none
* Return : none
********************************************************************/
void ADS1220Reset(E_SPI_DEV_IDX eIdx)
{
SPI_Write(eIdx, E_CMD_RESET); //д�븴λ����
}
/********************************************************************
* name : SPI_ReadADS1220Register
* description : SPI��ȡADS1220�����Ĵ���
* Input : eIdx Addr
* Output : none
* Return : uint8_t
********************************************************************/
static uint8_t SPI_ReadADS1220Register(E_SPI_DEV_IDX eIdx, uint8_t Addr)
{
uint8_t Data = 0x00;
SPI_Write(eIdx, E_CMD_CMD_RREG | (Addr << 2)); //д������+��ַ
Data = SPI_Read(eIdx);
//DebugPrintf("%s,eIdx:%d,addr:0x%x,data:0x%x\n", __func__, eIdx,Addr, Data);
return(Data);
}
/********************************************************************
* name : SPI_WriteADS1220Register
* description : дADS1220�����Ĵ�������
* Input : eIdx Addr Data
* Output : none
* Return : none
********************************************************************/
static void SPI_WriteADS1220Register(E_SPI_DEV_IDX eIdx, uint8_t Addr, uint8_t Data)
{
//DebugPrintf("%s,eIdx:%d,addr:0x%x,data:0x%x\n", __func__,eIdx,Addr,Data);
SPI_Write(eIdx, E_CMD_CMD_WREG | (Addr << 2)); //д������+��ַ
SPI_Write(eIdx, Data);
}
/********************************************************************
* name : ADS1220WriteCfgRegister0
* description : ���üĴ���0
* Input : eIdx MUX GAIN PGA
* Output : none
* Return : true-suc,false-fail
********************************************************************/
bool ADS1220WriteCfgRegister0(E_SPI_DEV_IDX eIdx, uint8_t MUX, uint8_t GAIN, uint8_t PGA)
{
uint8_t WriteValue = 0x00;
uint8_t ReadValue = 0x00;
//1.���ݴ���
if(MUX >= E_MUX_AIN0_AVSS && MUX <= E_MUX_AIN3_AVSS) //���������AINN = AVSS,ǿ�н���PGA
{
PGA = E_PGA_SW_DIS; //��ֹ
}
if(PGA == E_PGA_SW_DIS && GAIN > E_GAIN_004) //����PGA�������ֻ��ʹ��1,2,4
{
GAIN = E_GAIN_001; //ǿ����Ϊ1
}
//2.�������
WriteValue = WriteValue | (MUX << 4); //ͨ��
WriteValue = WriteValue | (GAIN << 1); //����
WriteValue = WriteValue | (PGA << 0); //�˷�
//3.д��Ĵ���
SPI_WriteADS1220Register(eIdx, 0x00, WriteValue); //д�������ݵ��Ĵ���
//4����ȷ��
ReadValue = SPI_ReadADS1220Register(eIdx, 0x00);
return (WriteValue == ReadValue);
}
/********************************************************************
* name : ADS1220WriteCfgRegister1
* description : ���üĴ���1
* Input : eIdx ADC_DR
* Output : none
* Return : true-suc,false-fail
********************************************************************/
bool ADS1220WriteCfgRegister1(E_SPI_DEV_IDX eIdx, uint8_t ADC_DR)
{
uint8_t WriteValue = 0x00;
uint8_t ReadValue = 0x00;
//1.�������
WriteValue = WriteValue | (ADC_DR << 5); //ADC�ٶ�
WriteValue = WriteValue | (D_WORK_MODE << 3); //����ģʽ
WriteValue = WriteValue | (D_CONVERT_MODE << 2); //ת��ģʽ
WriteValue = WriteValue | (D_TEMP_SEN_CFG << 1); //�¶ȴ�����
WriteValue = WriteValue | (D_BSC_CFG << 0); //����Դ
//2.д��Ĵ���
SPI_WriteADS1220Register(eIdx, 0x01, WriteValue); //д�������ݵ��Ĵ���
//3����ȷ��
ReadValue = SPI_ReadADS1220Register(eIdx, 0x01);
return (WriteValue == ReadValue);
}
/********************************************************************
* name : ADS1220WriteCfgRegister2
* description : ���üĴ���2
* Input : eIdx VERF IDAC PSW
* Output : none
* Return : true-suc,false-fail
********************************************************************/
bool ADS1220WriteCfgRegister2(E_SPI_DEV_IDX eIdx, uint8_t VERF, uint8_t IDAC, uint8_t PSW)
{
uint8_t WriteValue = 0x00;
uint8_t ReadValue = 0x00;
//1.�������
WriteValue = WriteValue | (VERF << 6); //����ѹ
WriteValue = WriteValue | (D_FIR_CFG << 4); //FIR�˲�
WriteValue = WriteValue | (PSW << 3); //PSW����
WriteValue = WriteValue | (IDAC << 0); //IDAC����
//2.д��Ĵ���
SPI_WriteADS1220Register(eIdx, 0x02, WriteValue); //д�������ݵ��Ĵ���
//3����ȷ��
ReadValue = SPI_ReadADS1220Register(eIdx, 0x02);
return (WriteValue == ReadValue);
}
/********************************************************************
* name : ADS1220WriteCfgRegister3
* description : ���üĴ���3
* Input : eIdx IDAC1 IDAC2
* Output : none
* Return : true-suc,false-fail
********************************************************************/
bool ADS1220WriteCfgRegister3(E_SPI_DEV_IDX eIdx, uint8_t IDAC1, uint8_t IDAC2)
{
uint8_t WriteValue = 0x00;
uint8_t ReadValue = 0x00;
//1.�������
WriteValue = WriteValue | (IDAC1 << 5); //IDAC1
WriteValue = WriteValue | (IDAC2 << 2); //IDAC2
WriteValue = WriteValue | (D_DRDY_CFG << 1); //DRDYģʽ
//2.д��Ĵ���
SPI_WriteADS1220Register(eIdx, 0x03, WriteValue & 0xFE); //д�������ݵ��Ĵ���(D0����д0)
//3����ȷ��
ReadValue = SPI_ReadADS1220Register(eIdx, 0x03);
return (WriteValue == ReadValue);
}
/********************************************************************
* name : ADS1220Start
* description : ����ת��
* Input : eIdx eChl
* Output : none
* Return : true-suc,false-fail
********************************************************************/
bool ADS1220Start(