.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
这个AD的校准程序,之前看过一个帖子的回复如下:
.def _ADC_cal /* 定义代码段名称 */
.asg "0x711C", ADCREFSEL_LOC /* ADCREFSEL_LOC 是 ADC Reference Select Register, 地址0x711C */
/* C28 core 中, DP是 数据段 的 地址,每段大小64, 32bitDataAddr(21:6) = DP(15:0) */
MOVW DP, #ADCREFSEL_LOC >> 6 /* 右移动6bit 获得 数据段首地址 */
/* 此时, DP = 0x7100 */
MOV @28, #0xAAAA /* 地址 : 0x7100 + 28 */
MOV @29, #0xBBBB /* 地址 : 0x7100 + 29 */
这里有几个问题不是很明白,问题如下:
一、MOVW DP, #ADCREFSEL_LOC >> 6 /* 右移动6bit 获得 数据段首地址 */
/* 此时, DP = 0x7100 */
这个#ADCREFSEL_LOC >> 6 ,DP为什么=0x7100, 之前的0x711C右移6位不是应该是0000000111000100?难道是0~5位被替换成0的?
二、下面2个语句不是很明白意思
MOV @28, #0xAAAA /* 地址 : 0x7100 + 28 */
MOV @29, #0xBBBB /* 地址 : 0x7100 + 29 */
三、像这样的汇编程序能在调试的过程中设置断点来调试?
麻烦请技术人员解答一下。谢谢!