.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函数可以起到矫正作用,请问在实际操作中是不是应该自己再对其代码进行一些修改,还是直接调用呢?
麻烦解答一下 谢谢!