#include "main.h"
#include "main_thread.h"
#include "set.h"
#include "ADX824.H"
/*****************************************
1 delay(TCSSC) > 40ns
2 delay(TSCLKDLY) > (24 * (1 /fclk))
3 delay(TSCSC) > (24 * (1 /fclk))
4 Send the CMD_RDATAC before using ADX824_ReadValue
*****************************************/
/*
Function: ADX824_Init
Description: ADX824 GPIO and SPI initialization
Input : null
return: null
*/
void ADX824_Init(void)
{
// RESET/PWDN/RESET definition
GPIO_Init();
ADX82X_PWDN_HIGH;
ADX82X_RESET_HIGH;
// SPI INIT CPOL = LOW/CPHA = 1EDGE/BaudRate 2Mhz
ADX824_SPI_Init();
}
/*
Function: ADX824_WriteCMD
Description: ADX824 Write cmd
Input : CMD
return: null
*/
void ADX824_WriteCMD(uint8_t CMD)
{
uint8_t r;
SPI_NSS_L;
delay(TCSSC);
ADX824_SPI_TransmitReceive_ReadSetREG(&CMD,&r,1);
delay(TSCSC);
SPI_NSS_H;
}
/*
Function: ADX824_SetReg
Description: ADX824 Write register
Input : regAddess : Need to write the first address of the register
sbuff : Write reg value
size: Write the number of registers
return: null
*/
void ADX824_SetReg(uint8_t regAddess,uint8_t *sbuff,uint8_t size)
{
uint8_t p[3],r[20],i;
p[0] = CMD_SDATAC;
p[1] = CMD_WREG | regAddess;
p[2] = size - 1;
SPI_NSS_L;
delay(TCSSC);
for(i = 0;i < 3;i ++)
{
ADX824_SPI_TransmitReceive_ReadSetREG(&p[i],&r[i],1);
delay(TSCLKDLY);
}
for(i = 0;i < size;i ++)
{
ADX824_SPI_TransmitReceive_ReadSetREG(&sbuff[i],&r[i],1);
delay(TSCLKDLY);
}
delay(TSCSC);
SPI_NSS_H;
}
/*
Function: ADX824_ReadReg
Description: ADX824 read register
Input : regAddess : Need to read the first address of the register
sbuff : Read register save buff
size: read the number of registers
return: null
*/
void ADX824_ReadReg(uint8_t regAddess,uint8_t *rbuff,uint8_t size)
{
uint8_t p[3],r[20],i;
p[0] = CMD_SDATAC;
p[1] = CMD_RREG | regAddess;
p[2] = size - 1;
SPI_NSS_L;
delay(TCSSC);
for(i = 0;i < 3;i ++)
{
ADX824_SPI_TransmitReceive_ReadSetREG(&p[i],&r[i],1);
delay(TSCLKDLY);
}
for(i = 0;i < size;i ++)
{
ADX824_SPI_TransmitReceive_ReadSetREG(&r[i],&rbuff[i],1);
delay(TSCLKDLY);
}
delay(TSCSC);
SPI_NSS_H;
}
/*
Function: ADX824_ReadValue
Description: ADX824 read value
Input : null
return: read value
*/
uint32_t ADX824_ReadValue(void)
{
uint8_t p[4],r[4];
uint32_t value;
SPI_NSS_L;
ADX824_SPI_TransmitReceive_ReadValue(p,r,4);
SPI_NSS_H;
value = (uint32_t)(r[0] << 24) + (uint32_t)(r[1] << 16) + (uint32_t)(r[2] << 8) + (uint32_t)(r[3]);
return value;
}
void ADX824_Test(void)
{
uint32_t Value;
uint8_t config0;
ADX824_Init();
config0 = Pulse_sync_mode | High_resolution_mode | DR_500sps | Linear_phase | FILTR_Sinc_LPF;
ADX824_SetReg(CONFIG0,&config0,1);
ADX824_WriteCMD(CMD_RDATAC);
while(1)
{
if(ADX82X_DRDY_READ == 0)
{
Value = ADX824_ReadValue();
}
}
}