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

📄 f2407adc.asm

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

	.stag	.fake0,176
	.member	_Ch1Gain,0,4,8,16
	.member	_Ch2Gain,16,4,8,16
	.member	_Ch3Gain,32,4,8,16
	.member	_Ch4Gain,48,4,8,16
	.member	_Ch1Out,64,4,8,16
	.member	_Ch2Out,80,4,8,16
	.member	_Ch3Out,96,4,8,16
	.member	_Ch4Out,112,4,8,16
	.member	_ChSelect,128,14,8,16
	.member	_init,144,144,8,16
	.member	_read,160,144,8,16
	.eos
	.sym	_ADCVALS,0,8,13,176,.fake0
	.sym	_ADCVALS_handle,0,24,13,16,.fake0
	.globl	_F2407_ADC_Init
	.globl	_F2407_ADC_Read
	.file	"f2407adc.c"
	.text

	.sym	_F2407_ADC_Init,_F2407_ADC_Init,32,2,0
	.globl	_F2407_ADC_Init

	.func	9
;>>>> 	void inline F2407_ADC_Init(ADCVALS *p)
******************************************************
* FUNCTION DEF : _F2407_ADC_Init
******************************************************
_F2407_ADC_Init:

LF1	.set	0

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

	.sym	_p,-3+LF1,24,9,16,.fake0
	.line	2
	.line	4
;>>>> 	        SCSR1=SCSR1|0x0080;                 /* Turn on the clocks to the ADC module*/
	LARK	AR3,28696
	LACK	128
	OR	* 
	SACL	* 
	.line	5
;>>>> 	        CALIBRATION=CALIBRATION_CONSTANT;
	LACK	0
	ADRK	160
	SACL	* 
	.line	7
;>>>> 	        ADCTRL1=ADC_RESET_FLAG;             /* Reset the ADC Module    */
	SBRK	24
	SPLK	#16384,* 
	.line	8
;>>>> 	        ADCTRL1=ADCTRL1_INIT_STATE;         /* Set up ADCTRL1 register */
	SPLK	#8464,*+
	.line	9
;>>>> 	      	ADCTRL2=ADCTRL2_INIT_STATE;         /* Set up ADCTRL2 register */
	SPLK	#8706,*+
	.line	10
;>>>> 	        MAXCONV=3;                          /* Specify four conversions  */
	LACK	3
	SACL	* ,AR2
	.line	12
;>>>> 	        CHSELSEQ1=p->ChSelect;       	   /* Configure channel selection */ 
	LARK	AR2,-3+LF1
	MAR	*0+
	LAR	AR4,* ,AR4
	SSXM
	ADRK	8
	LAC	* ,AR3
	MAR	*+
	SACL	* ,AR1
EPI0_1:
	.line	13
	SBRK	2
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	21,000000000H,1

	.sym	_F2407_ADC_Read,_F2407_ADC_Read,32,2,0
	.globl	_F2407_ADC_Read

	.func	25
;>>>> 	void F2407_ADC_Read(ADCVALS *p)
******************************************************
* FUNCTION DEF : _F2407_ADC_Read
******************************************************
_F2407_ADC_Read:

LF2	.set	0

	POPD	*+
	SAR	AR0,*+
	SAR	AR1,*
	LARK	AR0,4
	LAR	AR0,*0+,AR3

	.sym	_p,-3+LF2,24,9,16,.fake0
	.sym	_DatQ15,1,4,1,16
	.sym	_Tmp,2,5,1,32
	.line	2
;>>>> 	       int DatQ15;
;>>>> 		   long Tmp;
	.line	6
;>>>> 	        DatQ15 = (RESULT0>>1)&0x7FFF;   		// Convert  result0 to Q15 (unipolar signal)
	LARK	AR3,28840
	SSXM
	LAC	* ,14,AR2
	ANDK	32767,15
	LARK	AR2,1
	MAR	*0+
	SACH	* ,1
	.line	7
;>>>> 	        Tmp = (long)(p->Ch1Gain*DatQ15); 		//Tmp= gain*dat => Q28 = Q13*Q15  
	SBRK	4-LF2
	LAR	AR4,* ,AR4
	LT	* ,AR2
	ADRK	4-LF2
	MPY	*+
	SPL	*+
	SPH	*-
	.line	8
;>>>> 			p->Ch1Out = (int)(Tmp>>13);				//Convert Q28 to Q15
	RSXM
	LAC	*+,3,AR0
	SACH	*,AR2
	SSXM
	LAC	* ,3,AR0
	OR	*,AR4
	ADRK	4
	SACL	* ,AR3
	.line	10
;>>>> 	        DatQ15 = (RESULT1>>1)&0x7FFF;   		// Convert  result0 to Q15 (unipolar signal)
	MAR	*+
	LAC	* ,14,AR2
	ANDK	32767,15
	SBRK	2
	SACH	* ,1
	.line	11
;>>>> 	        Tmp = (long)(p->Ch2Gain*DatQ15); 		//Tmp= gain*dat => Q28 = Q13*Q15  
	LT	* ,AR4
	SBRK	3
	MPY	* ,AR2
	MAR	*+
	SPL	*+
	SPH	*-
	.line	12
;>>>> 			p->Ch2Out = (int)(Tmp>>13);				//Convert Q28 to Q15
	RSXM
	LAC	*+,3,AR0
	SACH	*,AR2
	SSXM
	LAC	* ,3,AR0
	OR	*,AR4
	ADRK	4
	SACL	* ,AR3
	.line	14
;>>>> 	        DatQ15 = (RESULT2>>1)&0x7FFF;   		// Convert  result0 to Q15 (unipolar signal)
	MAR	*+
	LAC	* ,14,AR2
	ANDK	32767,15
	SBRK	2
	SACH	* ,1
	.line	15
;>>>> 	        Tmp = (long)(p->Ch3Gain*DatQ15); 		//Tmp= gain*dat => Q28 = Q13*Q15  
	LT	* ,AR4
	SBRK	3
	MPY	* ,AR2
	MAR	*+
	SPL	*+
	SPH	*-
	.line	16
;>>>> 			p->Ch3Out = (int)(Tmp>>13);				//Convert Q28 to Q15
	RSXM
	LAC	*+,3,AR0
	SACH	*,AR2
	SSXM
	LAC	* ,3,AR0
	OR	*,AR4
	ADRK	4
	SACL	* ,AR3
	.line	18
;>>>> 	        DatQ15 = (RESULT3>>1)&0x7FFF;   		// Convert  result0 to Q15 (unipolar signal)
	MAR	*+
	LAC	* ,14,AR2
	ANDK	32767,15
	SBRK	2
	SACH	* ,1
	.line	19
;>>>> 	        Tmp = (long)(p->Ch4Gain*DatQ15); 		//Tmp= gain*dat => Q28 = Q13*Q15  
	LT	* ,AR4
	SBRK	3
	MPY	* ,AR2
	MAR	*+
	SPL	*+
	SPH	*-
	.line	20
;>>>> 			p->Ch4Out = (int)(Tmp>>13);				//Convert Q28 to Q15
	RSXM
	LAC	*+,3,AR0
	SACH	*,AR2
	SSXM
	LAC	* ,3,AR0
	OR	*,AR4
	ADRK	4
	SACL	* ,AR3
	.line	22
;>>>> 	        ADCTRL2 |= 0x6000;       	    			// Reset the sequence
	SBRK	10
	LACK	24576
	OR	* 
	SACL	* ,AR1
EPI0_2:
	.line	24
	SBRK	5
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	48,000000000H,4
	.end

⌨️ 快捷键说明

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