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

📄 exer4.asm

📁 基于TMS320C5410的串口测试程序
💻 ASM
字号:
;----------------------------------------------------------------
; This program use McBSP1 sent SINE table.The table is in VC5402'
; ROM.So, the program move the talbe to xbuffer first, then send
; them from McBSP1.The rbuffer use to save recived data !
;----------------------------------------------------------------
     .title  "for test BSP program  (Transmit) "
     .mmregs
     .global _c_int00,int_send,int_rev
     
;----------define serial control registers' address--------
DRR10			.set	0x0021		; McBSP0 data receive register 1
DRR11			.set	0x0041		; McBSP1 data receive register 1
DRR12			.set	0x0031		; McBSP2 data receive register 1

DXR10			.set	0x0023		; McBSP0 data transmit register 1
DXR11			.set	0x0043		; McBSP1 data transmit register 1
DXR12			.set	0x0033		; McBSP2 data transmit register 1

MCBSP0_SPSA		.set	0x0038
MCBSP0_SPSD     .set	0x0039
MCBSP1_SPSA     .set	0x0048		; serial 1
MCBSP1_SPSD		.set	0x0049      ; serial 1

MCBSP2_SPSA     .set	0x0034
MCBSP2_SPSD     .set	0x0035

MCBSP_SPCR1_SUB_ADDR	.set	0x0000
MCBSP_SPCR2_SUB_ADDR   	.set	0x0001 
MCBSP_RCR1_SUB_ADDR   	.set	0x0002
MCBSP_RCR2_SUB_ADDR   	.set	0x0003
MCBSP_XCR1_SUB_ADDR   	.set	0x0004
MCBSP_XCR2_SUB_ADDR   	.set	0x0005
MCBSP_SRGR1_SUB_ADDR   	.set	0x0006
MCBSP_SRGR2_SUB_ADDR   	.set	0x0007
MCBSP_MCR1_SUB_ADDR		.set    0x0008
MCBSP_MCR2_SUB_ADDR    	.set	0x0009
MCBSP_RCERA_SUB_ADDR	.set	0x000a
MCBSP_RCERB_SUB_ADDR	.set	0x000b
MCBSP_XCERA1_SUB_ADDR	.set	0x000c
MCBSP_XCERA2_SUB_ADDR	.set	0x000d
MCBSP_PCR_SUB_ADDR		.set	0x000e

stack_size	.set	100h

temp		.usect ".var",1		; temp is in 60h-7fh, dp=0;
send_ptr	.usect ".var",1    	; save sent buf ptr
rev_ptr		.usect ".var",1     ; save rev buf ptr
isnew		.usect ".var",1     ;	
                                     
xbuffer	.usect ".xbuf",128
rbuffer .usect ".rbuf",128

     .bss addr_stack,stack_size
     
     .text            

_c_int00:
     ssbx intm                  ; disable all interrupt !
     stm  #2028h,PMST			; vector in 1800h
     stm  #addr_stack+stack_size,sp	; init SP
     stm  #0c00h,IMR              ; enable serial_1 send !
     
     stm  #xbuffer,ar0
     rpt  #127
     mvpd #0fe00h,*ar0+			; move sine tabel to xbuffer !
     
     stm  #rbuffer,ar0
     rpt  #127
     st   #0,*ar0+			   ; clear rev_buffer to 0
     
     stm  #xbuffer,send_ptr	  
     stm  #rbuffer,rev_ptr
                                   
     stm  #128,bk				; circular buffer size=256

;******************************************************************
; The following codes are used to initalize McBSP1 !
; When Transmit, this DES5402PP makes CLK,FS ! the other
; DES5402PP receives the CLK,FS ! 
;******************************************************************
     stm  #0,MCBSP1_SPSA 		; choose SPCR11
     stm  #2000h,MCBSP1_SPSD	; receive sign_extend in DRR
     stm  #1,MCBSP1_SPSA        ; choose SPCR20
     stm  #100h,MCBSP1_SPSD     ; 
     stm  #2,MCBSP1_SPSA        ; choose RCR10
     stm  #40h,MCBSP1_SPSD      ; 16 bits each word
     stm  #3,MCBSP1_SPSA        ; choose RCR20
     stm  #40h,MCBSP1_SPSD
     stm  #4,MCBSP1_SPSA        ; choose XCR10
     stm  #40h,MCBSP1_SPSD      ; 16 bits each word
     stm  #5,MCBSP1_SPSA        ; choose XCR20
     stm  #0,MCBSP1_SPSD
     stm  #6,MCBSP1_SPSA        ; choose SRGR1
     stm  #1C8h,MCBSP1_SPSD      ; CLKG=100M /200=500K
     stm  #7,MCBSP1_SPSA        ; choose SRGR2
     stm  #2000h,MCBSP1_SPSD    ; Sample rate generator clock derived from CPU clock
                                ; 0x8,0x9,0xa,0xb,0xc,0xd all = 0x0
     stm  #0eh,MCBSP1_SPSA      ; choose PCR0
     stm  #0a0eh,MCBSP1_SPSD    
     
     rpt  #0ffh
     nop

     stm  #0h,MCBSP1_SPSA 
     stm  #2001h,MCBSP1_SPSD	; enable recive !
     stm  #1,MCBSP1_SPSA
     stm  #1c1h,MCBSP1_SPSD     ; enable transmit !
     stm  #0,DXR11
          
;------ init serial port 1 end -----------------------------
     rsbx intm                     ; enable all int, 
again:
     nop
     nop
     b    again    
     nop
;-------------------------------------------------------------
;  interrupt for INT_BXINT !
;-------------------------------------------------------------
int_send:
          pshm st0
          pshm st1      
          pshm ar2
          
          ld  #0,dp
          mvdk send_ptr,ar2		    ; restore send ptr !
          mvdk *ar2+%, DXR11	    ; send data to serial port
          nop
          nop
          mvmd ar2,#send_ptr	 	; save send ptr !

          popm ar2
          popm st1
          popm st0
          rete    
;-------------------------------------------------------------
;  interrupt for INT_BRINT !
;-------------------------------------------------------------
int_rev:  
          pshm st0
          pshm st1   
          pshm ar2   
          
          ld #0,dp
          mvdk rev_ptr,ar2	   ; restore rev ptr !
          ld DRR11,a
          stl a,*ar2+%	   ; save data to rev_buf
;          nop
;          nop
          mvmd ar2,#rev_ptr	   ; save rev ptr !

          cmpm ar2,#0400h
          bc con,ntc
          nop 				  ; set breakpoint here !
          nop                 ; show wave in 0x200 and 0x400
con:          
          popm ar2
          popm st1
          popm st0
          rete          

        .end

⌨️ 快捷键说明

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