.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 */
三、像这样的汇编程序能在调试的过程中设置断点来调试?
麻烦请技术人员解答一下。谢谢!
rookiecalf:
1、应该说是ADCREFSEL_LOC >> 6 页面的首地址是0x7100,你把页面和地址混在一起了
2、MOV @28, #0xAAAA 上面知道当前DP的首地址是0x7100,偏移28 就是0x7100 + 28,给地址赋值0xAAAA
3、断点调试是可以的
.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 */
三、像这样的汇编程序能在调试的过程中设置断点来调试?
麻烦请技术人员解答一下。谢谢!
JLDN:
回复 rookiecalf:
你好。麻烦问一下ADCREFSEL_LOC >> 6 如何得到页面首地址是0X7100的。不是很明白 谢谢。
.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 */
三、像这样的汇编程序能在调试的过程中设置断点来调试?
麻烦请技术人员解答一下。谢谢!
rookiecalf:
回复 JLDN:
CREFSEL_LOC >> 6 是DP,而(ADCREFSEL_LOC >> 6)页的首地址为(ADCREFSEL_LOC >> 6)<< 6
.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 */
三、像这样的汇编程序能在调试的过程中设置断点来调试?
麻烦请技术人员解答一下。谢谢!
angle:
回复 rookiecalf:
(ADCREFSEL_LOC >> 6)页的首地址为(ADCREFSEL_LOC >> 6)<< 6
您好,初学者求问,怎么具体的通过计算得到 页面的首地址是0x7100。
什么是页面不太理解,书上好像也没讲啊。