⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rmp_cntl.asm

📁 TI公司的DSP(LF2407A)编写的有霍尔位置传感器的无刷直流电机控制程序,内含子程序说明
💻 ASM
字号:
*******************************************************
* TMS320C24xx ANSI C Codegen Version 7.04       
*******************************************************
;	dspac -i../src -v2xx -iD:/CCStudio_v3.1/c2400/cgtools/include rmp_cntl.c C:\DOCUME~1\liuping\LOCALS~1\Temp\rmp_cntl.if 
;	dspopt NOT RUN
;	dspcg -o -v2xx -o C:\DOCUME~1\liuping\LOCALS~1\Temp\rmp_cntl.if C:\DOCUME~1\liuping\LOCALS~1\Temp\rmp_cntl.asm C:\DOCUME~1\liuping\LOCALS~1\Temp\rmp_cntl.tmp 
	.port
	.file	"rmp_cntl.c"
	.file	"../src\rmp_cntl.h"

	.stag	.fake0,128
	.member	_TargetValue,0,4,8,16
	.member	_RampDelayMax,16,4,8,16
	.member	_RampLowLimit,32,4,8,16
	.member	_RampHighLimit,48,4,8,16
	.member	_RampDelayCount,64,4,8,16
	.member	_SetpointValue,80,4,8,16
	.member	_EqualFlag,96,4,8,16
	.member	_calc,112,148,8,16
	.eos
	.sym	_RMPCNTL,0,8,13,128,.fake0
	.sym	_RMPCNTL_handle,0,24,13,16,.fake0
	.globl	_rmp_cntl_calc
	.file	"rmp_cntl.c"
	.text

	.sym	_rmp_cntl_calc,_rmp_cntl_calc,32,2,0
	.globl	_rmp_cntl_calc

	.func	16
;>>>> 	void rmp_cntl_calc(RMPCNTL *v)
******************************************************
* FUNCTION DEF : _rmp_cntl_calc
******************************************************
_rmp_cntl_calc:

LF1	.set	0

	POPD	*+
	SAR	AR0,*+
	SAR	AR1,*
	LARK	AR0,1
	LAR	AR0,*0+,AR2

	.sym	_v,-3+LF1,24,9,16,.fake0
	.line	2
	.line	3
;>>>> 	      if ( v->TargetValue != v->SetpointValue)
	LARK	AR2,-3+LF1
	MAR	*0+
	LAR	AR3,* 
	LAR	AR4,* ,AR4
	SSXM
	LAC	* ,AR3
	ADRK	5
	SUB	* 
	BZ	L1
	.line	5
;>>>> 	         v->RampDelayCount ++;
	MAR	* ,AR4
	ADRK	4
	LAC	* 
	ADDK	1
	SACL	* 
	.line	6
;>>>> 	         if (v->RampDelayCount >= v->RampDelayMax)
	LAC	* ,AR3
	SBRK	4
	SUB	* 
	BLZ	L7
	.line	8
;>>>> 	           if (v->TargetValue >= v->SetpointValue)
	MAR	* ,AR4
	SBRK	4
	LAC	* ,AR3
	ADRK	4
	SUB	* 
	BLZ	L3
	.line	10
;>>>> 	            v->SetpointValue ++;        //  _IQ(0.0000305),0.0000305 is resolution of Q15=0.999424
	MAR	* ,AR4
	ADRK	5
	LAC	* 
	ADDK	1
	SACL	* 
	.line	11
;>>>> 	            if (v->SetpointValue > v->RampHighLimit)
	LAC	* ,AR3
	SBRK	2
	SUB	* 
	BLEZ	L4
	.line	12
;>>>> 	              v->SetpointValue = v->RampHighLimit;           
	LAC	* ,AR4
	SACL	* 
L4:
	.line	13
;>>>> 	            v->RampDelayCount = 0;
;>>>> 	           else
	LACK	0
	MAR	* ,AR3
	MAR	*+
	SACL	* 
	B	L7
L3:
	.line	17
;>>>> 	            v->SetpointValue --;        // 0.0000305 is resolution of Q15
	LAC	* 
	SUBK	1
	SACL	* 
	.line	18
;>>>> 	            if (v->SetpointValue < v->RampLowLimit)
	LAC	* ,AR4
	ADRK	2
	SUB	* 
	BGEZ	L6
	.line	19
;>>>> 	              v->SetpointValue = v->RampLowLimit;           
	MAR	* ,AR3
	SBRK	3
	LAC	* ,AR4
	ADRK	3
	SACL	* 
L6:
	.line	20
;>>>> 	            v->RampDelayCount = 0;
	MAR	* ,AR2
	LAR	AR3,* ,AR3
	LACK	0
	ADRK	4
	SACL	* 
	B	L7
L1:
	.line	24
;>>>> 	      else  v->EqualFlag = 0x7FFF; 
	MAR	* ,AR4
	ADRK	6
	SPLK	#32767,* 
L7:
EPI0_1:
	.line	25
	MAR	* ,AR1
	SBRK	2
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	40,000000000H,1
	.end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -