ADX516兼容SGM58601
/*
Analogysemi xutong
2023/04/20
*/
#include "ADX516.h"
#include "board.h"
#include "bsp_lpspi.h"
#include "rtthread.h"
//初始化ADX516
void ADX516_Init(void)
{
//拉PWDN和RST
}
//獲取芯片的ID號
//Adx516 default Value 0x20
uint8_t ADX516_GetChipID(void)
{
uint8_t ID;
ID=ADX516_GetReg(ADX516_STATUS);
return ID;
}
//獲取芯片寄存器值
uint8_t ADX516_GetReg(uint8_t Rreg)
{
uint8_t TxData[3];
uint8_t RxData[3];
//讀取命令,
TxData[0]=ADX516_RREG|Rreg;
//選擇要讀取的寄存器
TxData[1]=0x00;
//讀取單個寄存器
TxData[2]=0X00;
//開始讀取
Lpspi_Read(3,TxData,RxData);
//返回寄存器值
return RxData[2];
}
//寫單個芯片寄存器值
void ADX516_WriteReg(uint8_t Wreg,uint8_t Data)
{
uint8_t TxData[3];
//寫入命令,
TxData[0]=ADX516_WREG|Wreg;
//選擇要寫入的的寄存器
TxData[1]=0x00;
//讀取寫入寄存器
TxData[2]=Data;
Lpspi_Write(3,TxData);
}
//寫多個芯片寄存器值
//StartReg 起始寄存器地址
//RegNum 要寫的寄存器數量
//*Data 寄存器參數傳入
void ADX516_WriteMultiReg(uint8_t StartReg,uint8_t RegNum,uint8_t *Data)
{
uint8_t TxData[32];
uint8_t i;
//寫入命令,
TxData[0]=ADX516_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 ADX516_ReadMultiReg(uint8_t StartReg,uint8_t RegNum,uint8_t *Data)
{
//讀取寄存器
uint8_t TxData[3];
//讀取命令,
TxData[0]=ADX516_RREG|StartReg;
//選擇要寫入的的寄存器
TxData[1]=RegNum-1;
//最終接收多少個數據
Lpspi_Read(2+RegNum,TxData,Data);
}
//打印所有寄存器地址
void ADX516_GetAllReg(void)
{
uint8_t i,j;
for(i=0;i< 20;i++)
{
j=ADX516_GetReg(i);
//打印所有寄存器值
rt_kprintf("reg addr hex: %x reg default Value: %xrn",i,j);
}
}
//發送ADX516 數據指令 如SDATAC或者RDATAC
//詳情見頭文件command define部分
void ADX516_Command(uint8_t Com)
{
uint8_t TxData[]={Com};
Lpspi_Write(1,TxData);
}
//設定通道并且獲取adc數據
//獲取ADC的值
void ADX516_GetADC_Value(uint8_t Ch,uint8_t *Rxdata)
{
uint8_t TxData[]={ADX516_RDATA};
ADX516_Command(ADX516_SDATAC);
ADX516_WriteReg(ADX516_MUX,Ch< 4|0X0F);
ADX516_Command(ADX516_SYNC);
ADX516_Command(ADX516_WAKEUP);
//rt_thread_mdelay(1);
Lpspi_Read(4,TxData,Rxdata);
}
/*
Analogysemi xutong
2023/02/15
*/
#ifndef __ADX516_H
#define __ADX516_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的時序并不一定滿足ADX516的配置,以下配置經過驗證
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 ADX516_WAKEUP 0x00
#define ADX516_RDATA 0x12
#define ADX516_RDATAC 0x10
#define ADX516_SDATAC 0x11
#define ADX516_RREG 0x10
#define ADX516_WREG 0X50
#define ADX516_SELFCAL 0XF0
#define ADX516_SELFOCAL 0XF1
#define ADX516_SELFGCAL 0XF2
#define ADX516_SYSOCAL 0XF3
#define ADX516_SYSGCAL 0XF4
#define ADX516_SYNC 0XFC
#define ADX516_STANDBY 0xFD
#define ADX516_RESET 0xFE
//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 ADX516_STATUS 0x00
#define ADX516_MUX 0x01
#define ADX516_ADCON 0x02
#define ADX516_DRATE 0x03
#define ADX516_IO 0x04
#define ADX516_OFC0 0x05
#define ADX516_OFC1 0x06
#define ADX516_OFC2 0x07
#define ADX516_FSC0 0x08
#define ADX516_FSC1 0x09
#define ADX516_FSC2 0x0A
#define ADX516_CFG0 0x0B
#define ADX516_CFG1 0x0C
#define ADX516_CFG2 0x0D
#define ADX516_CFG3 0x0E
#define ADX516_CFG4 0x0F
#define ADX516_CFG5 0x10
#define ADX516_DEV_CFG 0x11
#define ADX516_MOD_STAT 0x12
#define ADX516_DEV_STAT 0x13
#define ADX516_CMD_STAT 0x14
/*
通道配置
channel config
*/
#define ADX516_ADC_CH0
//寫命令
void ADX516_Command(uint8_t Com);
//獲取芯片的ID號
uint8_t ADX516_GetChipID(void);
//獲取寄存器值
uint8_t ADX516_GetReg(uint8_t Rreg);
//獲取多個寄存器值
void ADX516_ReadMultiReg(uint8_t StartReg,uint8_t RegNum,uint8_t *Data);
//寫入寄存器值
void ADX516_WriteReg(uint8_t Wreg,uint8_t Data);
//寫多個寄存器的值
void ADX516_WriteMultiReg(uint8_t StartReg,uint8_t RegNum,uint8_t *Data);
//獲取所有寄存器值
void ADX516_GetAllReg(void);
//設定通道并且獲取ADC的值
void ADX516_GetADC_Value(uint8_t Ch,uint8_t *Rxdata);
//初始化ADX516
void ADX516_Init(void);
#endif
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
寄存器
+關注
關注
31文章
5361瀏覽量
120873 -
SGM
+關注
關注
0文章
5瀏覽量
10600 -
RST
+關注
關注
0文章
31瀏覽量
7409 -
ADC采樣
+關注
關注
0文章
134瀏覽量
12881
發布評論請先 登錄
相關推薦
BBkey80:由XIAO RP2040驅動的GL516兼容鍵盤
電子發燒友網站提供《BBkey80:由XIAO RP2040驅動的GL516兼容鍵盤.zip》資料免費下載
發表于 10-19 09:22
?0次下載
MAX516BENG+ 線性 - 比較器
電子發燒友網為你提供Maxim(Maxim)MAX516BENG+相關產品參數、數據手冊,更有MAX516BENG+的引腳圖、接線圖、封裝手冊、中文資料、英文資料,MAX516BENG+真值表,MAX
發表于 11-25 20:25
MAX516ACWG+ 線性 - 比較器
電子發燒友網為你提供Maxim(Maxim)MAX516ACWG+相關產品參數、數據手冊,更有MAX516ACWG+的引腳圖、接線圖、封裝手冊、中文資料、英文資料,MAX516ACWG+真值表,MAX
發表于 11-25 20:29
MAX516AENG 線性 - 比較器
電子發燒友網為你提供Maxim(Maxim)MAX516AENG相關產品參數、數據手冊,更有MAX516AENG的引腳圖、接線圖、封裝手冊、中文資料、英文資料,MAX516AENG真值表,MAX
發表于 11-25 20:44
MAX516BCWG 線性 - 比較器
電子發燒友網為你提供Maxim(Maxim)MAX516BCWG相關產品參數、數據手冊,更有MAX516BCWG的引腳圖、接線圖、封裝手冊、中文資料、英文資料,MAX516BCWG真值表,MAX
發表于 11-25 20:45
MAX516BENG 線性 - 比較器
電子發燒友網為你提供Maxim(Maxim)MAX516BENG相關產品參數、數據手冊,更有MAX516BENG的引腳圖、接線圖、封裝手冊、中文資料、英文資料,MAX516BENG真值表,MAX
發表于 11-25 20:45
如何編寫ADX122驅動程序?
大概是能看的出來兼容adx112的,采用的是spi的接口,在這個章節我們主要講是如何編寫驅動程序,所以先跳過一些重要信息。
發表于 08-02 14:59
?1191次閱讀
最大516個 ADI
電子發燒友網為你提供ADI(ADI)最大516個相關產品參數、數據手冊,更有最大516個的引腳圖、接線圖、封裝手冊、中文資料、英文資料,最大516個真值表,最大516個管腳等資料,希望
發表于 10-11 19:09
評論