/* analogysemi xutong 2023/02/15*/#include adx3208.h#include board.h#include bsp_lpspi.h#include rtthread.h//初始化adx3208void adx3208_init(void){// start_l;// xtal_h;// pwdn_h;// rst_h;// rt_thread_mdelay(150);// rst_l;// rt_thread_mdelay(1);// rst_h;}//获取芯片的id号uint8_t adx3208_getchipid(void){ uint8_t id; id=adx3208_getreg(adx3208_id); return id;}//获取芯片寄存器值uint8_t adx3208_getreg(uint8_t rreg){ uint8_t txdata[3]; uint8_t rxdata[3]; //读取命令, txdata[0]=adx3208_rreg|rreg; //选择要读取的寄存器 txdata[1]=0x00; //读取单个寄存器 txdata[2]=0x00; //开始读取 lpspi_read(3,txdata,rxdata); //返回寄存器值 return rxdata[2];}//写单个芯片寄存器值void adx3208_writereg(uint8_t wreg,uint8_t data){ uint8_t txdata[3]; //写入命令, txdata[0]=adx3208_wreg|wreg; //选择要写入的的寄存器 txdata[1]=0x00; //读取写入寄存器 txdata[2]=data; lpspi_write(3,txdata);}//写多个芯片寄存器值//startreg 起始寄存器地址//regnum 要写的寄存器数量//*data 寄存器参数传入void adx3208_writemultireg(uint8_t startreg,uint8_t regnum,uint8_t *data){ uint8_t txdata[32]; uint8_t i; //写入命令, txdata[0]=adx3208_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 adx3208_readmultireg(uint8_t startreg,uint8_t regnum,uint8_t *data){ //读取寄存器 uint8_t txdata[3]; //读取命令, txdata[0]=adx3208_rreg|startreg; //选择要写入的的寄存器 txdata[1]=regnum-1; //最终接收多少个数据 lpspi_read(2+regnum,txdata,data);}//打印所有寄存器地址void adx3208_getallreg(void){ uint8_t i,j; for(i=0;i< 24;i++) { j=adx3208_getreg(i); //打印所有寄存器值 //rt_kprintf(reg addr: %d reg default value: %xrn,i,j); }}//发送adx3208 数据指令 如sdatac或者rdatac//详情见头文件command define部分void adx3208_command(uint8_t com){ uint8_t txdata[]={com}; lpspi_write(1,txdata);}//获取adc的值 //数据一共216位 / 152位//24位状态位 1100 faultstatusp[7:0] faultstatusn[7:0] gpio[7:4]//8通道*adc位数 数据void adx3208_getadc_value(uint8_t adc_resolution,uint8_t *rxdata){ if (adc_resolution==16) { lpspi_read(152,null,rxdata); } else { lpspi_read(216,null,rxdata); }}以上是.c文件
/* analogysemi xutong 2023/02/15*/#ifndef __adx3208_h#define __adx3208_h#include bsp_lpspi.h/* device 需要先写入sdtac 启动寄存器写入才可以对寄存器进行操作 在此之前需要检查pwdn以及reset引脚的状态是否为 高 在操作完寄存器后,需要发送rdatac 才能连续 读取数据 bsp_lpspi 的接口函数如下: lpspi_write(uint8_t datasize,uint8_t *data); lpspi_read(uint8_t datasize,uint8_t *data,uint8_t *rxdata); 注意: lpspi的时序并不一定满足adx3208的配置,以下配置经过验证 lpspi_master_config_t config; lpspi_mastergetdefaultconfig(&config); config.whichpcs=klpspi_pcs0; config.baudrate=50000; config.betweentransferdelayinnanosec = 1000000000 /500; config.pcstosckdelayinnanosec=1000000000 /500; config.lastscktopcsdelayinnanosec=1000000000 /500; config.cpha=klpspi_clockphasesecondedge; lpspi_masterinit(lpspi3, &config, lpspi3_clock_freq);*//*command define*/#define adx3208_wakeup 0x20#define adx3208_standby 0x04#define adx3208_reset 0x06#define adx3208_start 0x08#define adx3208_stop 0x0a#define adx3208_offsetcal 0x1a#define adx3208_rdatac 0x10#define adx3208_sdatac 0x11#define adx3208_rdata 0x12//rreg read n nnnn registers starting at address r rrrr //first byte 001r rrrr (2xh)//second byte 000n nnnn //n nnnn = number of registers to be read or written – 1. for example, to read or write three registers, set n nnnn = 0 (0010). r rrrr = the//starting register address for read and write commands//wreg 同上#define adx3208_rreg 0x20#define adx3208_wreg 0x40/* 寄存器定义*/#define adx3208_id 0x00#define adx3208_config1 0x01#define adx3208_config2 0x02#define adx3208_config3 0x03#define adx3208_loff 0x04#define adx3208_ch1set 0x05#define adx3208_ch2set 0x06#define adx3208_ch3set 0x07#define adx3208_ch4set 0x08#define adx3208_ch5set 0x09#define adx3208_ch6set 0x0a#define adx3208_ch7set 0x0b#define adx3208_ch8set 0x0c#define adx3208_opamp_sensp 0x0d#define adx3208_opamp_sensn 0x0e#define adx3208_loff_sensp 0x0f#define adx3208_loff_sensn 0x10#define adx3208_loff_flip 0x11#define adx3208_loff_statp 0x12#define adx3208_loff_statn 0x13#define adx3208_gpio 0x14/* 寄存器deafult 值 寄存器地址10进制:寄存器值16进制: reg addr: 0 reg default value: 0e reg addr: 1 reg default value: 91 reg addr: 2 reg default value: e0 reg addr: 3 reg default value: 40 reg addr: 4 reg default value: 00 reg addr: 5 reg default value: 10 reg addr: 6 reg default value: 10 reg addr: 7 reg default value: 10 reg addr: 8 reg default value: 10 reg addr: 9 reg default value: 10 reg addr: 10 reg default value: 10 reg addr: 11 reg default value: 10 reg addr: 12 reg default value: 10 reg addr: 13 reg default value: 00 reg addr: 14 reg default value: 00 reg addr: 15 reg default value: 00 reg addr: 16 reg default value: 00 reg addr: 17 reg default value: 00 reg addr: 18 reg default value: 00 reg addr: 19 reg default value: 00 reg addr: 20 reg default value: 0f reg addr: 21 reg default value: 00 reg addr: 22 reg default value: 00 reg addr: 23 reg default value: 00*/#define adx3208_adc_resolution_16 16#define adx3208_adc_resolution_24 24//写命令void adx3208_command(uint8_t com);//获取芯片的id号uint8_t adx3208_getchipid(void);//获取寄存器值uint8_t adx3208_getreg(uint8_t rreg);//获取多个寄存器值void adx3208_readmultireg(uint8_t startreg,uint8_t regnum,uint8_t *data);//写入寄存器值void adx3208_writereg(uint8_t wreg,uint8_t data);//写多个寄存器的值void adx3208_writemultireg(uint8_t startreg,uint8_t regnum,uint8_t *data);//获取所有寄存器值void adx3208_getallreg(void);//获取adc的值void adx3208_getadc_value(uint8_t adc_resolution,uint8_t *rxdata);//初始化adx3208void adx3208_init(void);#endif以上是.h文件
小米发布了首款5G手机——小米9 Pro
捷杰传感勇于创新,解决应用痛点!
超级电容器电路设计
晶体管电路设计
专为纯电动汽车平台设计的800V碳化硅高压逆变器
ADX3208驱动基于RT1052的方法
小米将占据印度智能手机市场,代替三星“一哥”地位
光时域反射仪(OTDR)的基础知识
TI MSP430F22xx系列的主要特性及无线RFID开发方案
如何有效的监管数字货币
ZC-2-10A自动充电机,ZC-2-10A automatic charger
AI将会助力哪些新兴企业布局人工智能
STM32F4_TIM输入波形捕获 (脉冲频率)
一文弄懂热力膨胀阀该如何选择
为什么电工会觉得PLC控制柜比继电器控制柜的的故障处理要难?
华为或年底推出搭载鸿蒙操作系统的手机
iphone桌面程序打开立刻退出
电路板电容检测方法
iPhone6Plus拆解评测 相比iPhone5s显得没有那么精致
Iphone12跌至官网最低价现在入手性价比真的想