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

📄 wrtat29.asm

📁 C5402DSP汇编编写的C5402的自举程序
💻 ASM
字号:
               .mmregs 
               .global _c_int00
               .ref init_54
               
dst_xpc	       	.set    60h
source          .set    61h    
destinate       .set    62h    
length          .set    63h    
src_addr        .set    64h    
dst_addr        .set    65h 
count          	.set    66h 


tmp_cmd         .set    67h
tmp_dat         .set    68h
tmp_addr        .set    69h

WriteCode1      .set    0x00aa
WriteCode2      .set    0x0055
WriteCode3      .set    0x00a0

WriteAddr1      .set    0xd555
WriteAddr2      .set    0xaaaa
WriteAddr3      .set    0xd555

EraseCode1      .set    0x00aa
EraseCode2      .set    0x0055
EraseCode3      .set    0x0080
EraseCode4      .set    0x00aa
EraseCode5      .set    0x0055
EraseCode6      .set    0x0050;0x0010

EraseAddr1      .set    0xd555
EraseAddr2      .set    0xaaaa
EraseAddr3      .set    0xd555
EraseAddr4      .set    0xd555
EraseAddr5      .set    0xaaaa
EraseAddr6      .set    0x8000;0xd555

               
****************** inseted wait number ***************************
waitcoun       .set       1000h

	       .sect      "mainprg"
_c_int00:      
			   SSBX    INTM
			   RSBX    CPL
			   NOP
			   NOP
               ld      #0,dp
               NOP
               NOP
               NOP
               NOP
	     
               stm     #7fh,sp 
               
               CALL    init_54

               CALL    erase
               ST      #0,count
erase_end:
               RPT     #0x7fff
               NOP
               RPT     #0x7fff
               NOP
               ADDM    #1,*(count)
               NOP
               NOP
               CMPM    *(count),#0x10
               BC      #erase_end,NTC
               ;CALL    write
               CALL    write_prog
             
wait:         
               NOP
               NOP
               B        wait   
               
;erase function 
erase:
		st      #EraseCode1,tmp_cmd           
        nop
        ld		#EraseAddr1,a  
        nop
        nop
        writa  	tmp_cmd
        rpt     #1000
        nop	
        ; 发写入命令2
        st      #EraseCode2,tmp_cmd           
        nop
        ld		#EraseAddr2,a  
        nop
        nop
        writa  	tmp_cmd
        rpt     #1000
        nop	
        ; 发写入命令3
        st      #EraseCode3,tmp_cmd           
        nop
        ld		#EraseAddr3,a  
        nop
        nop
        writa  	tmp_cmd
        rpt     #1000
        nop	
        ; 发写入命令4
        st      #EraseCode4,tmp_cmd           
        nop
        ld		#EraseAddr4,a  
        nop
        nop
        writa  	tmp_cmd
        rpt     #1000
        nop	
        ; 发写入命令5
        st      #EraseCode5,tmp_cmd           
        nop
        ld		#EraseAddr5,a  
        nop
        nop
        writa  	tmp_cmd
        rpt     #1000
        nop	
        ; 发写入命令6
        st      #EraseCode6,tmp_cmd           
        nop
        ld		#EraseAddr6,a  
        nop
        nop
        writa  	tmp_cmd
        rpt     #1000
        nop	
        RET

;write function 
;input param:
;    tmp_dat :write data
;    tmp_addr:write address
write:
		st      #WriteCode1,tmp_cmd           
        nop
        ld		#WriteAddr1,a  
        nop
        nop
        writa  	tmp_cmd
        rpt     #1000
        nop	
        ; 发写入命令2
        st      #WriteCode2,tmp_cmd           
        nop
        ld		#WriteAddr2,a  
        nop
        nop
        writa  	tmp_cmd
        rpt     #1000
        nop	
        ; 发写入命令3
        st      #WriteCode3,tmp_cmd           
        nop
        ld		#WriteAddr3,a  
        nop
        nop
        writa  	tmp_cmd
        rpt     #1000
        nop
        ; 发写入命令4
        LD      tmp_dat,a
        stl     a,tmp_cmd        
        nop
        ld		tmp_addr,a  
        nop
        nop
        writa  	tmp_cmd
        rpt     #1000
        nop
        RET


****************************** program and erase **********************
write_prog: 
;------------------------------------------------------------
			; asc文件格式:以Code_start为首地址指针
			; 第一个字为目标地址XPC(待写入)
			; 第二个字为需写入的数据长度 
;------------------------------------------------------------
			; 初始化单元
			stm     #Code_start,ar5
            nop
            nop
            ; 以destinate保存目标地址XPC 
            ld      *ar5+,a
            stl     a,dst_xpc   		
            ; 以number保存待写入数据长度(以字为单位)
            ld      *ar5,a
            stl     a,length   		
            ; 以source保存需要进行写入操作的原数据的地址  
            ld      #(Code_start+2),a
            nop
            nop
            stl     a,source       
;-----------------------------------------------------               
;  							write 
;-----------------------------------------------------
			; 初始目的地址低16位
			ST      #8000h,destinate
			NOP
			NOP
			ST      #0,count
			NOP
			NOP
repeat:			
			; 写入最后一块
			LD      source,A
			ADD     count,A
			STLM    A,AR1
			NOP
			NOP
			LD      *AR1,B
			STL     B,tmp_dat
			NOP
			NOP
			
			LD      destinate,A
			ADD     count,A
			STL     A,tmp_addr
			NOP
			NOP
			
			CALL    write
			NOP 
			LD      count,A
			ADD     #1,A
			STL     A,count
			SUB     length,A
			BC      repeat,ALT
			
			ST      #0x8000,tmp_dat
			ST      #0xffff,tmp_addr
			CALL    write
			RPT     #1000
			NOP
			RET
			
			
			                             

                             
               .copy "xf.asc"
                   
               .end   

⌨️ 快捷键说明

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