#include "AD7192.h"
unsigned long int AD7192Registers[8]={0,0,0,0,0,0,0,0};
unsigned long int AD7192Data = 0;
/********************************************************************************
函数名称:void ADSpiOperation(unsigned char* WriteBuffer, unsigned char *ReadBuffer,
unsigned char NumberOfByte)
功能描述: AD7192
参数说明:
返回说明: 无
********************************************************************************/
void ADSpiOperation(unsigned char* WriteBuffer, unsigned char *ReadBuffer, unsigned char NumberOfByte)
{
unsigned char WriteData, ReadData;
unsigned char i, j;
ADSCK_0();
for(i=0; i<NumberOfByte; i++)
{
WriteData = *(WriteBuffer + i);
ReadData = 0;
for(j=0; j<8; j++)
{
ADSCK_1();
if(0x80 == (WriteData & 0x80))
{
ADOUT_1();
}
else
{
ADOUT_0();
}
WriteData = WriteData << 1;
ADSCK_0();
ReadData = (ReadData<<1) | GetBitAD7192();
}
*(ReadBuffer + i)= ReadData;
}
ADSCK_1();
}
/********************************************************************************
函数名称:void AD7192Initialization(void)
功能描述: AD7192初始化
参数说明:
返回说明: 无
********************************************************************************/
void AD7192Initialization(void)
{
AD7192SoftwareReset();
AD7192InternalZeroScaleCalibration();
AD7192InternalFullScaleCalibration();
}
/********************************************************************************
函数名称:void AD7192SoftwareReset(void)
功能描述: AD7192软件复位
参数说明:
返回说明: 无
********************************************************************************/
void AD7192SoftwareReset(void)
{
unsigned char WriteBuf[1];
unsigned char ReadBuf[1];
unsigned char i;
ADCS_0();
ADSYNC_1();
WriteBuf[0] = 0xFF;
for(i=0; i<5; i++)
{
ADSpiOperation(WriteBuf, ReadBuf, 1);
}
ADCS_1();
}
/********************************************************************************
函数名称:unsigned char WriteToAD7192ViaSPI(const unsigned char RegisterStartAddress,
const unsigned char NumberOfRegistersToWrite, unsigned long int *DataBuffer,
const unsigned char OffsetInBuffer)
功能描述: AD7192写
参数说明:
返回说明: 无
********************************************************************************/
unsigned char WriteToAD7192ViaSPI(const unsigned char RegisterStartAddress, const unsigned char NumberOfRegistersToWrite, unsigned long int *DataBuffer, const unsigned char OffsetInBuffer)
{
unsigned char WriteBuf[4];
unsigned char ReadBuf[4];
unsigned char i;
ADCS_0();
for(i=0; i<NumberOfRegistersToWrite; i++)
{
WriteBuf[0] = WEN|RW_W|((RegisterStartAddress + i)<<3)|CREAD_DIS;
WriteBuf[1] = DataBuffer[RegisterStartAddress + i]>>16;
WriteBuf[2] = DataBuffer[RegisterStartAddress + i]>>8;
WriteBuf[3] = DataBuffer[RegisterStartAddress + i];
ADSpiOperation(WriteBuf, ReadBuf, 4);
}
ADCS_1();
return 0;
}
/********************************************************************************
函数名称:unsigned char ReadFromAD7192ViaSPI(const unsigned char RegisterStartAddress,
const unsigned char NumberOfRegistersToRead, unsigned long int *DataBuffer,
const unsigned char OffsetInBuffer)
功能描述: AD7192读
参数说明:
返回说明: 无
********************************************************************************/
unsigned char ReadFromAD7192ViaSPI(const unsigned char RegisterStartAddress, const unsigned char NumberOfRegistersToRead, unsigned long int *DataBuffer, const unsigned char OffsetInBuffer)
{
unsigned char WriteBuf[4];
unsigned char ReadBuf[4];
unsigned char i;
ADCS_0();
for(i=0; i < NumberOfRegistersToRead; i++)
{
WriteBuf[0] = WEN|RW_R|((RegisterStartAddress + i)<<3)|CREAD_DIS;
ADSpiOperation(WriteBuf, ReadBuf, 1);
WriteBuf[0] = NOP;
WriteBuf[1] = NOP;
WriteBuf[2] = NOP;
WriteBuf[3] = NOP;
switch(RegisterStartAddress + i){
case REG_ID :
case REG_COM_STA :
case REG_GPOCON :
ADSpiOperation(WriteBuf, ReadBuf, 1);
DataBuffer[OffsetInBuffer + i ] = ReadBuf[0];
break;
case REG_MODE :
case REG_CONF :
case REG_OFFSET :
case REG_FS :
ADSpiOperation(WriteBuf, ReadBuf, 3);
DataBuffer[OffsetInBuffer + i ] = ReadBuf[0];
DataBuffer[OffsetInBuffer + i ] = (DataBuffer[OffsetInBuffer + i ]<<8) + ReadBuf[1];
DataBuffer[OffsetInBuffer + i ] = (DataBuffer[OffsetInBuffer + i ]<<8) + ReadBuf[2];
break;
case REG_DATA :
if (AD7192Registers[REG_MODE] & DAT_STA_EN) {
ADSpiOperation(WriteBuf, ReadBuf, 4);
DataBuffer[OffsetInBuffer + i ] = ReadBuf[0];
DataBuffer[OffsetInBuffer + i ] = (DataBuffer[OffsetInBuffer + i ]<<8) + ReadBuf[1];
DataBuffer[OffsetInBuffer + i ] = (DataBuffer[OffsetInBuffer + i ]<<8) + ReadBuf[2];
DataBuffer[OffsetInBuffer + i ] = (DataBuffer[OffsetInBuffer + i ]<<8) + ReadBuf[3];
break;
}
else {
ADSpiOperation(WriteBuf, ReadBuf, 3); //do not transfer the status contents after read data register
DataBuffer[OffsetInBuffer + i ] = ReadBuf[0];
DataBuffer[OffsetInBuffer + i ] = (DataBuffer[OffsetInBuffer + i ]<<8) + ReadBuf[1];
DataBuffer[OffsetInBuffer + i ] = (DataBuffer[OffsetInBuffer + i ]<<8) + ReadBuf[2];
break;
}
default :
break;
}
}
ADCS_1();
return 0;
}
/********************************************************************************
函数名称:void AD7192StartContinuousRead(void)
功能描述: AD7192
参数说明:
返回说明: 无
********************************************************************************/
void AD7192StartContinuousRead(void)
{
unsigned char WriteBuf[1];
unsigned char ReadBuf[1];
ADCS_0();
WriteBuf[0] = WEN|RW_R|(REG_DATA<<3)|CREAD_EN;
ADSpiOperation(WriteBuf, ReadBuf, 1);
}
/********************************************************************************
函数名称:unsigned long int AD7192ContinuousRead(void)
功能描述: AD7192
参数说明:
返回说明: 无
********************************************************************************/
unsigned long int AD7192ContinuousRead(void)
{
unsigned char WriteBuf[4];
unsigned char ReadBuf[4];
unsigned long int DataBuffer;
unsigned long i = 0;
WriteBuf[0] = NOP;
WriteBuf[1] = NOP;
WriteBuf[2] = NOP;
WriteBuf[3] = NOP;
ADCS_0();
while(GetBitAD7192()== 0 && (i++ < 10000));
while(GetBitAD7192()== 1 && (i++ < 10000)); // waiting the 1st RDY failling edge;
if ((AD7192Registers[REG_MODE] & DAT_STA_EN) == DAT_STA_EN) {
ADSpiOperation(WriteBuf, ReadBuf, 4);
DataBuffer = ReadBuf[0];
DataBuffer = (DataBuffer<<8) + ReadBuf[1];
DataBuffer = (DataBuffer<<8) + ReadBuf[2];
DataBuffer = (DataBuffer<<8) + ReadBuf[3];
}
else {
ADSpiOperation(WriteBuf, ReadBuf, 3); //do not transfer the status contents after read data register
DataBuffer = ReadBuf[0];
DataBuffer = (DataBuffer<<8) + ReadBuf[1];
DataBuffer = (DataBuffer<<8) + ReadBuf[2];
}
return DataBuffer;
}
/********************************************************************************
函数名称:unsigned long int AD7192ReadConvertingData(void)
功能描述: AD7192
参数说明:
返回说明: 无
********************************************************************************/
unsigned long int AD7192ReadConvertingData(void)
{
unsigned char WriteBuf[4];
unsigned char ReadBuf[4];
unsigned long int DataBuffer;
unsigned long i = 0;
ADCS_0();
WriteBuf[0] = WEN|RW_R|((REG_DATA)<<3)|CREAD_DIS;
ADSpiOperation(WriteBuf, ReadBuf, 1);
WriteBuf[0] = NOP;
WriteBuf[1] = NOP;
WriteBuf[2] = NOP;
WriteBuf[3] = NOP;
while(GetBitAD7192()== 0 && (i++ < 10000) );
while(GetBitAD7192()== 1 && (i++ < 10000)); // w
没有合适的资源?快使用搜索试试~ 我知道了~
AD7192.zip_ad7192
共2个文件
c:1个
h:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 2 下载量 183 浏览量
2022-07-15
10:17:45
上传
评论 1
收藏 4KB ZIP 举报
温馨提示
AD7192驱动程序(STM32F103)
资源推荐
资源详情
资源评论
收起资源包目录
AD7192.zip (2个子文件)
AD7192.c 16KB
AD7192.h 5KB
共 2 条
- 1
资源评论
- modikuan2024-05-04果断支持这个资源,资源解决了当前遇到的问题,给了新的灵感,感谢分享~
- 2301_772167752023-11-22总算找到了想要的资源,搞定遇到的大问题,赞赞赞!
林当时
- 粉丝: 100
- 资源: 1万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功