TI中文支持网
TI专业的中文技术问题搜集分享网站

28335例程中ADC_cal()程序的理解问题

.def _ADC_cal
.asg "0x711C", ADCREFSEL_LOC

.sect ".adc_cal"

_ADC_cal
MOVW DP, #ADCREFSEL_LOC >> 6
MOV @28, #0xAAAA ; actual value may not be 0xAAAA
MOV @29, #0xBBBB ; actual value may not be 0xBBBB
LRETR

在这个汇编程序中看别人的帖子得知DP的值为0x7100,请问这个0x7100是如何通过运算得到的。#ADCREFSEL_LOC >> 6如何得到DP=0x7100?还有几个问题如下:

1、根据的的学习理解,对ADC矫正应该是根据下面的图进行,通过精准电源求得偏移然后对采样修正。而adc_cal函数的矫正原理是什么呢?

2、手册说adc_cal函数是对ADCFEFSEL和ADCOFFTRIM寄存器初始化,但是ADCFEFSEL寄存器是参考电压选择,怎么是矫正呢?

3、另外,该代码的最后两句的意思是什么呢,是向ADCREFSEL 写0xAAAA ,向ADCOFFTRIM 写 0xBBBB吗?

4、如果ADC_cal函数可以起到矫正作用,请问在实际操作中是不是应该自己再对其代码进行一些修改,还是直接调用呢?

麻烦解答一下  谢谢!

Terry Deng:

DP表示接下来要操作的寄存器的块地址。

C2000芯片出厂时都会做ADC校准,然后把偏移值保存在芯片中,直接调用ADC_CAL就可以使用该偏移值修正ADC模块

.def _ADC_cal
.asg "0x711C", ADCREFSEL_LOC

.sect ".adc_cal"

_ADC_cal
MOVW DP, #ADCREFSEL_LOC >> 6
MOV @28, #0xAAAA ; actual value may not be 0xAAAA
MOV @29, #0xBBBB ; actual value may not be 0xBBBB
LRETR

在这个汇编程序中看别人的帖子得知DP的值为0x7100,请问这个0x7100是如何通过运算得到的。#ADCREFSEL_LOC >> 6如何得到DP=0x7100?还有几个问题如下:

1、根据的的学习理解,对ADC矫正应该是根据下面的图进行,通过精准电源求得偏移然后对采样修正。而adc_cal函数的矫正原理是什么呢?

2、手册说adc_cal函数是对ADCFEFSEL和ADCOFFTRIM寄存器初始化,但是ADCFEFSEL寄存器是参考电压选择,怎么是矫正呢?

3、另外,该代码的最后两句的意思是什么呢,是向ADCREFSEL 写0xAAAA ,向ADCOFFTRIM 写 0xBBBB吗?

4、如果ADC_cal函数可以起到矫正作用,请问在实际操作中是不是应该自己再对其代码进行一些修改,还是直接调用呢?

麻烦解答一下  谢谢!

user3506888:

回复 Terry Deng:

您的意思是,只要调用了ADC_CAL()就不需要外置标准电压进行如图所示的校正了?那ADC_CAL()所采用的标准数据从何而来呢?

.def _ADC_cal
.asg "0x711C", ADCREFSEL_LOC

.sect ".adc_cal"

_ADC_cal
MOVW DP, #ADCREFSEL_LOC >> 6
MOV @28, #0xAAAA ; actual value may not be 0xAAAA
MOV @29, #0xBBBB ; actual value may not be 0xBBBB
LRETR

在这个汇编程序中看别人的帖子得知DP的值为0x7100,请问这个0x7100是如何通过运算得到的。#ADCREFSEL_LOC >> 6如何得到DP=0x7100?还有几个问题如下:

1、根据的的学习理解,对ADC矫正应该是根据下面的图进行,通过精准电源求得偏移然后对采样修正。而adc_cal函数的矫正原理是什么呢?

2、手册说adc_cal函数是对ADCFEFSEL和ADCOFFTRIM寄存器初始化,但是ADCFEFSEL寄存器是参考电压选择,怎么是矫正呢?

3、另外,该代码的最后两句的意思是什么呢,是向ADCREFSEL 写0xAAAA ,向ADCOFFTRIM 写 0xBBBB吗?

4、如果ADC_cal函数可以起到矫正作用,请问在实际操作中是不是应该自己再对其代码进行一些修改,还是直接调用呢?

麻烦解答一下  谢谢!

10#:

回复 user3506888:

如果满足你的系统要求,就不需要校正,否则你可以不调用它,自己通过软件计算出零偏和增益,然后把对应的值写入到OFFSET和GAIN的寄存器里。

ADC_cal()的数据来自芯片内部,存放在用户不能访问的TI OTP里(区别于用户可以操作的user otp),是芯片出厂时测试获取的,也就是基于当时的环境条件,所以上面会提到一点“如果满足你的系统需求”。

.def _ADC_cal
.asg "0x711C", ADCREFSEL_LOC

.sect ".adc_cal"

_ADC_cal
MOVW DP, #ADCREFSEL_LOC >> 6
MOV @28, #0xAAAA ; actual value may not be 0xAAAA
MOV @29, #0xBBBB ; actual value may not be 0xBBBB
LRETR

在这个汇编程序中看别人的帖子得知DP的值为0x7100,请问这个0x7100是如何通过运算得到的。#ADCREFSEL_LOC >> 6如何得到DP=0x7100?还有几个问题如下:

1、根据的的学习理解,对ADC矫正应该是根据下面的图进行,通过精准电源求得偏移然后对采样修正。而adc_cal函数的矫正原理是什么呢?

2、手册说adc_cal函数是对ADCFEFSEL和ADCOFFTRIM寄存器初始化,但是ADCFEFSEL寄存器是参考电压选择,怎么是矫正呢?

3、另外,该代码的最后两句的意思是什么呢,是向ADCREFSEL 写0xAAAA ,向ADCOFFTRIM 写 0xBBBB吗?

4、如果ADC_cal函数可以起到矫正作用,请问在实际操作中是不是应该自己再对其代码进行一些修改,还是直接调用呢?

麻烦解答一下  谢谢!

user3506888:

回复 10#:

您好,请问您说的OFFSET和GAIN的寄存器是内部自带的寄存器么,我只找到了OFFSET,请问GAIN在哪?型号是DSP28335.

AD校正的应用报告中提到了文件“F280x_ADCcalibrationDriver.h“,请问28335的应该在哪找?

麻烦您了,感激不尽,困扰许久。

.def _ADC_cal
.asg "0x711C", ADCREFSEL_LOC

.sect ".adc_cal"

_ADC_cal
MOVW DP, #ADCREFSEL_LOC >> 6
MOV @28, #0xAAAA ; actual value may not be 0xAAAA
MOV @29, #0xBBBB ; actual value may not be 0xBBBB
LRETR

在这个汇编程序中看别人的帖子得知DP的值为0x7100,请问这个0x7100是如何通过运算得到的。#ADCREFSEL_LOC >> 6如何得到DP=0x7100?还有几个问题如下:

1、根据的的学习理解,对ADC矫正应该是根据下面的图进行,通过精准电源求得偏移然后对采样修正。而adc_cal函数的矫正原理是什么呢?

2、手册说adc_cal函数是对ADCFEFSEL和ADCOFFTRIM寄存器初始化,但是ADCFEFSEL寄存器是参考电压选择,怎么是矫正呢?

3、另外,该代码的最后两句的意思是什么呢,是向ADCREFSEL 写0xAAAA ,向ADCOFFTRIM 写 0xBBBB吗?

4、如果ADC_cal函数可以起到矫正作用,请问在实际操作中是不是应该自己再对其代码进行一些修改,还是直接调用呢?

麻烦解答一下  谢谢!

10#:

回复 user3506888:

跟gain相关的应该是ADCREFSEL寄存器。

.def _ADC_cal
.asg "0x711C", ADCREFSEL_LOC

.sect ".adc_cal"

_ADC_cal
MOVW DP, #ADCREFSEL_LOC >> 6
MOV @28, #0xAAAA ; actual value may not be 0xAAAA
MOV @29, #0xBBBB ; actual value may not be 0xBBBB
LRETR

在这个汇编程序中看别人的帖子得知DP的值为0x7100,请问这个0x7100是如何通过运算得到的。#ADCREFSEL_LOC >> 6如何得到DP=0x7100?还有几个问题如下:

1、根据的的学习理解,对ADC矫正应该是根据下面的图进行,通过精准电源求得偏移然后对采样修正。而adc_cal函数的矫正原理是什么呢?

2、手册说adc_cal函数是对ADCFEFSEL和ADCOFFTRIM寄存器初始化,但是ADCFEFSEL寄存器是参考电压选择,怎么是矫正呢?

3、另外,该代码的最后两句的意思是什么呢,是向ADCREFSEL 写0xAAAA ,向ADCOFFTRIM 写 0xBBBB吗?

4、如果ADC_cal函数可以起到矫正作用,请问在实际操作中是不是应该自己再对其代码进行一些修改,还是直接调用呢?

麻烦解答一下  谢谢!

user3506888:

回复 10#:

并没有啊,这个是选择基准电压的寄存器

.def _ADC_cal
.asg "0x711C", ADCREFSEL_LOC

.sect ".adc_cal"

_ADC_cal
MOVW DP, #ADCREFSEL_LOC >> 6
MOV @28, #0xAAAA ; actual value may not be 0xAAAA
MOV @29, #0xBBBB ; actual value may not be 0xBBBB
LRETR

在这个汇编程序中看别人的帖子得知DP的值为0x7100,请问这个0x7100是如何通过运算得到的。#ADCREFSEL_LOC >> 6如何得到DP=0x7100?还有几个问题如下:

1、根据的的学习理解,对ADC矫正应该是根据下面的图进行,通过精准电源求得偏移然后对采样修正。而adc_cal函数的矫正原理是什么呢?

2、手册说adc_cal函数是对ADCFEFSEL和ADCOFFTRIM寄存器初始化,但是ADCFEFSEL寄存器是参考电压选择,怎么是矫正呢?

3、另外,该代码的最后两句的意思是什么呢,是向ADCREFSEL 写0xAAAA ,向ADCOFFTRIM 写 0xBBBB吗?

4、如果ADC_cal函数可以起到矫正作用,请问在实际操作中是不是应该自己再对其代码进行一些修改,还是直接调用呢?

麻烦解答一下  谢谢!

10#:

回复 user3506888:

不好意思,F2833x确实没有这样的寄存器可以供用户操作,后续的芯片是存在的。这里列举的0~13位其实就是这个功能,但是只能通过调用TI的ADC_cal函数由TI进行操作,用户不能任意修改。

.def _ADC_cal
.asg "0x711C", ADCREFSEL_LOC

.sect ".adc_cal"

_ADC_cal
MOVW DP, #ADCREFSEL_LOC >> 6
MOV @28, #0xAAAA ; actual value may not be 0xAAAA
MOV @29, #0xBBBB ; actual value may not be 0xBBBB
LRETR

在这个汇编程序中看别人的帖子得知DP的值为0x7100,请问这个0x7100是如何通过运算得到的。#ADCREFSEL_LOC >> 6如何得到DP=0x7100?还有几个问题如下:

1、根据的的学习理解,对ADC矫正应该是根据下面的图进行,通过精准电源求得偏移然后对采样修正。而adc_cal函数的矫正原理是什么呢?

2、手册说adc_cal函数是对ADCFEFSEL和ADCOFFTRIM寄存器初始化,但是ADCFEFSEL寄存器是参考电压选择,怎么是矫正呢?

3、另外,该代码的最后两句的意思是什么呢,是向ADCREFSEL 写0xAAAA ,向ADCOFFTRIM 写 0xBBBB吗?

4、如果ADC_cal函数可以起到矫正作用,请问在实际操作中是不是应该自己再对其代码进行一些修改,还是直接调用呢?

麻烦解答一下  谢谢!

user3506888:

回复 10#:

啊,那我只能自己计算矫正了啊,如果内置的ADC_cal不符合系统要求的话。

那再麻烦问一下,“F280x_ADCcalibrationDriver.h“这个头文件,28335有吗?。。。非常不好意思。

赞(0)
未经允许不得转载:TI中文支持网 » 28335例程中ADC_cal()程序的理解问题
分享到: 更多 (0)