*/
#include <stdio.h>
#include "stm32f4xx.h"
#include "ADS1220Driver.h"
#include "SPI2.h"
#include "delay.h"
//DRDY ->PB11
//CS ->PB12
//MOSI ->PB15
//MISO ->PB14
//SCL ->PB13
static unsigned char RcvData[8];
long ADS1220RTDGainCorrection;
long ADS1220TCGainCorrection;
/*一般单次转换时候采集时候使用的代码
if(!Read_DRDY){//当检测到数据可读时
ADS1220_Get_Conversion_Data(ADC1220.DigitValue);//启动读取函数
ADS1220_Start();//及时发送一个下一次转换的信号
ADC1220.AllDigit = (ADC1220.DigitValue[1]<<16)+(ADC1220.DigitValue[2]<<8)+ADC1220.DigitValue[3];//合并分开的24位数据
if(ADC1220.DigitValue[1] < 0x80){//正负号判断
ADC1220.AnalogValue = ((ADC1220.AllDigit)*VRef/0x800000);
}
else{
ADC1220.AnalogValue = (-1)*((0xffffff-ADC1220.AllDigit)*VRef/0x800000);
}
*/
/*ADS1220初始化*/
void ADS1220_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//信号就绪口
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOB时钟
//GPIOB11,12初始化设置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//|GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通输入模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化
Setup_ADS1220(
ADS1220_MUX_AIN0_AIN1,//输入多路复用器配置
ADS1220_OP_MODE_NORMAL,//工作模式选择
ADS1220_CONVERSION_SINGLE_SHOT,//转换模式
ADS1220_DATA_RATE_45SPS, //数据速率
ADS1220_GAIN_1,// 增益配置
ADS1220_PGA_BYPASS,//禁止/启用可编程增益放大器
ADS1220_IDAC1_DISABLED,//选择IDAC1将路由到的通道
ADS1220_IDAC2_DISABLED, //选择IDAC2将路由到的通道
ADS1220_IDAC_CURRENT_OFF, //IDAC电流设置
ADS1220_VREF_EXT_REF0_PINS,// 基准电压选择
ADS1220_TEMP_SENSOR_OFF);//温度传感器
}
/*ADS1220配置*/
/*输入:
inputMux :输入多路复用器配置(对于AINn=AVSS的设置,PGA必须(PGA_BYPASS=1),并且仅可使用增益1,2,4)
ADS1220_MUX_AIN0_AIN1
ADS1220_MUX_AIN0_AIN2
ADS1220_MUX_AIN0_AIN3
ADS1220_MUX_AIN1_AIN2
ADS1220_MUX_AIN1_AIN3
ADS1220_MUX_AIN2_AIN3
ADS1220_MUX_AIN1_AIN0
ADS1220_MUX_AIN3_AIN2
ADS1220_MUX_AIN0_AVSS
ADS1220_MUX_AIN1_AVSS
ADS1220_MUX_AIN2_AVSS
ADS1220_MUX_AIN3_AVSS
ADS1220_MUX_REFP-REFN
ADS1220_MUX_AVDD-AVSS
ADS1220_MUX_SHORTED
opMode: 工作模式选择
ADS1220_OP_MODE_NORMAL 正常模式(256kHz 调制时钟 默认设置)
ADS1220_OP_MODE_DUTY 占空比模式(内部占空比1:4)
ADS1220_OP_MODE_TURBO Turbo模式 (512kHz调制时钟)
conversionMode: 转换模式
ADS1220_CONVERSION_SINGLE_SHOT 单次
ADS1220_CONVERSION_CONTINUOUS 连续
dateRate:数据速率(详见说明书表18)
ADS1220_DATA_RATE_20SPS
ADS1220_DATA_RATE_45SPS
ADS1220_DATA_RATE_90SPS
ADS1220_DATA_RATE_175SPS
ADS1220_DATA_RATE_330SPS
ADS1220_DATA_RATE_600SPS
ADS1220_DATA_RATE_1000SPS
gainLevel:增益配置(在不使用PGA的情况下,可使用增益1,2,4.在这种情况下,通过开关电容结构获得增益)
ADS1220_GAIN_1
ADS1220_GAIN_2
ADS1220_GAIN_4
ADS1220_GAIN_8
ADS1220_GAIN_16
ADS1220_GAIN_32
ADS1220_GAIN_64
ADS1220_GAIN_128
pgaBypass:禁止/启用可编程增益放大器(PGA)
ADS1220_USE_PGA 启用
ADS1220_PGA_BYPASS 禁用
routeIDAC1:选择IDAC1将路由到的通道
ADS1220_IDAC1_DISABLED
ADS1220_IDAC1_AIN0
ADS1220_IDAC1_AIN1
ADS1220_IDAC1_AIN2
ADS1220_IDAC1_AIN3
ADS1220_IDAC1_REFP
ADS1220_IDAC1_REFN
routeIDAC2:选择IDAC2将路由到的通道
ADS1220_IDAC2_DISABLED
ADS1220_IDAC2_AIN0
ADS1220_IDAC2_AIN1
ADS1220_IDAC2_AIN2
ADS1220_IDAC2_AIN3
ADS1220_IDAC2_REFP
ADS1220_IDAC2_REFN
idacCurrent:IDAC电流设置
ADS1220_IDAC_CURRENT_OFF
ADS1220_IDAC_CURRENT_10_UA
ADS1220_IDAC_CURRENT_50_UA
ADS1220_IDAC_CURRENT_100_UA
ADS1220_IDAC_CURRENT_250_UA
ADS1220_IDAC_CURRENT_500_UA
ADS1220_IDAC_CURRENT_1000_UA
ADS1220_IDAC_CURRENT_1500_UA
selectVref:基准电压选择
ADS1220_VREF_INTERNAL 选择2.048V的内部基准电压(默认)
ADS1220_VREF_EXT_REF0_PINS 使用专用REFP0和REFN0输入选择的外部基准电压
ADS1220_VREF_EXT_REF1_PINS 使用AIN0/REFP1和AIN3/REFN1输入选择的外部基准电压
ADS1220_VREF_AVDD 做基准的模拟电源(AVDD-AVSS)
intTempSensor:温度传感器模式
0:禁用 1:启用
*/
//输出: 无
void Setup_ADS1220 (unsigned char inputMux, unsigned char opMode,
unsigned char conversionMode, unsigned char dataRate, unsigned char gainLevel, unsigned char pgaBypass,
unsigned char routeIDAC1, unsigned char routeIDAC2, unsigned char idacCurrent, unsigned char selectVref, unsigned char intTempSensor)
{
unsigned char config[4];
config[0] = inputMux + gainLevel + pgaBypass;
config[1] = dataRate + opMode + conversionMode + intTempSensor + ADS1220_BURN_OUT_CURRENT_OFF;
config[2] = ADS1220_FIR_50_60 + selectVref + ADS1220_LOW_SIDE_POWER_OPEN + idacCurrent;
config[3] = routeIDAC1 + routeIDAC2 + ADS1220_DRDY_ON_DRDY_ONLY;
ADS1220_Write_Regs(config, ADS1220_CONFIG_0_REG, 4);
}
/*************************************************************************************************************************************************
* ADS1220_Reset
**************************************************************************************************************************************************/
/*!
* @brief Sends a Reset Command to the ADS1220.
*
* This function sends a Reset command to the ADS1220 on the SPI bus.
*
* @return None
*
**************************************************************************************************************************************************/
void ADS1220_Reset (void)
{
unsigned char cmd = ADS1220_RESET_CMD;
SPI_Write (&cmd, RcvData, 1);
}
/*************************************************************************************************************************************************
* ADS1220_Start
**************************************************************************************************************************************************/
/*!
* @brief Sends a Start Conversion Command to the ADS1220.
*
* This function sends a Start Conversion command to the ADS1220 on the SPI bus. Conversions will be completed when the Data Ready interrupt occurs.
*
* @return None
*
**************************************************************************************************************************************************/
void ADS1220_Start (void)
{
unsigned char cmd = ADS1220_START_CMD;
SPI_Write (&cmd, RcvData, 1);
}
/*************************************************************************************************************************************************
* ADS1220_Powerdown
**************************************************************************************************************************************************/
/*!
* @brief Sends a Power Down Data Command to the ADS1220.
*
* This function sends a Power Down command to the ADS1220 on the SPI bus.
*
* @return None
*
* @note A Start Conversion command is required to bring the ADS1220 out of Power Down. Since the Power Down turns off the IDACs, care must be
* taken to allow them sufficient time to settle after waking up from a power down. Depending on the specific system, it is possible that
* initial readings after a power down may not be valid.
*
* @sa ADS1220_Start()
**************************************************************************************************************************************************/
void ADS1220_Powerdown (void)
{
unsigned char cmd = ADS1220_POWERDOWN_CMD;
SPI_Write (&cmd, RcvData, 1);
}
/*************************************************************************************************************************************************
* ADS1220_Write_Regs
**************************************************************************************************************************************************/
/*!
* @brief ADS1220寄存器写入函数
*
* This function will execute a write register command to the ADS1220. This function can be used to update one or more registers on the ADS1220.
* No error checking is performed, so it is the user's responsibility to make sure they do not attempt to write past the end of the ADS1220 registers.
*
* @param[out] *writeValues 将要写入的八位二进制数据的地址
* @param[in] startReg 要写入的第一个寄存器序号
* @param[in] length 按顺序写入的寄存器数量(如startReg为2,length为 2,那么就写2,3寄存器,数据按地址依顺序增加)
*
* @return None
*
**************************************************************************************************************************************************/
void ADS1220_Write_Regs (unsigned char *writeValues, unsigned char startReg, unsigned char length)
{
unsigned char outData[5];
unsigned char i;
outData[0] = ADS1220_WRITE_CMD(startReg,length);//该命令为告诉芯片写入寄存器,并且告知长度和初始寄存器位置
for (i=0; i<length; i++)
{
outData[i+1] = writeValues[i];
}
SPI_Write (outData, RcvData, length+1); // Add 1 to length for command byte
}
/*************************************************************************************************************************************************
* ADS1220_Read_Regs
**************************************************************************************************************************************************/
/*!
* @brief ADS1220寄存器配置信息读取.(具体操作方式同上函数)
*
* This function will execute a read register command to the ADS1220 and return the resultant data. This function can be used to read one or more
* registers from the ADS1220. No error checking is performed, so it is the user's responsibility to make sure they do not attempt to read past
* the end of the ADS1220 registers.
*
* @param[out] *readValues Pointer to place the 8 bit register values from the ADS1220
* @param[in] startReg Address of the first register to read
* @param[in] length Number of registers to read.
*
* @return None
*
**************************************************************************************************************************************************/
void ADS1220_Read_Regs (unsigned char *readValues, unsigned char startReg, unsigned char length)
{
unsigned char outData[5] = {0x55, 0x55, 0x55, 0x55, 0x55};
outData[0] = ADS1220_READ_CMD(startReg,length);
SPI_Write (outData, readValues, length+1); // 第一位作为命令数据
}
/*************************************************************************************************************************************************
* ADS1220_Send_Read_Data_Command
**************************************************************************************************************************************************/
/*!
* @brief 向ADS1220发送读取数据命令。
*
* This function sends a Read Data (RDATA) command to the ADS1220 on the SPI bus.
*
* @return None
*
**************************************************************************************************************************************************/
void ADS1220_Send_Read_Data_Command (void)
{
unsigned char cmd = ADS1220_RDATA_CMD;
SPI_Write (&cmd, RcvData, 1);
}
/*************************************************************************************************************************************************
* ADS1220_Get_Conversion_Data
**************************************************************************************************************************************************/
/*!
* @brief Gets the raw conversion data from the ADS1220.
*
* 此函数从ADS1获取转换数据。此函数是标准函数,用于收集转换期间的数据
* calibration operations.
*
* @param[out] *conversionData Pointer to place the 24 bit Conversion Data from the ADS1220
*
* @return None
*
* @note The ADS1220_Get_Conversion_Data_Calibrated() function is used to return calibrated conversion data, which is used during normal RTD logic
*
* @sa ADS1220_Get_Conversion_Data_Calibrated()
**************************************************************************************************************************************************/
void ADS1220_Get_Conversion_Data (unsigned char *conversionData)
{
unsigned char outData[4] = {0xff, 0xff, 0xff, 0xff};
SPI_Write (outData, conversionData, 4); // 3 Bytes of Conversion Data
}
/*************************************************************************************************************************************************
* ADS1220_Get_RTD_Conversion_Data_Calibrated
**************************************************************************************************************************************************/
/*!
* @brief Gets the RTD conversion data from the ADS1220 and subtracts the calibration values to return a calibrated conversion data.
*
*此函数从ADS1220获取转换数据。然后,它将减去先前计算的校准值。这个函数
*是用于在正常操作期间收集转换数据的标准函数。
*
* The function requires the system to have performed calibration
*
* @param[out] *code Pointer to place the 24 bit Calibrated Conversion Data from the ADS1220
*
* @return None
*
* @note The ADS1220_Get_Conversion_Data() function is used to return raw conversion data, which is used during calibration logic
*
* @sa ADS1220_Get_Conversion_Data()
**************************************************************************************************************************************************/
void ADS1220_Get_RTD_Conversion_Data_Calibrated(volatile long *code)
{
unsigned char outData[3] = {0xff, 0xff, 0xff};
unsigned char tempData[3];
SPI_Write (outData, tempData, 3); // 3 Bytes of Conversion Data
*code = (((long)tempData[0] << 16) + ((long)tempData[1] << 8) + (long)tempData[2]); // combine 3 Bytes of Conversion Data to 24 bit value
if(*code & 0x800000) // check if result is negative
{
*code ^= 0x00FFFFFF; //invert and make
*code += 1; // two's complement
}
*code = (long)((long long)(*code) * ADS1220RTDGainCorrection/100000); // ADS1220 Gain correction
}
/*************************************************************************************************************************************************
* ADS1220_Get_TC_Conversion_Data_Calibrated
**************************************************************************************************************************************************/
/*!
* @brief Gets the TC conversion data from the ADS1220 and subtracts the calibration values to return a calibrated conversion data.
*
* This function gets the TC Conversion Data from the ADS1220. It will then subtract the Calibration Value previously calculated. This function
* is the standard function used to gather the conversion data during normal operations.
*
* The function requires the system to have performed calibration
*
* @param[out] *code Pointer to place the 24 bit Calibrated Conversion Data from the ADS1220 into 32 bit unsigned long variable
*
* @return None
*
* @note The ADS1220_Get_Conversion_Data() function is used to return raw conversion data, which is used during calibration logic
*
* @sa ADS1220_Get_Conversion_Data()
**************************************************************************************************************************************************/
/*************************************************************************************************************************************************
* SPI_Write
**************************************************************************************************************************************************/
/*!
* @brief Perform a SPI communication sequence to Write/Read data on SPI bus
*
* The SPI bus uses one clock line and 2 data lines that transfer data at the same time. The master will read data from the MISO
* (Master In Slave Out) line on one edge of the clock. The slave device will read on the MOSI (Master Out Slave In) on the other edge of the clock.
* As such, reads and writes happen together. If there is no data to send to the slave, the master must write out dummy data on the bus to get the
* clock to toggle for the slave device to communicate.
*
* Note that many SPI devices do not communicate back to the master at all, and have no MISO line connected.
*
* @param[in] outData Pointer to an array with the data that will be written on the SPI bus
* @param[in] inData Pointer to an array to place the data returned from the slave device. One byte for EVERY byte sent,
* even the command byte
* @param[in] length Number of bytes to send/receive
*
**************************************************************************************************************************************************/
void SPI_Write (unsigned char *outData, unsigned char *inData, unsigned char length)
{
unsigned char i;
ADS1220_CS_Low(); // CS Active Low
delay_us(1); // Pause a bit
if(!Read_DRDY){
for (i=0; i<length; i++){
*inData = SPI_Write_Read_Byte (outData[i]);
inData ++;
}
}
else{
for (i=0; i<length; i++){
SPI_Write_Byte (outData[i]);
}
}
// while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);//检测发送标志位
delay_us(5); // Pause a bit
ADS1220_CS_High();// CS Active High
}
/*************************************************************************************************************************************************
* 发送+读取函数
**************************************************************************************************************************************************/
/*!
* @brief This function is used to place a single byte on the SPI bus. This function is for expert mode only.
*
* This function can be used by someone managing their own communications on the SPI bus to place one byte on the bus. It is assumed that the user
* will manage the STE pin themselves when using this command. The received byte from the MISO pin will be returned by this function.
*
* This function only exists to support users who have non-standard SPI devices on their bus. Some devices require excessive time between bytes or
* a delay between the command byte and subsequent data bytes.
*
* @param[in] data Pointer to an array with the data that will be written on the SPI bus
*
* @return in_data Character sent from SPI device on MISO line
**************************************************************************************************************************************************/
unsigned char SPI_Write_Read_Byte (unsigned char data)
{
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);//检测发送标志位
SPI_I2S_SendData(SPI2, data); //通过外设SPI1发送一个数据
while (SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE) == RESET); // Wait for end of data receive
return ((unsigned char)SPI_I2S_ReceiveData(SPI2)); // Return the received byte from RX Buffer
}
//仅发送函数
void SPI_Write_Byte (unsigned char data)
{
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);//检测发送标志位
SPI_I2S_SendData(SPI2, data); //通过外设SPI1发送一个数据
}
#ifndef __ADS1220_DRIVER_H_
#define __ADS1220_DRIVER_H_
/*
Code name:ADS1220Driver
Date:2019.5.10
Writing by : Borygnay
*/
#include <stdio.h>
#include "stm32f4xx.h"
#ifdef __CPLUSPLUS
extern "C" {
#endif
extern float PgaGainLevel;
#define VRef 3.3
#define Read_DRDY GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)
#define ADS1220_CS_High() GPIO_SetBits(GPIOB,GPIO_Pin_12)
#define ADS1220_CS_Low() GPIO_ResetBits(GPIOB,GPIO_Pin_12)
#define ADS1220_RESET_CMD 0x06
#define ADS1220_WREG_CMD 0x40
#define ADS1220_RREG_CMD 0x20
#define ADS1220_RDATA_CMD 0x10
#define ADS1220_START_CMD 0x08
#define ADS1220_POWERDOWN_CMD 0x02
#define ADS1220_WRITE_CMD(reg,len) (ADS1220_WREG_CMD + (reg << 2) + (len-1))
#define ADS1220_READ_CMD(reg,len) (ADS1220_RREG_CMD + (reg << 2) + (len-1))
#define ADS1220_CONFIG_0_REG 0
#define ADS1220_CONFIG_1_REG 1
#define ADS1220_CONFIG_2_REG 2
#define ADS1220_CONFIG_3_REG 3
//寄存器0配置宏定义
#define ADS1220_MUX_MASK 0xf0
#define ADS1220_MUX_SHIFT 4
#define ADS1220_MUX_AIN0_AIN1 (0x0 << ADS1220_MUX_SHIFT)
#define ADS1220_MUX_AIN0_AIN2 (0x1 << ADS1220_MUX_SHIFT)
#define ADS1220_MUX_AIN0_AIN3 (0x2 << ADS1220_MUX_SHIFT)
#define ADS1220_MUX_AIN1_AIN2 (0x3 << ADS1220_MUX_SHIFT)
#define ADS1220_MUX_AIN1_AIN3 (0x4 << ADS1220_MUX_SHIFT)
#define ADS1220_MUX_AIN2_AIN3 (0x5 << ADS1220_MUX_SHIFT)
#define ADS1220_MUX_AIN1_AIN0 (0x6 << ADS1220_MUX_SHIFT)
#define ADS1220_MUX_AIN3_AIN2 (0x7 << ADS1220_MUX_SHIFT)
#define ADS1220_MUX_AIN0_AVSS (0x8 << ADS1220_MUX_SHIFT)
#define ADS1220_MUX_AIN1_AVSS (0x9 << ADS1220_MUX_SHIFT)
#define ADS1220_MUX_AIN2_AVSS (0xa << ADS1220_MUX_SHIFT)
#define ADS1220_MUX_AIN3_AVSS (0xb << ADS1220_MUX_SHIFT)
#define ADS1220_MUX_REFP_REFN (0xc << ADS1220_MUX_SHIFT)
#define ADS1220_MUX_AVDD_AVSS (0xd << ADS1220_MUX_SHIFT)
#define ADS1220_MUX_SHORTED (0xe << ADS1220_MUX_SHIFT)
#define ADS1220_GAIN_MASK 0xe
#define ADS1220_GAIN_SHIFT 1
#define ADS1220_GAIN_1 (0x0 << ADS1220_GAIN_SHIFT)
#define ADS1220_GAIN_2 (0x1 << ADS1220_GAIN_SHIFT)
#define ADS1220_GAIN_4 (0x2 << ADS1220_GAIN_SHIFT)
#define ADS1220_GAIN_8 (0x3 << ADS1220_GAIN_SHIFT)
#define ADS1220_GAIN_16 (0x4 << ADS1220_GAIN_SHIFT)
#define ADS1220_GAIN_32 (0x5 << ADS1220_GAIN_SHIFT)
#define ADS1220_GAIN_64 (0x6 << ADS1220_GAIN_SHIFT)
#define ADS1220_GAIN_128 (0x7 << ADS1220_GAIN_SHIFT)
#define ADS1220_PGA_BYPASS 1
#define ADS1220_USE_PGA 0
//寄存器1配置宏定义
#define ADS1220_DATA_RATE_MASK 0xe0
#define ADS1220_DATA_RATE_SHIFT 5
#define ADS1220_DATA_RATE_20SPS (0 << ADS1220_DATA_RATE_SHIFT)
#define ADS1220_DATA_RATE_45SPS (1 << ADS1220_DATA_RATE_SHIFT)
#define ADS1220_DATA_RATE_90SPS (2 << ADS1220_DATA_RATE_SHIFT)
#define ADS1220_DATA_RATE_175SPS (3 << ADS1220_DATA_RATE_SHIFT)
#define ADS1220_DATA_RATE_330SPS (4 << ADS1220_DATA_RATE_SHIFT)
#define ADS1220_DATA_RATE_600SPS (5 << ADS1220_DATA_RATE_SHIFT)
#define ADS1220_DATA_RATE_1000SPS (6 << ADS1220_DATA_RATE_SHIFT)
#define ADS1220_OP_MODE_MASK 0x18
#define ADS1220_OP_MODE_SHIFT 3
#define ADS1220_OP_MODE_NORMAL (0 << ADS1220_OP_MODE_SHIFT)
#define ADS1220_OP_MODE_DUTY (1 << ADS1220_OP_MODE_SHIFT)
#define ADS1220_OP_MODE_TURBO (2 << ADS1220_OP_MODE_SHIFT)
#define ADS1220_CONVERSION_MODE_MASK 0x4
#define ADS1220_CONVERSION_SINGLE_SHOT 0x0
#define ADS1220_CONVERSION_CONTINUOUS 0x4
#define ADS1220_TEMP_SENSOR_MASK 0x2
#define ADS1220_TEMP_SENSOR_ON 0x2
#define ADS1220_TEMP_SENSOR_OFF 0x0
#define ADS1220_BURN_OUT_MASK 0x1
#define ADS1220_BURN_OUT_CURRENT_ON 0x1
#define ADS1220_BURN_OUT_CURRENT_OFF 0x0
//寄存器2配置宏定义
#define ADS1220_VREF_MASK 0xc0
#define ADS1220_VREF_SHIFT 6
#define ADS1220_VREF_INTERNAL (0 << ADS1220_VREF_SHIFT)
#define ADS1220_VREF_EXT_REF0_PINS (1 << ADS1220_VREF_SHIFT)
#define ADS1220_VREF_EXT_REF1_PINS (2 << ADS1220_VREF_SHIFT)
#define ADS1220_VREF_AVDD (3 << ADS1220_VREF_SHIFT)
#define ADS1220_FIR_FILTER_MASK 0x30
#define ADS1220_FIR_FILTER_SHIFT 4
#define ADS1220_FIR_NONE (0 << ADS1220_FIR_FILTER_SHIFT)
#define ADS1220_FIR_50_60 (1 << ADS1220_FIR_FILTER_SHIFT)
#define ADS1220_FIR_50 (2 << ADS1220_FIR_FILTER_SHIFT)
#define ADS1220_FIR_60 (3 << ADS1220_FIR_FILTER_SHIFT)
#define ADS1220_LOW_SIDE_POWER_MASK 0x04
#define ADS1220_LOW_SIDE_POWER_OPEN 0x00
#define ADS1220_LOW_SIDE_POWER_CLOSES 0x04
#define ADS1220_IDAC_CURRENT_MASK 0x07
#define ADS1220_IDAC_CURRENT_SHIFT 0
#define ADS1220_IDAC_CURRENT_OFF (0 << ADS1220_IDAC_CURRENT_SHIFT)
#define ADS1220_IDAC_CURRENT_10_UA (1 << ADS1220_IDAC_CURRENT_SHIFT)
#define ADS1220_IDAC_CURRENT_50_UA (2 << ADS1220_IDAC_CURRENT_SHIFT)
#define ADS1220_IDAC_CURRENT_100_UA (3 << ADS1220_IDAC_CURRENT_SHIFT)
#define ADS1220_IDAC_CURRENT_250_UA (4 << ADS1220_IDAC_CURRENT_SHIFT)
#define ADS1220_IDAC_CURRENT_500_UA (5 << ADS1220_IDAC_CURRENT_SHIFT)
#define ADS1220_IDAC_CURRENT_1000_UA (6 << ADS1220_IDAC_CURRENT_SHIFT)
#define ADS1220_IDAC_CURRENT_1500_UA (7 << ADS1220_IDAC_CURRENT_SHIFT)
//寄存器3配置宏定义
#define ADS1220_IDAC1_MUX_MASK 0xe0
#define ADS1220_IDAC1_MUX_SHIFT 5
#define ADS1220_IDAC1_DISABLED (0 << ADS1220_IDAC1_MUX_SHIFT)
#define ADS1220_IDAC1_AIN0 (1 << ADS1220_IDAC1_MUX_SHIFT)
#define ADS1220_IDAC1_AIN1 (2 << ADS1220_IDAC1_MUX_SHIFT)
#define ADS1220_IDAC1_AIN2 (3 << ADS1220_IDAC1_MUX_SHIFT)
#define ADS1220_IDAC1_AIN3 (4 << ADS1220_IDAC1_MUX_SHIFT)
#define ADS1220_IDAC1_REFP0 (5 << ADS1220_IDAC1_MUX_SHIFT)
#define ADS1220_IDAC1_REFN0 (6 << ADS1220_IDAC1_MUX_SHIFT)
#define ADS1220_IDAC2_MUX_MASK 0x1c
#define ADS1220_IDAC2_MUX_SHIFT 2
#define ADS1220_IDAC2_DISABLED (0 << ADS1220_IDAC2_MUX_SHIFT)
#define ADS1220_IDAC2_AIN0 (1 << ADS1220_IDAC2_MUX_SHIFT)
#define ADS1220_IDAC2_AIN1 (2 << ADS1220_IDAC2_MUX_SHIFT)
#define ADS1220_IDAC2_AIN2 (3 << ADS1220_IDAC2_MUX_SHIFT)
#define ADS1220_IDAC2_AIN3 (4 << ADS1220_IDAC2_MUX_SHIFT)
#define ADS1220_IDAC2_REFP0 (5 << ADS1220_IDAC2_MUX_SHIFT)
#define ADS1220_IDAC2_REFN0 (6 << ADS1220_IDAC2_MUX_SHIFT)
#define ADS1220_DOUT_DRDY_MASK 0x2
#define ADS1220_DRDY_ON_DOUT_DRDY 0x2
#define ADS1220_DRDY_ON_DRDY_ONLY 0x0
#define SPI_INVALID_RATE 0XFF
#define SPI_INVALID_COMMAND 0X01
void ADS1220_Init(void);
void Setup_ADS1220 (unsigned char inputMux, unsigned char opMode,
unsigned char conversionMode, unsigned char dataRate, unsigned char gainLevel, unsigned char pgaBypass,
unsigned char routeIDAC1, unsigned char routeIDAC2, unsigned char idacCurrent, unsigned char selectVref, unsigned char intTempSensor);
void ADS1220_Offset_Calibrate_Data (unsigned char *tempData);
void ADS1220_Reset (void);
void ADS1220_Start (void);
void ADS1220_Powerdown (void);
void ADS1220_Write_Regs (unsigned char *writeValues, unsigned char startReg, unsigned char length);
void ADS1220_Read_Regs (unsigned char *readValues, unsigned char startReg, unsigned char length);
void ADS1220_Send_Read_Data_Command (void);
void ADS1220_Get_Conversion_Data (unsigned char *conversionData);
void ADS1220_Get_RTD_Conversion_Data_Calibrated(volatile long *code);
void ADS1220_Get_TC_Conversion_Data_Calibrated(volatile long *code);
void Setup_SPI_Master (void);
void SPI_Write (unsigned char *outData, unsigned char *inData, unsigned char length);
unsigned char SPI_Write_Read_Byte (unsigned char data);
void SPI_Write_Byte (unsigned char data);
#ifdef __CPLUSPLUS
}
#endif
#endif