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

📄 mcbsp_test.asm

📁 银杏科技有限公司dsp实验开发板的实验程序
💻 ASM
字号:
;; This is McBSP test program. The work-mode of McBSP Series:
;;      BLD=1 (Digital loop back mode enabled)  
;;      RCOMPAND=10 or 11 (u-law/A-law Expand: 8bits -> 16bits)
;;      (R/X)INTM=00 (generate an interrupt every word traxsmitted)
;;      ar3 -> Transmit data buffer(buffer_1)
;;      ar4 -> receive data buffer(buffer_2)
;; The program is applicable for VC54xx 
;; Designed by liyubai
;; Modifing 1.0    Time 2001,6,28

		.title "Test McBSP Program"
		.mmregs
		.global _c_int00,buffer_1,buffer_2
		.global interrupt_vector
drr11		.set 41h		;McBSP1 receive data register
dxr11		.set 43h		;McBSP1 transmit data register
spsa1		.set 48h		;McBSP1 sub_bank address register
spcd1		.set 49h		;McBSP1 sub_bank data register
		.bss stack_memory,500
		.bss buffer_1,1000
		.bss buffer_2,1000
interrupt_vector:			;interrupt vector table
		.text
rs		b  _c_int00
                nop
		nop
nmi     	b __ret
        	.word   0,0
sint17  	b __ret
        	.word   0,0
sint18  	b __ret
        	.word   0,0
sint19  	b __ret
        	.word   0,0
sint20  	b __ret
        	.word   0,0
sint21  	b __ret
        	.word   0,0
sint22  	b __ret
        	.word   0,0
sint23  	b __ret
        	.word   0,0
sint24  	b __ret
        	.word   0,0
sint25  	b __ret
        	.word   0,0
sint26  	b __ret
        	.word   0,0
sint27  	b __ret
        	.word   0,0
sint28  	b __ret
        	.word   0,0
sint29  	b __ret
        	.word   0,0
sint30  	b __ret
        	.word   0,0
int0  		b __ret
        	.word   0,0
int1  		b __ret
        	.word   0,0
int2  		b __ret
        	.word   0,0
tint      	b __ret
        	.word   0,0
brint0  	b __ret
        	.word   0,0
bxint0    	b __ret
        	.word   0,0
dmac0     	b __ret
        	.word   0,0
dmac1     	b __ret
        	.word   0,0
int3      	b __ret
        	.word   0,0
hpint     	b __ret
        	.word   0,0
brint1  	b McBSP1_receive_int
		nop
		nop
bxint1  	b McBSP1_transmit_int
		nop
		nop
q28     	.word 0,0,0,0
q29     	.word 0,0,0,0
q30     	.word 0,0,0,0
q31     	.word 0,0,0,0

_c_int00: 
		ssbx intm		  ;close all interrupt
		stm #0ffffh,ifr	  ;cleare all interrupt_flag

		stm  #stack_memory+500,sp  	;sp => stack_memory
   		stm  #20a0h,pmst    	;vector table start: 0x2080
		call Clear_McBSP1_receive_buf
     	call McBSP1_initializing
		
		stm #buffer_1,ar3
		stm #buffer_2,ar4
		ld #1000,b		;pre_put numberS of McBSP interrupt
		stm  #0c00h,imr		;enable RINT1,XINT1
		rsbx intm		;enable all int
wait_McBSP_int:
		nop
		nop
		bc wait_McBSP_int,bneq
		nop
		nop
		ssbx intm       ; close all int !
		b $
		nop

__ret:		nop
		rete
;------------------------------------------------------------
; Init setup Mcbsp1 !
;------------------------------------------------------------
McBSP1_initializing:
		stm #0,spsa1		;choose SPCR11
		stm #0a000h,spcd1	;1010000000000000 => SPCR11. 
					;DLB(15)=1(Digital loop back moden enabled)
					;RJUST(14-13)=01;CLKSTP(12-11)=00
					;RES(10-8)=000,DXENA(7)=0,ABIS(6)=0
					;RINTM(5-4)=00,RSYNCERR(3)=0,RFULL(2)=0
					;RRDY(1)=0,RRST(0)=0
		stm #1,spsa1		;choose spcr21
		stm #100h,spcd1		;0000000100000000 => SPCR21.
					;RES(15-10)=000000,FREE(9)=0,SOFT(8)=1
					;FRST(7)=0,GRST(6)=0,XINT(5-4)=00,XSYNCERR(3)=0
					;XFULL(2)=0,XRDY(1)=0,XRST(0)=0
		stm #2,spsa1		;choose RCR11
		stm #0,spcd1		;0000000000000000 => RCR11.
					;RES(15)=0,RFRLEN1(14-8)=000 0000
					;RWDLEN1(7-5)=000,RES(4-0)=0 0000
		stm #3,spsa1		;choose RCR21
		stm #00H,spcd1		;0000000000010000 => RCR21.
					;RPHASE(15)=0,RFRLEN2(14-8)=000 0000
					;RWDLEN2(7-5)=000,RCOMPAND(4-3)=10(u-law EXPAND)
					;RFIG(2)=0,RDATDLY(1-0)=00
		stm #4,spsa1		;choose XCR11
		stm #0h,spcd1		;0000000000000000 => XCR11.
					;RES(15)=0,XFRLEN1(14-8)=000 0000
					;XWDLEN1(7-5)=000,RES(4-0)=0 0000
		stm #5,spsa1		;choose XCR21
		stm #10h,spcd1		;0000000000000000 => XCR21.
					;XPHASE(15)=0,XFRLEN2(14-8)=000 0000
					;XWDLEN2(7-5)=000,XCOMPAND(4-3)=10(No compand)
					;XFIG(2)=0,XDATDLY(1-0)=00
		stm #6,spsa1		;choose SRGR11
		stm #1c8h,spcd1		;0000000100001111 => SRGR11 (100M/200=500k)
					;FWID(15-8)=0000 0001,CLKGDV(7-0)=1100 1000
		stm #7,spsa1		;choose SRGR21
		stm #02000H,spcd1	;0010000000000000 => SRGR21
					;GSYNC(15)=0,CLKSP(14)=0,CLKSM(13)=1(use CPU_clk)
					;FSGM(12)=0(1->Internal SRG generate Transmit FS)
					;FPER(11-0)=0000 0000 0000
		stm #0eh,spsa1		;choose PCR1
		stm #0a0eh,spcd1		;0000101000001110 => PCR1
					;RES(15-14)=00,XIOEN(13)=0,RIOEN(12)=0
					;FSXM(11)=1,FSRM(10)=0,CLKXM(9)=1,CLKRM(8)=0
					;RES(7)=0,CLKS_STAT(6)=0,DX_STAT(5)=0,RX_STAT(4)=0
					;FSXP(3)=1,FSRP(2)=1,CLKXP(1)=1,CLKRP(0)=0
		rpt #0ffh
		nop
		
		stm #0,spsa1		;choose SPCR11
		stm #0a001h,spcd1	;1010000000000001 => SPCR11. 
					;McBSP1 receive enabled. 
		stm #1,spsa1		;choose spcr21
		stm #1c1h,spcd1		;0000000111000001 => SPCR21.
					;McBSP1 sample rate generator,transmit enabled. 
		nop
		stm #0ffh,dxr11		;first data writed to dxr11
		nop
		ret
;----------------------------------------------------------
;  clear receive buffer(buffer_1), and init send buffer
;---------------------------------------------------------
Clear_McBSP1_receive_buf:
		stm #buffer_2,ar4         
		nop
		nop
		rpt #999
		st #0,*ar4+ 
		
		stm #999,brc
		stm #buffer_1,ar4
		nop
		nop
		xor a             ; A=0
		rptb  s_buf1
		stl  a,*ar4+
        add #2h,a
s_buf1:        
		nop
	    nop
		ret
;------------------------------------------------------------
; Mcbsp1 receive  program !
;------------------------------------------------------------
McBSP1_receive_int:  
        pshm st0
        pshm st1
        ld #0,dp
		sub #1,b  
		xor a
		sub drr11,a  
;		and #0ffh,a
;	    xor #055h,a
        
		stl a,*ar4+
		nop 
		popm st1
		popm st0
		rete
;------------------------------------------------------------
; Mcbsp1 receive  program !
;------------------------------------------------------------
McBSP1_transmit_int:
		ld *ar3+,a
		stlm a,dxr11
		nop
		rete
		.end

 

⌨️ 快捷键说明

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