/*
Analogysemi xutong
2024/03/06
*/
#include "ADX51X.h"
#include "bsp_lpspi.h"
//初始化ADX51X
void ADX51X_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
ADX51X_PWDN_PORT_CLK_EN;
ADX51X_RESET_PORT_CLK_EN;
GPIO_InitStruct.Pin = ADX51X_RESET_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(ADX51X_RESET_PORT, &GPIO_InitStruct);
GPIO_InitStruct.Pin = ADX51X_PWDN_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(ADX51X_PWDN_PORT, &GPIO_InitStruct);
ADX51X_PWDN_H;
ADX51X_RESET_H;
//拉PWDN和RST
}
//获取芯片的ID号
//ADX51X default Value 0x20
uint8_t ADX51X_GetChipID(void)
{
uint8_t ID;
ID=ADX51X_GetReg(ADX51X_STATUS);
return ID;
}
//获取芯片寄存器值
uint8_t ADX51X_GetReg(uint8_t Rreg)
{
uint8_t TxData[3];
uint8_t RxData[3];
//读取命令,
TxData[0]=ADX51X_RREG|Rreg;
//选择要读取的寄存器
TxData[1]=0x00;
//读取单个寄存器
TxData[2]=0X00;
//开始读取
Lpspi_Read(3,TxData,RxData);
//返回寄存器值
return RxData[2];
}
//写单个芯片寄存器值
void ADX51X_WriteReg(uint8_t Wreg,uint8_t Data)
{
uint8_t TxData[3];
//写入命令,
TxData[0]=ADX51X_WREG|Wreg;
//选择要写入的的寄存器
TxData[1]=0x00;
//读取写入寄存器
TxData[2]=Data;
Lpspi_Write(3,TxData);
}
//写多个芯片寄存器值
//StartReg 起始寄存器地址
//RegNum 要写的寄存器数量
//*Data 寄存器参数传入
void ADX51X_WriteMultiReg(uint8_t StartReg,uint8_t RegNum,uint8_t *Data)
{
uint8_t TxData[32];
uint8_t i;
//写入命令,
TxData[0]=ADX51X_WREG|StartReg;
//选择要写入的的寄存器
TxData[1]=RegNum-1;
for(i=0;i<RegNum;i++)
{
//将指针数据赋值给Txdata
TxData[2+i]=*Data;
//指向下个数据地址
Data++;
}
//最终发送多少个数据
Lpspi_Write(2+RegNum,TxData);
}
//读多个芯片寄存器值
//StartReg 起始寄存器地址
//RegNum 要写的寄存器数量
//*Data 寄存器参数传出
void ADX51X_ReadMultiReg(uint8_t StartReg,uint8_t RegNum,uint8_t *Data)
{
//读取寄存器
uint8_t TxData[3];
//读取命令,
TxData[0]=ADX51X_RREG|StartReg;
//选择要写入的的寄存器
TxData[1]=RegNum-1;
//最终接收多少个数据
Lpspi_Read(2+RegNum,TxData,Data);
}
//打印所有寄存器地址
void ADX51X_GetAllReg(void)
{
uint8_t i,j;
for(i=0;i<20;i++)
{
j=ADX51X_GetReg(i);
}
}
//发送ADX51X 数据指令 如SDATAC或者RDATAC
//详情见头文件command define部分
void ADX51X_Command(uint8_t Com)
{
uint8_t TxData[1];
TxData[0]=Com;
Lpspi_Write(1,TxData);
}
//设定通道并且获取adc数据
//获取ADC的值
//ADC负接在AIN1上
void ADX51X_GetADC_Value(uint8_t AIN_P,uint8_t AIN_N,uint8_t *Rxdata)
{
uint8_t TxData[]={0,0,0};
// 可以在这里加DRDY的判断
ADX51X_Command(ADX51X_SDATAC);
ADX51X_WriteReg(ADX51X_MUX,AIN_P<<4|AIN_N);
ADX51X_Command(ADX51X_SYNC);
ADX51X_Command(ADX51X_WAKEUP);
ADX51X_Command(ADX51X_RDATA);
Lpspi_Read(3,TxData,Rxdata);
Lpspi_Stop();
}