AD 7192 ---- 基于寄存器

片内寄存器

通信寄存器

(RS2, RS1, RS0 = 0, 0, 0)

通信寄存器是一个 8 位只写寄存器。 与该器件的所有通信均必须以对通信寄存器的写操作开始。 写入通信寄存器的数据决定下一个操作是读操作还是写操作, 以及此操作发生在哪一个寄存器。 对于读或写操作, 当随后对选定寄存器的读或写操作完成后, 接口返回到期待对通信寄存器执行写操作的状态。 这是接口的默认状态, 而且在上电时或复位后, ADC 处于此默认状态, 等待对通信寄存器的写操作。 如果接口时序丢失, 执行一个占用至少 40 个串行时钟周期的写操作, 并使 DIN 处于高电平状态, 将可以复位整个器件, 使 ADC 返回此默认状态。 表 14 列出了通信寄存器各位的名称和意义。 CR0 至 CR7 表示位的位置, CR 说明这些位属于通信寄存器。 CR7 表示数据流的第一位。 括号中的数值表示该位的上电 / 复位默认状态。

CR7CR6CR5CR4CR3CR2CR1CR0
WEN(0)R/W(0)RS2(0)RS1(0)RS0(0)CREAD(0)0(0)0(0)

表 14. 通信寄存器位功能描述

位的位置位的名称描述
CR7WEN写入使能位。 必须将 0 写入此位, 才能对通信寄存器执行写操作。 如果第一位写入 1, 则器件不会将后续位载入寄存器, 而是停留在此位的位置, 直到此位写入 0。 将 0 写入 WEN 位后, 器件便会将 后续 7 位载入通信寄存器。 在两次数据传输之间将 DIN 引脚置为高电平, 可以最大程度地降低杂散 SCLK 脉冲对串行接口的影响。
CR6R/W如果此位为 0, 则表示下一个操作是对指定寄存器执行写操作。 如果此位为 1, 则表示下一个操作是 对指定寄存器执行读操作。
CR5 至 CR3RS2 至 RS0寄存器地址位。 这些地址位决定串行接口通信期间选择 ADC 的哪些寄存器(见表 15)。
CR2CREAD连续读取数据寄存器。 当此位为 1(并且已选择数据寄存器) 时, 串行接口可以连续读取数据寄存器; 即在 RDY 引脚变为低电平(表示转换已完成) 后施加 SCLK 脉冲时, 数据寄存器的内容将自动置于 DOUT 引脚上。 对于后续数据读取, 不必对通信寄存器执行写操作。 要使能连续读取模式, 必须将指 令 01011100 写入通信寄存器。 要禁用连续读取模式, 必须在 RDY 引脚为低电平时将指令 01011000 写入通信寄存器。 使能连续读取后, ADC 将监控 DIN 线路上的活动, 以便能接收指令以禁用连续读取。 此外, 如果 DIN 上连续出现 40 个 1, ADC 将复位。 因此, DIN 应保持低电平, 直到有指令将要写入 该器件。
CR1 至 CR00必须将这些位编程为逻辑 0 才能正常工作。

表 15. 寄存器选择

RS2RS1RS0寄存器寄存器大小
000写操作期间为通信寄存器8 位
000读操作期间为状态寄存器8 位
001模式寄存器24 位
010配置寄存器24 位
011数据寄存器 / 数据寄存器加状态信息24 位 /32 位
100ID 寄存器8 位
101GPOCON 寄存器8 位
110失调寄存器24 位
111满量程寄存器24 位
/*---------------------------------通信寄存器 (8位)---------------------------------*/
#define	WEN				0x00	//写使能	
#define WEN_DIS			0x80	//写禁止
#define RW_W			0x00	//对指定寄存器执行写操作
#define	RW_R			0x40	//对指定寄存器执行读操作
#define	CREAD_EN		0x04	//连续读取使能
#define	CREAD_DIS		0x00	//连续读取禁止

//RS2 - RS0  寄存器地址位,决定串行接口通信期间选择 ADC 的哪些寄存器
#define REG_COM_STA		0x00	//写操作期间为通信寄存器,读操作期间为状态寄存器 
#define	REG_MODE		0x01	//模式寄存器  
#define	REG_CONF		0x02	//配置寄存器  
#define	REG_DATA		0x03	//数据寄存器 / 数据寄存器加状态信息  
#define	REG_ID			0x04	//ID 寄存器 
#define	REG_GPOCON		0x05	//GPOCON 寄存器 
#define	REG_OFFSET		0x06	//失调寄存器 
#define	REG_FS			0x07	//满量程寄存器 

状态寄存器

(RS2, RS1, RS0 = 0, 0, 0; 上电 / 复位 = 0x80)
状态寄存器是一个 8 位只读寄存器。 要访问 ADC 状态寄存器, 用户必须写入通信寄存器, 选择下一个操作为读操作, 并将 0 载入
位 RS2、 位 RS1 和位 RS0。 表 16 列出了状态寄存器各位的名称和意义。 SR0 至 SR7 表示位的位置, SR 说明这些位属于状态寄存器。
SR7 表示数据流的第一位。 括号中的数值表示该位的上电 / 复位默认状态。

SR7SR6SR5SR4SR3SR2SR1SR0
RDY(1)ERR(0)NOREF(0)PARITY(0)0(0)CHD2(0)CHD1(0)CHD0(0)

表 16. 状态寄存器位功能描述

位的位置位的名称描述
SR7RDYADC 就绪位。 数据写入 ADC 数据寄存器后此位清 0。读取 ADC 数据寄存器之后, 或者在用新转换结 果更新数据寄存器之前的一定时间内, RDY 位自动置 1, 以告知用户不应读取转换数据。 将器件置于 关断模式或空闲模式时, 或者当 SYNC 变为低电平时, 此位也会置 1。 DOUT/RDY 引脚也会指示转换何时结束。 该引脚可以代替状态寄存器来监视 ADC 有无转换数据。
SR6ERRADC 错误位。 此位与 RDY 位同时写入。 如果此位置 1, 则说明写入 ADC 数据寄存器的结果箝位为全 0 或全 1。 错误源包括超量程、 欠量程或缺少基准电压。 如果写入数据寄存器的结果再次回到容许的 模拟输入范围内, 则此位清 0。
SR5NOREF无外部基准电压位。 如果此位置1, 则说明选定的基准电压(REFIN1或REFIN2)低于规定的阈值。 置1后, 转换结果箝位为全 1。 如果此位清 0, 则说明对选定的基准电压引脚施加了有效基准电压。 将配置寄 存器中的 REFDET 位置 1 可使能 NOREF 位。
SR4PARITY数据寄存器的奇偶校验。 如果模式寄存器中的 ENPAR 位置 1, 并且数据寄存器中有奇数个 1, 则 PARITY 位置 1。 如果数据寄存器中有偶数个 1, 则此位清 0。 使用奇偶校验时, 模式寄存器中的 DAT_STA位应置1。 DAT_STA位置1后, 状态寄存器的内容将与每次从数据寄存器读取的数据一同传输。
SR30此位置 0。
SR2 至 SR0CH2 至 CH0这些位指示哪一通道对应数据寄存器的内容。 这些位不是指示目前正在转换哪一通道, 而是指示产生数据寄存器所含转换结果时选定了哪一通道。
/*--------------------------------状态寄存器 (8位只读寄存器)-------------------------------*/
#define	RDY_H		      0x80		//写入ADC数据寄存器后清 0
#define	RDY_L		      0x00		//读取ADC数据寄存器后清 1
#define	ERR_H		      0x40		//ADC 错误位
#define	ERR_L		      0x00		//ADC 错误位
#define	NOREF_H		      0x20		//无外部基准电压位
#define	NOREF_L		      0x00		//无外部基准电压位
#define	PARITY_H		  0x10		//数据寄存器的奇偶校验
#define	PARITY_L		  0x00		//数据寄存器的奇偶校验
//SR2 - SR0 指示产生数据寄存器所含转换结果时选定了哪一通道
#define	CHDST_AIN1_AIN2	  0x00		//一路差分
#define	CHDST_AIN3_AIN4	  0x01		//二路差分
#define	CHDST_TEMP		  0x02		//内部温度
#define	CHDST_AIN2_AIN2	  0x03		//?
#define	CHDST_AIN1_COM	  0x04		//一路伪差分
#define	CHDST_AIN2_COM	  0x05		//二路伪差分
#define	CHDST_AIN3_COM	  0x06		//三路伪差分
#define	CHDST_AIN4_COM	  0x07		//四路伪差分

模式寄存器

(RS2, RS1, RS0 = 0, 0, 1; 上电 / 复位 = 0x080060)
模式寄存器是一个 24 位寄存器, 可以从中读取数据, 也可以将数据写入其中。 此寄存器用来选择工作模式、 输出数据速率和时钟源。 表 17 列出了模式寄存器各位的名称和意义。 MR0 至 MR23 表示位的位置, MR 说明这些位属于模式寄存器。 MR23 表示数据流的第一位。 括号中的数值表示该位的上电 / 复位默认状态。 只要对模式寄存器执行写操作, 就会复位调制器和滤波器,并将 RDY 位置 1。

MR23MR22MR21MR20MR19MR18MR17MR16
MD2(0)MD1(0)MD0(0)DAT_STA(0)CLK1(1)CLK0(0)00
MR15MR14MR13MR12MR11MR10MR9MR8
SINC3(0)0ENPAR(0)CLK_DIV(0)SINGLE(0)REJ60(0)FS9(0)FS8(0)
MR7MR6MR5MR4MR3MR2MR1MR0
FS7(0)FS6(1)FS5(1)FS4(0)FS3(0)FS2(0)FS1(0)FS0(0)

表 17. 模式寄存器位功能描述

位的位置位的名称描述
MR23 至 MR21MD2 至 MD0模式选择位。 这些位选择 AD7192 的工作模式(参见表 18)。
MR20DAT_STA此位使能每次数据寄存器读操作之后传输状态寄存器内容。DAT_STA 置 1 后, 状态寄存器的内容将与每次从数据寄存器读取的数据一同传输。此功能在选定多个通道的情况下很有用,因为状态寄存器可确定哪一通道与数据寄存器值对应。
MR19, MR18CLK1, CLK0这些位用来选择 AD7192 的时钟源。 可以使用片内 4.92 MHz 时钟或外部时钟。 使用外部 时钟时,多个 AD7192 器件可以同步。 此外, 当采用精确的外部时钟驱动 AD7192 时,可以改善 50 Hz/60 Hz 抑制性能。
CLK1CLK0ADC 时钟源
00外部晶振。外部晶振是从 MCLK1 连至 MCLK2。
01外部时钟。外部时钟施加于 MCLK2 引脚。
104.92 MHz 内部时钟。MCLK2 引脚为三态。
114.92 MHz 内部时钟。内部时钟可从 MCLK2 获得。
MR17, MR160必须将这些位编程为逻辑 0 才能正常工作。
MR15SINC3Sinc3 滤波器选择位。 当此位清 0 时, 使用 sinc4 滤波器(默认值)。 当此位置 1 时, 使用 sinc3 滤波器。
MR140必须将此位编程为逻辑 0 才能正常工作。
MR13ENPAR使能奇偶校验位。 ENPAR 置 1 时, 使能对数据寄存器的奇偶校验。 使用奇偶校验时,模式寄存器中的 DAT_STA 位应置 1。 DAT_STA 位置 1 后, 状态寄存器的内容将与每次从数 据寄存器读取的数据一同传输。
MR12CLK_DIV时钟 2 分频。 CLK_DIV 置 1 时, 主时钟 2 分频。 正常转换时, 此位应设置为 0。 执行内部满量程校准时, 如果 AVDD 小于 4.75 V, 此位必须置 1。 执行校准时, 使能斩波并使用较低的输出数据速率可以优化校准精度。 如果 AVDD 大于或等于 4.75 V, 执行内部满量程校准时不要求将 CLK_DIV 位置 1。
MR11SINGLE单周期转换使能位。 此位置 1 时, AD7192 在一个转换周期内建立, 以便用作零延迟 ADC。 如果使能多个模拟输入通道, 或者选择单次转换模式, 则此位无作用。
MR10REJ60当 sinc 滤波器的第一陷波频率为 50 Hz 时, 此位可使能一个 60 Hz 的陷波频率。 当 sinc 滤波器的第一陷波频率为 50 Hz 时, REJ60 置 1 将使滤波器获得一个 60 Hz 的陷波频率, 从而实现 50 Hz/60 Hz 同时抑制。
MR9 至 MR0FS9 至 FS0滤波器输出数据速率选择位。 这 10 位数据决定滤波器截止频率、 滤波器第一陷波频率的 位置以及器件的输出数据速率。 它们还与增益选择一起决定器件的输出噪声(因而也决 定了有效分辨率,参见表 6 至表 13)。禁用斩波并选择连续转换模式时, 输出数据速率 = (MCLK/1024)/FS 其中 FS 为 FS0 至 FS9 位中代码的十进制等效值, 其范围是 1 至 1023;MCLK 为主时钟频率。对于 4.92 MHz 标称 MCLK, 由上式可得知输出数据速率范围是 4.69 Hz 至 4.8 kHz。禁用 斩波并且在单一通道上转换时, 滤波器第一陷波频率等于输出数据速率。 使能斩波时, 输出数据速率 = (MCLK/1024)/(N × FS) 其中 FS 为 FS0 至 FS9 位中代码的十进制等效值, 其范围是 1 至 1023;MCLK 为主时钟频率。 对于 4.92 MHz 标称 MCLK, 由上式可得知转换速率范围是 4.69/N Hz 至 4.8/N kHz, 其中 N 为 sinc 滤波器的阶数。 sinc 滤波器的第一陷波频率等于(N x 输出数据速率)。 斩波引入 的陷波频率为(输出数据速率 /2) 的奇数倍。

表 18. 工作模式

MD2MD1MD0模式
000连续转换模式(默认)
001单次转换模式
010空闲模式
011关断模式
100内部零电平校准
101内部满量程校准
110系统零电平校准
111系统满量程校准
/*---------------------------------模式寄存器 (24位读写寄存器)---------------------------------*/
//MD2 - MD1	模式选择位
#define	MODE_CONT				    0x000000    //连续转换模式(默认)
#define	MODE_SING				    0x200000    //单次转换模式
#define	MODE_IDLE				    0x400000    //空闲模式
#define	MODE_PD					    0x600000    //关断模式
#define	MODE_INZCL				    0x800000    //内部零电平校准
#define	MODE_INFCL				    0xA00000    //内部满量程校准
#define	MODE_SYSZCL				    0xC00000    //系统零电平校准
#define	MODE_SYSFCL				    0xE00000    //系统满量程校准

#define	DAT_STA_EN				    0x100000    //状态/数据寄存器读取的数据一同传输
#define	DAT_STA_DIS				    0x000000	//参考EN

//CLK1 - CLK0 	ADC 时钟源
#define	EXT_XTAL				    0x000000    //外部晶振
#define	EXT_CLK					    0x040000    //外部时钟
#define	INCLK_MCLK2TRI				0x080000    //4.92 MHz 内部时钟
#define	INCLK_MCLK2EN			    0x0C0000    //4.92 MHz 内部时钟

#define	SINC_4					    0x000000    //选择Sinc4 滤波器(默认值)
#define	SINC_3					    0x008000    //选择Sinc3 滤波器
#define	ENPAR_EN				    0x002000    //使能奇偶校验
#define	ENPAR_DIS				    0x000000    //失能奇偶校验
#define	CLK_DIV_2				    0x001000    //主时钟 2 分频
#define	CLK_DIV_DIS				    0x000000    //主时钟不分频
#define	SINGLECYCLE_EN				0x000800	//使能单周期转换
#define	SINGLECYCLE_DIS				0x000000	//失能单周期转换
#define	REJ60_EN				    0x000400    //使能60Hz的陷波频率,实现50Hz/60Hz同时抑制
#define	REJ60_DIS				    0x000000    //失能60Hz的陷波频率

//FS9 - FS0 	滤波器输出数据速率选择位			咱不讨论,可看手册

配置寄存器

(RS2, RS1, RS0 = 0, 1, 0; 上电 / 复位 = 0x000117)
配置寄存器是一个 24 位寄存器, 可以从中读取数据, 也可以将数据写入其中。 此寄存器用来配置 ADC 的单极性或双极性模式,
使能或禁用缓冲器, 使能或禁用激励电流, 选择增益, 以及选择模拟输入通道。
表 19 列出了配置寄存器各位的名称和意义。 CON0 至 CON23 表示位的位置, CON 说明这些位属于配置寄存器。 CON23 表示
数据流的第一位。 括号中的数值表示该位的上电 / 复位默认状态。

CON23CON22CON21CON20CON19CON18CON17CON16
CHOP(0)0(0)0(0)REFSEL(0)0(0)0(0)0(0)(0)
CON15CON14CON13CON12CON11CON10CON9CON8
CH7(0)CH6(0)CH5(0)CH4(0)CH3(0)CH2(0)CH1(0)CH0(1)
CON7CON6CON5CON4CON3CON2CON1CON0
BURN(0)REFDET(0)0(0)BUF(1)U/(0) BG2(1)G1(1)G0(1)

表 19. 配置寄存器位功能描述

位的位置位的名称描述
CON23CHOP斩波使能位。 CHOP 位清 0 时, 斩波禁用。 置 1 时, 斩波使能。低增益时, 可能需要定期执行校准, 以消除失调和失调漂移。
CON22, CON210必须将这些位编程为逻辑 0 才能正常工作。
CON20REFSEL基准电压选择位。 这些位用来选择 ADC 的基准电压源。
REFSEL基准电压
0在 REFIN1(+) 与 REFIN1( - ) 之间施加的外部基准电压
1在 P1/REFIN2(+) 与 P0/REFIN2( - ) 之间施加的外部基准电压。
CON19 至 CON160必须将这些位编程为逻辑 0 才能正常工作。
CON15 至 CON8CH7 至 CH0通道选择位
CON7BURN此位置 1 将使能信号路径中的 500 nA 电流源。 BURN = 0 将禁用激励电流。
CON6REFDET使能基准电压检测功能。 置 1 时, 如果 ADC 所用的外部基准电压开路或小于 0.6 V(最大 值), 状态寄存器中的 NOREF 位将给出提示。 基准电压检测电路仅在 ADC 有效时工作。
CON50必须将此位编程为逻辑 0 才能正常工作。
CON4BUF使能模拟输入端的缓冲器。 清 0 时, 模拟输入不进行缓冲, 可降低器件的功耗。 此位置 1 时, 模拟输入进行缓冲, 用户可以将源阻抗置于前端, 而不会给系统带来增益误差。 缓 冲器禁用时, 模拟输入引脚上的电压可以为 AGND 以下 50 mV 至 AVDD 以上 50 mV。 缓冲 器使能时, 它需要一些裕量; 因此, 任何输入引脚上的电压必须在电源轨的 250 mV 范围内。
CON3U/B极性选择位。 此位置 1 时, 选择单极性工作模式。 此位清 0 时, 选择双极性工作模式。
CON2 至 CON0G2 至 G0增益选择位。 这些位由用户写入, 以便选择下列 ADC 输入范围之一 :

增益选择位及通道选择位参照数据手册

/*---------------------------------配置寄存器 (24位读写寄存器)---------------------------------*/	             
#define CHOP_EN					  0x800000		//斩波使能
#define	CHOP_DIS				  0x000000		//斩波禁用

#define	REF_IN1					  0x000000		//基准电压选择位    REFIN1(+) 与 REFIN1( - )
#define	REF_IN2					  0x100000		//基准电压选择位    REFIN2(+) 与 REFIN2( - ) 

//CON22, CON21  必须置0
//CON19 - CON16  必须置0

//CH7 - CH0  通道选择位
#define	AIN1_AIN2				  0x000100		//(AIN+)AIN1 (AIN-)AIN2   
#define	AIN3_AIN4				  0x000200		//(AIN+)AIN3 (AIN-)AIN4   
#define	TEMP					  0x000400		//温度传感器 
#define	AIN2_AIN2				  0x000800		//(AIN+)AIN2 (AIN-)AIN2  ????? 
#define	AIN1_COM				  0x001000		//(AIN+)AIN1 (AIN-)AINCOM   
#define	AIN2_COM				  0x002000		//(AIN+)AIN2 (AIN-)AINCOM   
#define	AIN3_COM				  0x004000		//(AIN+)AIN3 (AIN-)AINCOM   
#define	AIN4_COM				  0x008000		//(AIN+)AIN4 (AIN-)AINCOM   

#define	BURN_EN					  0x000080		//使能激励电流   
#define	BURN_DIS				  0x000000		//禁用激励电流
#define	REFDET_EN				  0x000040		//使能基准电压检测功能   
#define	REFDET_DIS				  0x000000		//禁用基准电压检测功能     
#define	BUF_EN					  0x000010		//使能模拟输入端的缓冲器   
#define	BUF_DIS					  0x000000		//禁用模拟输入端的缓冲器  
#define	UB_UNI					  0x000008		//单极性工作模式   
#define UB_BI					  0x000000		//双极性工作模式 
#define	GAIN_1					  0x000000		//1倍增益(无)
#define	GAIN_8					  0x000003		//8倍增益
#define	GAIN_16					  0x000004		//16倍增益
#define	GAIN_32					  0x000005		//32倍增益
#define	GAIN_64					  0x000006		//64倍增益
#define	GAIN_128				  0x000007		//128倍增益

数据寄存器

(RS2, RS1, RS0 = 0, 1, 1; 上电 / 复位 = 0x000000)
此数据寄存器存储 ADC 的转换结果。 它是一个 24 位只读寄存器。 完成对此寄存器的读操作后, RDY 引脚 / 位置 1。当模式寄存器的 DAT_STA 位置 1 时, 状态寄存器的值会添加到各 24 位转换结果上。 建议在多个模拟输入通道使能时采用这种做法, 因为状态寄存器的三个 LSB(CHD2 至 CHD0) 可确定转换结果的来源通道。

ID 寄存器

(RS2, RS1, RS0 = 1, 0, 0; 上电 / 复位 = 0xX0)
ID 寄存器存储 AD7192 的识别号。 它是一个只读寄存器。

GPOCON 寄存器

(RS2, RS1, RS0 = 1, 0, 1; 上电 / 复位 = 0x00)
GPOCON 寄存器是一个 8 位寄存器, 可以从中读取数据,也可以将数据写入其中。 此寄存器用来使能通用数字输出。表 21 列出了 GPOCON 寄存器各位的名称和意义。 GP0 至 GP7 表示位的位置, GP 说明这些位属于 GPOCON 寄存器。GP7 表示数据流的第一位。 括号中的数值表示该位的上电 /复位默认状态。

GP7GP6GP5GP4GP3GP2GP1GP0
0(0)BPDSW(0)GP32EN(0)GP10EN(0)P3DAT(0)P2DAT(0)P1DAT(0)P0DAT(0)

表 21. 寄存器位功能描述

位的位置位的名称描述
GP70必须将此位编程为逻辑 0 才能正常工作。
GP6BPDSW电桥关断开关控制位。 此位由用户置 1, 以闭合电桥关断开关 BPDSW(与 AGND 相连)。 该开关可提 供 30 mA 的吸电流。 此位由用户清 0, 以断开电桥关断开关。 当 ADC 处于关断模式时, 电桥关断开 关仍然有效。
GP5GP32EN数字输出 P3 和数字输出 P2 使能。 GP32EN 置 1 时, 数字输出 P3 和 P2 为有效状态。 GP32EN 清 0 时, P3 和 P2 引脚为三态, 并且忽略 P3DAT 和 P2DAT 位。
GP4GP10EN数字输出 P1 和数字输出 P0 使能。 GP10EN 置 1 时, 数字输出 P1 和 P0 为有效状态。 GP10EN 清 0 时, P1 和 P0 输出为三态, 并且忽略 P1DAT 和 P0DAT 位。 当配置寄存器中的 REFSEL 位设置为 1 时, P1 和 P0 引脚可以用作 REFIN2 的基准输入。
GP3P3DAT数字输出 P3。 GP32EN 置 1 时, P3DAT 位设置通用输出引脚 P3 的值。 P3DAT 为高电平时, 输出引脚 P3 为高电平。 P3DAT 为低电平时, 输出引脚 P3 为低电平。 读取 GPOCON 寄存器时, 如果 GP32EN 置 1, P3DAT 位将反映 P3 引脚的状态。
GP2P2DAT数字输出 P2。 GP32EN 置 1 时, P2DAT 位设置通用输出引脚 P2 的值。 P2DAT 为高电平时, 输出引脚 P2 为高电平。 P2DAT 为低电平时, 输出引脚 P2 为低电平。 读取 GPOCON 寄存器时, 如果 GP32EN 置 1, P2DAT 位将反映 P2 引脚的状态。
GP1P1DAT数字输出 P1。 GP10EN 置 1 时, P1DAT 位设置通用输出引脚 P1 的值。 P1DAT 为高电平时, 输出引脚 P1 为高电平。 P1DAT 为低电平时, 输出引脚 P1 为低电平。 读取 GPOCON 寄存器时, 如果 GP10EN 置 1, P1DAT 位将反映 P1 引脚的状态。
GP0P0DAT数字输出 P0。 GP10EN 置 1 时, P0DAT 位设置通用输出引脚 P0 的值。 P0DAT 为高电平时, 输出引脚 P0 为高电平。 P0DAT 为低电平时, 输出引脚 P0 为低电平。 读取 GPOCON 寄存器时, 如果 GP10EN 置 1, P0DAT 位将反映 P0 引脚的状态。

失调寄存器

(RS2, RS1, RS0 = 1, 1, 0; 上电 / 复位 = 0x800000)
失调寄存器保存 ADC 的失调校准系数。 失调寄存器的上电复位值为 0x800000。 AD7192 有四个失调寄存器, 各通道均有一个专用失调寄存器(见表 20)。 各寄存器均为 24 位读写寄存器。 该寄存器与相关的满量程寄存器一同使用, 以构成寄存器对。 如果用户启动内部或系统零电平校准, 上电复位值将被自动覆盖。 写入失调寄存器时, AD7192 必须处于关断模式或空闲模式。

满量程寄存器

(RS2, RS1, RS0 = 1, 1, 1; 上电 / 复位 = 0x5XXXX0)
满量程寄存器是一个 24 位寄存器, 用来保存 ADC 的满量程校准系数。 AD7192 有四个满量程寄存器, 各通道均有一个专用满量程寄存器( 见表 20)。 满量程寄存器为读写寄存器。 不过, 写入满量程寄存器时, ADC 必须处于关断模式或空闲模式。 这些寄存器在上电时使用工厂校准的满量程校准系数进行配置(执行校准时的增益为 1) ; 因此, 各器件具有不同的默认系数。 如果用户启动内部或系统满量程校准, 或者写入满量程寄存器, 该默认值将被自动覆盖。

GPIO的工作模式

1、4种输入模式

(1)GPIO_Mode_IN_FLOATING 浮空输入
(2)GPIO_Mode_IPU 上拉输入
(3)GPIO_Mode_IPD 下拉输入
(4)GPIO_Mode_AIN 模拟输入

2、4种输出模式

(5)GPIO_Mode_Out_OD 开漏输出
(6)GPIO_Mode_AF_OD 复用开漏输出
(7)GPIO_Mode_Out_PP 推挽输出(带上拉或者下拉)
(8)GPIO_Mode_AF_PP 复用推挽输出(带上拉或者下拉)
3、4种最大输出速度
(1)2MHZ (低速)
(2)25MHZ (中速)
(3)50MHZ (快速)
(4)100MHZ (高速)

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个基于STM32的AD7172-2芯片的驱动程序,包括初始化、读取采样数据等基本操作。 1. 初始化程序: void init_AD7172(void) { /* 设置IO口 */ GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA, &GPIO_InitStructure); /* 复位 */ AD7172_SYNC_LOW(); AD7172_DELAY(); AD7172_SYNC_HIGH(); AD7172_DELAY(); AD7172_SYNC_LOW(); AD7172_DELAY(); /* 写入配置寄存器 */ AD7172_WRITE_REG(AD7172_REG_MODE, AD7172_MODE_REG); AD7172_WRITE_REG(AD7172_REG_CONFIG, AD7172_CONFIG_REG); AD7172_WRITE_REG(AD7172_REG_FILTER, AD7172_FILTER_REG); AD7172_WRITE_REG(AD7172_REG_OFFSET, AD7172_OFFSET_REG); AD7172_WRITE_REG(AD7172_REG_GAIN, AD7172_GAIN_REG); } 2. 读取采样数据程序: uint32_t read_AD7172(void) { uint32_t data = 0; AD7172_SYNC_LOW(); AD7172_DELAY(); AD7172_SYNC_HIGH(); AD7172_DELAY(); while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_7)) {} while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_7)) { /* 读取24位数据 */ data = (data << 1) | GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6); AD7172_DELAY(); } /* 校验位 */ data = (data << 1) | GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6); AD7172_SYNC_LOW(); AD7172_DELAY(); /* 返回采样值 */ return data; } 以上程序中,需要注意以下几点: - AD7172_SYNC_LOW()/AD7172_SYNC_HIGH()为输出低电平/高电平命令,AD7172_DELAY()为延时函数; - AD7172_WRITE_REG()为写寄存器函数,用于写入配置参数至AD7172芯片的寄存器; - GPIO_Pin_5和GPIO_Pin_6为AD7172芯片的SYNC和SCLK管脚,GPIO_Pin_7为AD7172芯片的DOUT管脚; - AD7172_MODE_REG、AD7172_CONFIG_REG、AD7172_FILTER_REG、AD7172_OFFSET_REG和AD7172_GAIN_REG分别为AD7172芯片的配置参数; - AD7172芯片采样数据为24位,其中23位为采样值,最高位为校验位。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值