.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有吗?。。。非常不好意思。