AD773X是AD模拟公司出的一款24bit高精度的模拟信号采集芯片,该芯片可以同时采集8路模拟信号,通过SPI接口的方式几乎可以与所有的mcu处理器通信,本人多个项目用到此模拟芯片,驱动代码如下,与大家分享。
1,SPI驱动
首先要初始化SPI驱动,MCU的任一个SPI都可以使用。以stm32驱动为例
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOB时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE);//使能SPI1时钟
//GPIOFB3,4,5初始化设置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;//PB3~5复用功能输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化
2,AD773X驱动
头文件定义所有寄存器和寄存器访问位
/*AD7739 Registers*/
#define AD7739_REG_COMM 0x00 /* Communications Register (W, 8-bit) */
#define AD7739_REG_IO 0x01 /* I/P Port register (RW, 8-bit */
#define AD7739_REG_REV 0x02 /* Revision Register (R, 8-bit) */
#define AD7739_REG_TEST 0x03 /* Test Register (RW, 24-bit)*/
#define AD7739_REG_STATUS 0x04 /* ADC Status Register (R, 8-bit) */
#define AD7739_REG_CKS 0x05 /* Checksum Register (RW, 16-bit)*/
#define AD7739_REG_ZSCAL 0x06 /* ADC Zero-Scale Calibration Register (RW, 24-bit)*/
#define AD7739_REG_FS 0x07 /* Full-Scale Register (RW, 24-bit */
#define AD7739_REG_CH1_DATA 0x08 /* CH1 data Register (R, 24-bit)*/
#define AD7739_REG_CH2_DATA 0x09 /* CH2 data Register (R, 24-bit)*/
#define AD7739_REG_CH3_DATA 0x0A /* CH3 data Register (R, 24-bit)*/
#define AD7739_REG_CH4_DATA 0x0B /* CH4 data Register (R, 24-bit)*/
头文件函数原型定义
/* Initialize AD7739 and check if the device is present*/
unsigned char AD7739_Init(void);
/* Sends 32 consecutive 1's on SPI in order to reset the part. */
void AD7739_Reset(void);
/* Reads the value of the selected register. */
unsigned long AD7739_GetRegisterValue(unsigned char regAddress,
unsigned char size);
/* Writes a value to the register. */
void AD7739_SetRegisterValue(unsigned char regAddress,
unsigned long regValue,
unsigned char size);
/* Sets the operating mode of AD7739. */
void AD7739_Setup(void);
/* Reads /RDY bit of Status register. */
unsigned char AD7739_Ready(char ch);
各位读者,代码系本人原创,耗费了不少心血,如需完整驱动代码,与本人联系扣扣: 48445803。