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

这个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。

什么是页面不太理解,书上好像也没讲啊。

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