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

📄 spi-bk.asm

📁 DSP的汇编程序
💻 ASM
字号:
        .include  "F2407REGS.H"
        .def  _c_int0     
        
        .data   
        
INPUT_DATA:		.word 	000H,001H,002H,003H,004H,005H,006H,007H
OUTPUT_DATA:	.word 	0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH 
INPUT_INDEX:	.word   0
        
        .text                 
        
INPUT_SIZE:		.set 	8

CMD_SPI_WRITE   .set	0140H
CMD_SPI_READ    .set	0300H
CMD_SPI_EARSE   .set	01C0H
CMD_SPI_EWEN    .set	0130H
CMD_SPI_EWDS    .set	0100H
CMD_SPI_ERAL    .set	0120H
CMD_SPI_WRAL    .set	0110H

_c_int0 

        CALL  	SYSINIT                 ;调系统初始化程序
        CALL  	SPIINIT                 ;调SPI初始化程序
        
SPI_TEST:        
   		CALL    EARSE_ENABLE
        CALL    WRITE_DATA 
        CALL	READ_DATA       
        
MAIN_LOOP:
		NOP
        B     	MAIN_LOOP

SYSINIT: 
        SETC    INTM
        CLRC    SXM
        CLRC    OVM
        CLRC    CNF
        LDP     #0E0H
        SPLK    #81FEH, SCSR1           ;4倍频CLKIN=10 M, CLKOUT=40 M
        SPLK    #0E8h, WDCR             ;关看门狗
        RET

SPIINIT: 
        LDP     #DP_PF2
        LACL    MCRB
        OR      #001CH                  ;配置SPISIMO,SPISIMI和SPICLK引脚为特殊功能方式
        SACL    MCRB      
        
        LDP     #DP_PF1
        SPLK    #004FH, SPICCR          ;配置SPI寄存器允许初始化, 16位数据输出 
        SPLK    #0007H, SPICTL          ;主机方式, 时钟方式为无延时的下降沿
        SPLK    #004FH, SPIBRR          ;SPI波特率为512KHz      
        SPLK    #00CFH, SPICCR          ;初始化结束, 并关闭初始化使能位
        CLRC    XF
        
        RET                 
        
ENABLE_SPI:
		SETC	XF
		CALL	DELAY
		LDP     #DP_PF1
		RET
		
DISABLE_SPI:
		CLRC	XF
		CALL	DELAY   
		RET		        
        
WAIT_TXRX: 
     	LACC    SPIRXBUF  
LOOP_TXRX:
		BIT   	SPISTS, BIT6           	;等待数据
        BCND    LOOP_TXRX, NTC         	;发送完     
		RET        
		
DELAY: 	RPT     #0FFH
		NOP
		RET  

EARSE_ALL: 
		CALL	ENABLE_SPI  			;SET CS HIGH 
		LACC    #CMD_SPI_ERAL
        SACL    SPITXBUF                ;数据写入到SPI发送缓冲区    
		CALL	WAIT_TXRX
        CALL	DISABLE_SPI	
		
		RET
		
EARSE_ENABLE:
WRITE_ENABLE: 
		CALL	ENABLE_SPI  			;SET CS HIGH 
		LACC    #CMD_SPI_EWEN
        SACL    SPITXBUF                ;数据写入到SPI发送缓冲区    
		CALL	WAIT_TXRX
        CALL	DISABLE_SPI	
        
		RET
		
EARSE_DISABLE:
WRITE_DISABLE:  
		CALL	ENABLE_SPI  			;SET CS HIGH 
		LACC    #CMD_SPI_EWDS
        SACL    SPITXBUF                ;数据写入到SPI发送缓冲区    
		CALL	WAIT_TXRX
        CALL	DISABLE_SPI	
		RET

EARSE:  								;0x1C0 | ADDR_6    
		CALL	ENABLE_SPI  			;SET CS HIGH 
        LDP     #DP_PF1					;WRITE COMMAND    
		;LACC    #CMD_SPI_EARSE | ADDR_6
        SACL    SPITXBUF                ;数据写入到SPI发送缓冲区    
		CALL	WAIT_TXRX
        CALL	DISABLE_SPI	
		RET    
		
WRITE_ALL
		CALL	ENABLE_SPI  			;SET CS HIGH 
		LACC    #CMD_SPI_WRAL
        SACL    SPITXBUF                ;数据写入到SPI发送缓冲区    
		CALL	WAIT_TXRX
        CALL	DISABLE_SPI	
		RET
		
READ_DATA:                            	;CMD : 0x180 | ADDR_6 , DATA16 

		LAR		AR0,#INPUT_INDEX
		LAR     AR1,#OUTPUT_DATA 
		
		LDP		#DP_B01
		LACC	#0
		SACL	INPUT_INDEX

READ_DATA_LOOP:

		CALL	ENABLE_SPI              ;SET CS HIGH 

		LDP		#DP_B01		                                                
		LACC    #CMD_SPI_READ        	;WRITE COMMAND      
		ADD		INPUT_INDEX, 1                       
		
		LAR		AR2, INPUT_INDEX  
		MAR		*, AR2
		ADRK	#1
		SAR		AR2, INPUT_INDEX	
		               
		LDP     #DP_PF1		            
        SACL    SPITXBUF               	;数据写入到SPI发送缓冲区  
        CALL 	WAIT_TXRX  
        
        LACC    #0
        SACL    SPITXBUF                ;数据写入到SPI发送缓冲区    
        CALL 	WAIT_TXRX  
                    
        CALL	DISABLE_SPI  
        LACL    SPIRXBUF                ;数据写入到SPI发送缓冲区 
        
		;LDP		#DP_B01    
		MAR		*, AR1
		SACL	*+
		CMPR	00
		BCND	READ_DATA_LOOP, NTC
        
		RET
		
WRITE_DATA:            					
		LAR		AR0,#OUTPUT_DATA
		LAR     AR1,#INPUT_DATA 
		
		LDP		#DP_B01
		LAR		AR2, #0
		SAR		AR2, INPUT_INDEX
		
WRITE_DATA_LOOP: 
		CALL	ENABLE_SPI    			;SET CS HIGH 
		LACC    #140H					;WRITE COMMAND 
		
		LDP		#DP_B01
		ADD     INPUT_INDEX      
		
		LAR		AR2, INPUT_INDEX  
		MAR		*, AR2
		ADRK	#1
		SAR		AR2, INPUT_INDEX	
		                   
		LDP     #DP_PF1
        SACL    SPITXBUF                ;数据写入到SPI发送缓冲区    
        CALL	WAIT_TXRX                          
                                  
		;LDP	#DP_B01    
		MAR		*, AR1
		LACC	*+
		;LACC    #01349H					;WRITE DATA  
		                
		LDP     #DP_PF1
        SACL    SPITXBUF               	;数据写入到SPI发送缓冲区    
		CALL	WAIT_TXRX
		CALL	DISABLE_SPI				;SET CS LOW 
		CALL	WAIT_WR_RDY            
		
		MAR		*, AR1
		CMPR	00
		BCND	WRITE_DATA_LOOP, NTC
		
		RET             
		
WAIT_WR_RDY:
        CALL	ENABLE_SPI 
        
WAIT_WR_LOOP:   
	    LACC    #0000H					;
        SACL    SPITXBUF 
        CALL	WAIT_TXRX                                        
     
        LACL    SPIRXBUF                ;数据写入到SPI发送缓冲区         
        BCND    WAIT_WR_LOOP, EQ      
        
        CALL	DISABLE_SPI
        
		RET		         

⌨️ 快捷键说明

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