类比半导体ADX824驱动
#ifndef _ADX824_H_ #define _ADX824_H_ #define ADX82X_PWDN_HIGH #define ADX82X_PWDN_LOW #define ADX82X_RESET_HIGH #define ADX82X_RESET_LOW #define ADX82X_DRDY_READ #define SPI_NSS_L #define SPI_NSS_H #define CMD_WAKEUP 0x00 #define CMD_STANDBY 0x02 #define CMD_SYNC 0x04 #define CMD_RESET 0X06 #define CMD_RDATAC 0X10 #define CMD_SDATAC 0x11 #define CMD_RDATA 0x12 #define CMD_RREG 0x20 #define CMD_WREG 0x40 #define CMD_OFSCAL 0x60 #define CMD_GANCAL 0x61 #define REG_ID_CFG 0X00 #define CONFIG0 0X01 #define CONFIG1 0X02 #define HPF0 0X03 #define HPF1 0X04 #define OFC0 0X05 #define OFC1 0X06 #define OFC2 0X07 #define FSC0 0X08 #define FSC1 0X09 #define FSC2 0X0A //config0 01h #define Pulse_sync_mode 0x00 #define Continuous_sync_mode 0x80 #define Low_power_mode 0x00 #define High_resolution_mode 0x40 #define DR_250sps 0x00 #define DR_500sps 0x08 #define DR_1000sps 0x10 #define DR_2000sps 0x18 #define DR_4000sps 0x20 #define Linear_phase 0x00 #define Minimum_phase 0x04 #define FILTR_Reserved 0x00 #define FILTR_Sinc 0x01 #define FILTR_Sinc_LPF 0x02 #define FILTR_Sinc_LPF_HPF 0x03 //config1 02h #define MUX_AINP1_N1 0X00 #define MUX_AINP2_N2 0X10 #define MUX_Shout_400_res 0X20 #define MUX_Shout_AIN1_CONN_AIN2 0X30 #define MUX_EXT_Shout_AINN2 0X40 #define PGA_CHOP_DISABLE 0X00 #define PGA_CHOP_ENABLE 0X08 #define PGA_GAIN_1 0x00 #define PGA_GAIN_2 0x01 #define PGA_GAIN_4 0x02 #define PGA_GAIN_8 0x03 #define PGA_GAIN_16 0x04 #define PGA_GAIN_32 0x05 #define PGA_GAIN_64 0x06 void ADX824_Init(void); void ADX824_WriteCMD(uint8_t CMD); void ADX824_SetReg(uint8_t regAddess,uint8_t *sbuff,uint8_t size); void ADX824_ReadReg(uint8_t regAddess,uint8_t *rbuff,uint8_t size); uint32_t ADX824_ReadValue(void); #endif
类比半导体ADX82X 驱动
#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(); } } }