大家好!
我是DSP产品的新手。最近在看DSP程序例程上有一段语句是这样的:
_ISR_Run: ;(13 cycles to get to here from ISR trigger)
;CONTEXT_SAVE
PUSH AR1H:AR0H ; 32-bit
PUSH XAR2 ; 32-bit
PUSH XAR3 ; 32-bit
PUSH XAR4 ; 32-bit
;—————————————-
PUSH XT ; 32-bit
NOP
;———————————————————
;———————————————————
MOVW DP,#ADCST>>6 ; 我看SPRU里写应当是让DP指向含有ADCST的页,那么右移6位是什么意思呢?
MOV AL,@ADCST ;
AND AL,#0x0004 ;
B ADC_Conv, NEQ ;
能不能请哪位朋友帮我解释一下高亮部分是什么意思啊? 我查了SPRU513D,没有发现DP寻址方式里有这种 MOVW DP, #xx 再加右移的方式啊?
另外,能不能请帮我看一下下面的语句,我把我的理解加了高亮,能不能请各位帮我看看我是不是理解对了啊?谢谢各位
MOVL XAR4,#(_dlog) ; 把变量dlog的地址给XAR4,即把XAR4当指针用
MOV ACC,*XAR5 ;把XAR5的内容赋给ACC(即把XAR5当指针用)
MOV *+XAR5[2],#0 ; 把0给XAR5[2],????, XARn也可以当数组用吗?
MOVL XAR7,*XAR4++ ; 先把XAR4的内容给XAR7,然后XAR4加1。即XAR4当指针用,XAR7不当指针用?
MOV @ADCTRL2,#0x4100 ; 把0X4100写入ADCTRL2寄存器
谢谢
Forrest:
关于加亮这句,我认为是写错了,忽视MOVW会自动右移六位。
MOV *+XAR5[2],#0 意思是把0给到XAR5+2的地址
详见下面的文档C28x Indirect Addressing Modes:
www.ti.com/…/spru430e
大家好!
我是DSP产品的新手。最近在看DSP程序例程上有一段语句是这样的:
_ISR_Run: ;(13 cycles to get to here from ISR trigger)
;CONTEXT_SAVE
PUSH AR1H:AR0H ; 32-bit
PUSH XAR2 ; 32-bit
PUSH XAR3 ; 32-bit
PUSH XAR4 ; 32-bit
;—————————————-
PUSH XT ; 32-bit
NOP
;———————————————————
;———————————————————
MOVW DP,#ADCST>>6 ; 我看SPRU里写应当是让DP指向含有ADCST的页,那么右移6位是什么意思呢?
MOV AL,@ADCST ;
AND AL,#0x0004 ;
B ADC_Conv, NEQ ;
能不能请哪位朋友帮我解释一下高亮部分是什么意思啊? 我查了SPRU513D,没有发现DP寻址方式里有这种 MOVW DP, #xx 再加右移的方式啊?
另外,能不能请帮我看一下下面的语句,我把我的理解加了高亮,能不能请各位帮我看看我是不是理解对了啊?谢谢各位
MOVL XAR4,#(_dlog) ; 把变量dlog的地址给XAR4,即把XAR4当指针用
MOV ACC,*XAR5 ;把XAR5的内容赋给ACC(即把XAR5当指针用)
MOV *+XAR5[2],#0 ; 把0给XAR5[2],????, XARn也可以当数组用吗?
MOVL XAR7,*XAR4++ ; 先把XAR4的内容给XAR7,然后XAR4加1。即XAR4当指针用,XAR7不当指针用?
MOV @ADCTRL2,#0x4100 ; 把0X4100写入ADCTRL2寄存器
谢谢
violet han:
回复 Forrest:
谢谢你。这是源于TI的例程。但似乎例程在运行上没有什么问题啊?是不是我挪去这个>>也是OK的呢?
源程序这里是用汇编处理ADC采样结果,全段如下。但似乎这种MOVW DP #xx >>6 使用了很多次。有没有可能是通用的呢?谢谢哦
_ISR_Run: ;(13 cycles to get to here from ISR trigger) ;CONTEXT_SAVE PUSH AR1H:AR0H ; 32-bit PUSH XAR2 ; 32-bit PUSH XAR3 ; 32-bit PUSH XAR4 ; 32-bit;—————————————- PUSH XT ; 32-bit NOP ;——————————————————— MOVW DP,#ADCST>>6 ; Make sure ADC conversion has completedADC_Conv: MOV AL,@ADCST ; check seq1 busy bit AND AL,#0x0004 ; This code may not be needed with proper timing B ADC_Conv, NEQ ; and buffer code that doesn't use the ADC result and ; runs from the start of the ISR till the completion of ADC conversion
ADC_NchDRV 3 ; 3 Channel, (i.e. N=3)
ADC_Reset: MOVW DP,#ADCTRL2>>6 ; Reset ADC SEQ MOV @ADCTRL2,#0x4100 ; RST_SEQ1=1, SOCA-SEQ1=1
; ADC Sample Point Calculation MOVW DP,#TBPHS3>>6 MOV AL,@TBPHS3 ; TBPHS3 ADD AL,@TBPRD3 ; TBPRD3 LSR AL,#1 ; ACC = (TBPRD3 + TBPHS3)/2 MOV @CMPB3, AL ; CMPB3 = (TBPRD3 + TBPHS3)/2
;——————————————————— ; Datalog to store and plot upto four variables in the control flow MOVW DP,#dlog_cntr INC @dlog_cntr CMP @dlog_cntr,#4 B EXIT_ISR, LT ; Execute this module 4x slower MOV @dlog_cntr,#0 ; Reset loop counter DLOG_4CH_update
EXIT_ISR:
;=================================== MOVW DP,#PIEACK>>6 ; Acknowledge PIE interrupt Group 3 MOV @PIEACK,#PIEACK_GROUP3 .endif ; EPWMn_ISR
.if(ADC_ISR) ; Case where ISR is triggered by ADC MOVW DP,#ADCST>>6 MOV @ADCST,#0x010 ; Clear INT SEQ1 Int flag
MOVW DP,#PIEACK>>6 ; Acknowledge PIE interrupt Group 1 MOV @PIEACK,#PIEACK_GROUP1 .endif ; ADC_ISR
; Restore context & return POP XT;———————————– POP XAR4 POP XAR3 POP XAR2 POP AR1H:AR0H
IRET
大家好!
我是DSP产品的新手。最近在看DSP程序例程上有一段语句是这样的:
_ISR_Run: ;(13 cycles to get to here from ISR trigger)
;CONTEXT_SAVE
PUSH AR1H:AR0H ; 32-bit
PUSH XAR2 ; 32-bit
PUSH XAR3 ; 32-bit
PUSH XAR4 ; 32-bit
;—————————————-
PUSH XT ; 32-bit
NOP
;———————————————————
;———————————————————
MOVW DP,#ADCST>>6 ; 我看SPRU里写应当是让DP指向含有ADCST的页,那么右移6位是什么意思呢?
MOV AL,@ADCST ;
AND AL,#0x0004 ;
B ADC_Conv, NEQ ;
能不能请哪位朋友帮我解释一下高亮部分是什么意思啊? 我查了SPRU513D,没有发现DP寻址方式里有这种 MOVW DP, #xx 再加右移的方式啊?
另外,能不能请帮我看一下下面的语句,我把我的理解加了高亮,能不能请各位帮我看看我是不是理解对了啊?谢谢各位
MOVL XAR4,#(_dlog) ; 把变量dlog的地址给XAR4,即把XAR4当指针用
MOV ACC,*XAR5 ;把XAR5的内容赋给ACC(即把XAR5当指针用)
MOV *+XAR5[2],#0 ; 把0给XAR5[2],????, XARn也可以当数组用吗?
MOVL XAR7,*XAR4++ ; 先把XAR4的内容给XAR7,然后XAR4加1。即XAR4当指针用,XAR7不当指针用?
MOV @ADCTRL2,#0x4100 ; 把0X4100写入ADCTRL2寄存器
谢谢
Forrest:
回复 violet han:
这个问题,论坛里的try也问过我,请你把完整的例程发上来看看,另外也请对您的这部分反汇编进行截图。
我做了一个类似的实验:
大家好!
我是DSP产品的新手。最近在看DSP程序例程上有一段语句是这样的:
_ISR_Run: ;(13 cycles to get to here from ISR trigger)
;CONTEXT_SAVE
PUSH AR1H:AR0H ; 32-bit
PUSH XAR2 ; 32-bit
PUSH XAR3 ; 32-bit
PUSH XAR4 ; 32-bit
;—————————————-
PUSH XT ; 32-bit
NOP
;———————————————————
;———————————————————
MOVW DP,#ADCST>>6 ; 我看SPRU里写应当是让DP指向含有ADCST的页,那么右移6位是什么意思呢?
MOV AL,@ADCST ;
AND AL,#0x0004 ;
B ADC_Conv, NEQ ;
能不能请哪位朋友帮我解释一下高亮部分是什么意思啊? 我查了SPRU513D,没有发现DP寻址方式里有这种 MOVW DP, #xx 再加右移的方式啊?
另外,能不能请帮我看一下下面的语句,我把我的理解加了高亮,能不能请各位帮我看看我是不是理解对了啊?谢谢各位
MOVL XAR4,#(_dlog) ; 把变量dlog的地址给XAR4,即把XAR4当指针用
MOV ACC,*XAR5 ;把XAR5的内容赋给ACC(即把XAR5当指针用)
MOV *+XAR5[2],#0 ; 把0给XAR5[2],????, XARn也可以当数组用吗?
MOVL XAR7,*XAR4++ ; 先把XAR4的内容给XAR7,然后XAR4加1。即XAR4当指针用,XAR7不当指针用?
MOV @ADCTRL2,#0x4100 ; 把0X4100写入ADCTRL2寄存器
谢谢
Troublemaker:
回复 Forrest:
Forrest说得很好!
大家好!
我是DSP产品的新手。最近在看DSP程序例程上有一段语句是这样的:
_ISR_Run: ;(13 cycles to get to here from ISR trigger)
;CONTEXT_SAVE
PUSH AR1H:AR0H ; 32-bit
PUSH XAR2 ; 32-bit
PUSH XAR3 ; 32-bit
PUSH XAR4 ; 32-bit
;—————————————-
PUSH XT ; 32-bit
NOP
;———————————————————
;———————————————————
MOVW DP,#ADCST>>6 ; 我看SPRU里写应当是让DP指向含有ADCST的页,那么右移6位是什么意思呢?
MOV AL,@ADCST ;
AND AL,#0x0004 ;
B ADC_Conv, NEQ ;
能不能请哪位朋友帮我解释一下高亮部分是什么意思啊? 我查了SPRU513D,没有发现DP寻址方式里有这种 MOVW DP, #xx 再加右移的方式啊?
另外,能不能请帮我看一下下面的语句,我把我的理解加了高亮,能不能请各位帮我看看我是不是理解对了啊?谢谢各位
MOVL XAR4,#(_dlog) ; 把变量dlog的地址给XAR4,即把XAR4当指针用
MOV ACC,*XAR5 ;把XAR5的内容赋给ACC(即把XAR5当指针用)
MOV *+XAR5[2],#0 ; 把0给XAR5[2],????, XARn也可以当数组用吗?
MOVL XAR7,*XAR4++ ; 先把XAR4的内容给XAR7,然后XAR4加1。即XAR4当指针用,XAR7不当指针用?
MOV @ADCTRL2,#0x4100 ; 把0X4100写入ADCTRL2寄存器
谢谢
violet han:
回复 Troublemaker:
谢谢你们2位。中断源程序和反汇编截图请见附件.
好像论坛只允许上传一个附件,所以我把两个代码放在一个word文档里了。
另外,能不能请你们告诉我,如何从反汇编中看到相关的DP中这6位是否被移位的信息吗?
谢谢!
大家好!
我是DSP产品的新手。最近在看DSP程序例程上有一段语句是这样的:
_ISR_Run: ;(13 cycles to get to here from ISR trigger)
;CONTEXT_SAVE
PUSH AR1H:AR0H ; 32-bit
PUSH XAR2 ; 32-bit
PUSH XAR3 ; 32-bit
PUSH XAR4 ; 32-bit
;—————————————-
PUSH XT ; 32-bit
NOP
;———————————————————
;———————————————————
MOVW DP,#ADCST>>6 ; 我看SPRU里写应当是让DP指向含有ADCST的页,那么右移6位是什么意思呢?
MOV AL,@ADCST ;
AND AL,#0x0004 ;
B ADC_Conv, NEQ ;
能不能请哪位朋友帮我解释一下高亮部分是什么意思啊? 我查了SPRU513D,没有发现DP寻址方式里有这种 MOVW DP, #xx 再加右移的方式啊?
另外,能不能请帮我看一下下面的语句,我把我的理解加了高亮,能不能请各位帮我看看我是不是理解对了啊?谢谢各位
MOVL XAR4,#(_dlog) ; 把变量dlog的地址给XAR4,即把XAR4当指针用
MOV ACC,*XAR5 ;把XAR5的内容赋给ACC(即把XAR5当指针用)
MOV *+XAR5[2],#0 ; 把0给XAR5[2],????, XARn也可以当数组用吗?
MOVL XAR7,*XAR4++ ; 先把XAR4的内容给XAR7,然后XAR4加1。即XAR4当指针用,XAR7不当指针用?
MOV @ADCTRL2,#0x4100 ; 把0X4100写入ADCTRL2寄存器
谢谢
violet han:
回复 Forrest:
谢谢你。那么你说的另外一种方式是要如何定义呢?是不是DSP中的外设地址定义都是用.set先预定义的啊?
大家好!
我是DSP产品的新手。最近在看DSP程序例程上有一段语句是这样的:
_ISR_Run: ;(13 cycles to get to here from ISR trigger)
;CONTEXT_SAVE
PUSH AR1H:AR0H ; 32-bit
PUSH XAR2 ; 32-bit
PUSH XAR3 ; 32-bit
PUSH XAR4 ; 32-bit
;—————————————-
PUSH XT ; 32-bit
NOP
;———————————————————
;———————————————————
MOVW DP,#ADCST>>6 ; 我看SPRU里写应当是让DP指向含有ADCST的页,那么右移6位是什么意思呢?
MOV AL,@ADCST ;
AND AL,#0x0004 ;
B ADC_Conv, NEQ ;
能不能请哪位朋友帮我解释一下高亮部分是什么意思啊? 我查了SPRU513D,没有发现DP寻址方式里有这种 MOVW DP, #xx 再加右移的方式啊?
另外,能不能请帮我看一下下面的语句,我把我的理解加了高亮,能不能请各位帮我看看我是不是理解对了啊?谢谢各位
MOVL XAR4,#(_dlog) ; 把变量dlog的地址给XAR4,即把XAR4当指针用
MOV ACC,*XAR5 ;把XAR5的内容赋给ACC(即把XAR5当指针用)
MOV *+XAR5[2],#0 ; 把0给XAR5[2],????, XARn也可以当数组用吗?
MOVL XAR7,*XAR4++ ; 先把XAR4的内容给XAR7,然后XAR4加1。即XAR4当指针用,XAR7不当指针用?
MOV @ADCTRL2,#0x4100 ; 把0X4100写入ADCTRL2寄存器
谢谢
Forrest:
回复 violet han:
各种设置方法都可以用。
另一种就是上面一直谈到的_res_3的设置方法。请看上面的示例。
TI中文支持网