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

📄 ad50.asm

📁 C5402汇编编写的利用AD50进行AD/DA的程序
💻 ASM
字号:
;
;  版权归解放军理工大学通信工程学院所有
;  
;  ======== AD50.asm ========
;  串口测试程序
;

	.title 	"AD50.asm"
	.mmregs
	
	; 定义程序入口点
	.global _c_int00
	; 定义中断标号
	.def	BRINT0_ISR
	
	.ref    cf_ad50
	.ref    cf_serial
	
SPSA0	.set 	38h
SPSD0	.set 	39h
DXR10   .set    23h
DRR10   .set	21h 

SPSA1	.set 	48h
SPSD1	.set 	49h

SPCR1   .set    00h
SPCR2   .set    01h
PCR     .set    0eh
	
	.data
r_data .word 0
data_m .word 0
data_s .word 0

	.text
_c_int00:	
;-------------------------------------------
;                 初始化DSP
;-------------------------------------------
		; 设置堆栈
		RSBX    CPL
		NOP
		NOP
		STM   	69ch,SP
      	ADDM  	#2fh,*(SP)
      	ANDM  	#0fffeh,*(SP)
      	; 关中断		
   		SSBX  	INTM
   		; 设置中断屏蔽寄存器,开串口0收中断
   		STM   	10h,IMR	
   		; 清中断标志
   		STM 	0,IFR	
   		; 设置DP指针值,用于DP寻址高9位
   		LD    	#0h,DP
   		; 设置软件等待状态寄存器和块转移控制寄存器		
        STM   	50d2h,SWWSR	
        STM   	800h,BSCR	
        ; 设置中断向量表首地址
        LDM   	PMST,A		
        AND   	#7fh,0,A,A	
        OR    	#1180h,0,A,A
        STLM 	A,PMST		
        ; 设置时钟模式寄存器,根据需要倍频
        STM   	0h,CLKMD	
cmode:	LDM   	CLKMD,A		
        AND   	#1h,0,A,A	
        BC    	cmode,ANEQ
        STM   	4207h,CLKMD	
        ; 对AD50复位
        ;将串口1配置为通用IO
        STM     #SPCR1,SPSA1
        ANDM    #0xfffe,SPSD1
        STM     #SPCR2,SPSA1
        ANDM    #0xfffe,SPSD1
        RPT     #0x1ff
        NOP
        STM     #PCR,SPSA1
        STM     #0x3f00,SPSD1		
        ;AD50 reset
        STM     #PCR,SPSA1
        ANDM    #0xfffB,SPSD1				;实现复位
	    RPT     #0x7fff
	    NOP
	    RPT     #0x7fff
	    NOP
	    STM     #PCR,SPSA1
        ORM     #0x0004,SPSD1
	    RPT     #0x7fff
	    NOP
	    NOP
	    RPT     #0x7fff
	    NOP	 
;-------------------------------------------
;                 初始化串口
;-------------------------------------------
		; 串口收发复位
        STM   	0h,SPSA0		
    	ANDM  	0fffeh,SPSD0	
    	STM   	1h,SPSA0		 
    	ANDM  	0ff3eh,SPSD0	
    	RPT   	#1ffh	
    	NOP   
    	; 根据串口配置表配置串口
    	STM   	SPSA0,AR2		
    	STM   	6h,BRC		
    	LD    	#cf_serial,0,A	
    	RPTB  	sconf+1	
    	READA 	*AR2+		
    	ADD   	#1h,0,A,A	
    	READA 	*AR2-		 
sconf: 	ADD   	#1h,0,A,A
		; 使能串口	
    	RPT   	#1ffh
        NOP   
    	STM   	0h,SPSA0	
    	ORM   	1h,SPSD0	
    	STM   	1h,SPSA0	
    	ORM   	1h,SPSD0
;-------------------------------------------
;                完成处理工作
;-------------------------------------------
		; 开中断
        RSBX  	INTM	
        ; 死循环,等待中断处理
loop:   B       loop
;-------------------------------------------
;             串口中断服务程序
;-------------------------------------------
		.text					
BRINT0_ISR:   
		; 压栈               	  
    	PSHM  	AG		
    	PSHM  	AH            
		PSHM  	AL  
		PSHM    BG
		PSHM    BH
		PSHM    BL               
		PSHM  	AR4 
;-------------------------------------------
;             配置AD50寄存器
;-------------------------------------------  
		; 读取配置次数     
	    LD    	*(cf_ad50),A		
	    AND   	#0fh,0,A,A
	    ; 当配置计数减为0,配置结束
	    BC    	#tr_data,AEQ
	    ; 发送配置数据,配置计数器减1		
	    ADD   	#cf_ad50,0,A,A
	    STLM  	A,AR4			
        ADDM  	0ffffh,*(cf_ad50)	
	    LD    	*AR4,A
	    NOP
	    NOP
	    STLM  	A,DXR10			
	    B     	#cf_end			
;-------------------------------------------
;           配置结束,进行正常通信 
;-------------------------------------------         
tr_data:				     
		LDM    	DRR10,A 
		nop
		SUB     #0x360e,A
		nop
		STL    	A,*(r_data)
		nop
		nop	        
		ANDM   	#0x1,*(r_data)
		nop
		NOP
		NOP
		CMPM	*(r_data),#1
		BC    	#cf_slave,NTC	;slave
			                    ;master
		AND    	#0x0fffe,A 
		NOP
		NOP 
		LD    	*(data_m),B
		nop
		nop
		STL   	B,*(DXR10)
		nop
		nop   
		STL    	A,*(data_s)		;x_data to buffer    
		nop
		nop
		B      	cf_end	
cf_slave:   
		AND    	#0x0fffe,A 
		NOP
		NOP   
		LD    	*(data_s),B
		nop
		nop
		STL    	B,*(DXR10)
		nop
		nop 
		STL    	A,*(data_m)
		nop
		nop	   	
cf_end:	
		; 出栈	      
		POPM  	AR4 
		POPM    BL
		POPM    BH
		POPM    BG          
		POPM  	AL            
		POPM  	AH            
		POPM  	AG           
		POPM  	ST1            
		POPM  	ST0            
		RETE		

    	.end		


⌨️ 快捷键说明

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