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

📄 flash.asm

📁 SEED_TMS320vc5402dsk是在TI的TMS320VC5402DSK板基础上简化开发出来的
💻 ASM
字号:
************************************************************************************
*                                                                                  *
*                       Flash testing for Vc5402 dsk demo                          *
*                                                                                  *
************************************************************************************                                                                                 
			.copy  "flash.h" 
			.copy  "VC5402.h"
               
			.global _main
			
			
			.text

__STACK_SIZE	.set	400H
__stack		.set	3C00H

_main:
        		STM	#(__stack+__STACK_SIZE-1),SP   ; set to beginning of stack memory
						                           ; add size to get to top
				ANDM	#0fffeh,*(SP)		       ; make sure it is an even address
	
				SSBX	SXM
				RSBX    XF
				NOP
				NOP
				NOP
				NOP
				SSBX    XF			               ; turn on SXM for LD #cinit,A
        
        		ANDM #0000H,*(IMR)		           ; 屏蔽所有的可屏蔽中断
				ANDM #OVLY_0,*(PMST)	           ; OVLY = 0
				ORM	 #MP_1,*(PMST)		           ; MP/MC = 1
				RSBX CPL                           ; make the DP is ok
				STM	 #SWWSR_VAL,SWWSR	           ; 配置软件等待寄存器
				STM	 #SWCR_VAL,SWCR			
*               RSBX	FRCT

    	   		LD   #04H,DP
    	    	LD	1H,-1,A            ; the page address is 0x0000H
    	  	    nop
    	  	    nop
    	  	    nop
*    	  	    PORTW	*(AL),04H
*    	  	    PORTW 14H, 1H                       ; make flash is at the program memory
				PORTR	4H,1H
                NOP
                NOP
                NOP
                nop
*                B $-7
                
flash_rst:      LD 0,A
                STM #Flash_base,AH
                STM #Flash_555,AL
                ST #Flash_rst,1H
                nop
                nop
                nop
                nop
                WRITA 1H 
                nop
                nop
                nop
                nop                        ; Flash reset
*                b $-7
                
                CALL flash_erase 
                ST #0cH,4H               ; The length of the flash that you want to be write                                                                                               
                STM #Flash_base,BH       ;the entrance for write flash is B
                STM #0,BL
                ST #5555H,3H             ; the data which write to flash is 0x203H
                CALL bwrite
                CALL flash_erase
                ST #0cH,4H                                                                                                          
                STM #Flash_base,BH       
                STM #0,BL
                ST #0aaaaH,3H
                CALL bwrite
                b $ 


flash_erase:    STM #Flash_base,AH                 ; High address of the flash is 0x80000H        
                
                STM #Flash_555,AL
                ST #Flash_UL1,1H
                WRITA 1H                          ;AAH --> (80555H)
                
                STM #Flash_2AA,AL
                ST #Flash_UL2,1H
                WRITA 1H                          ;55H --> (802AAH) 
                
                STM #Flash_555,AL
                ST #Flash_ERASE,1H
                WRITA 1H                          ;80H --> (80555H)
                
                STM #Flash_555,AL
                ST #Flash_UL1,1H
                WRITA 1H                          ;AAH --> (80555H)
                
                STM #Flash_2AA,AL
                ST #Flash_UL2,1H
                WRITA 1H                          ;55H --> (802AAH) 
        
                STM #Flash_555,AL
                ST #Flash_CE,1H
                WRITA 1H
                nop
                nop
                nop
                nop
                nop                          ;AAH --> (80555H)
                
erase_poll:     STM #0H,AL
                READA 1H
                BITF 1H,#Polling_Bit
                BC erase_poll,NTC                  ; Is the action for erase "ok"?
                
    			STM #0H,AL
                STM #03H,BH
                STM #0FFFFH,BL
erase_check:    READA 1H
                CMPM 1H,#Flash_BLANK
                BCD erase_err,NTC
                ADD #1,A
                SUB #1,B
                BCD erase_check,BNEQ
                NOP
                NOP
                NOP
                NOP
                LD #1,A
                NOP
                NOP
                BD erase_end
erase_err:      LD #0H,A                
erase_end:      NOP
                RET

; the block for flash write 
                
                
                
bwrite:         CALL flash_write
                ADD #1,B
                STL B,-16,0H
                LDU 0H,A
                XOR 4H,A
                STM #0,AH
                BC  bwrite,ANEQ
                NOP
                NOP
                NOP
                RET
                B $
                
                                                     
flash_write:    STM #Flash_base,AH
                STM #Flash_555,AL        ; The start address of the flash is 0x80000H
                ST #Flash_UL1,1H
                WRITA 1H                 ;AAH --> (80555H)
                
                STM #Flash_2AA,AL
                ST #Flash_UL2,1H
                WRITA 1H                 ;55H --> (802AAH) 
                
                STM #Flash_555,AL
                ST #Flash_PRG,1H
                WRITA 1H                 ;A0H --> (80555H)
                
                NOP
                NOP
                NOP
                LD B,A                   
                WRITA 3H                 ;AAH --> (80555H)
                
program_poll:   READA 2H
                READA 5H
                LDU 2H,A
                XOR 3H,A
                STL A,2H
                BITF 2H,#Polling_Bit
                BC program_poll,TC                  ; Is the action for erase "ok"?                
                
                LDU 5H,A
                XOR 3H,A
                STM #0,AH
                LD #1,A
                XC 1,ANEQ
                LD #0,A 
                RET
                .end
                
                                               
                
                










               
               

⌨️ 快捷键说明

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