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

📄 boot.asm

📁 一个C54XX的FLASH烧写程序(将网友的8位烧写方式修改为16位方式
💻 ASM
字号:

*BOOTLOAD
;boot module
;======================== boot.asm =========================
;       
		.mmregs
		.def erase_flash,prog_flash,boot_table
	
		.text
		
*******************************************************
;;;		.bss  io_map,1
		.bss  adder,1
		.bss  byte_h,1
		.bss  byte_l,1
		.bss  x,1
erase_flash:
;;;		ST #0,*(io_map)
;;;		PORTW *(io_map)	,0x8000	   
				;A[19:15]=00000 reference the datasheet page 7,Chip_erase 
		
		
	    ST #0xaa,*(0xd555)		;AAH--->5555H   first Bus write cycle
	    
	    nop
	    nop
	    ST #0x55,*(0xaaaa)		;55H--->2AAAH   2st Bus write cycle

	    nop
	    nop
	    ST #0x80,*(0xd555)		;80H--->5555H

	    nop
	    nop
	    ST #0xaa,*(0xd555)		;AAH--->5555H

	    nop
	    nop
	    ST #0x55,*(0xaaaa)		;55H--->2AAAH
	    
	    nop
	    nop
	    ST #0x10,*(0xd555)		;10H--->5555H   6st Bus write cycle
	    
	    STM #200,AR1
erase_loop:
	    RPT #(50000-1)              ;Delay for erease flash end
	    NOP
	    NOP
	    BANZ erase_loop,*AR1-
	    RET
	    
********************************************************
prog_flash:
		ST #(0x2000-8),*(adder)   ;源地址,2000-8开始的地方放的是boot_table,
								  ;2000放的是用户代码
		STM #(0x2000+8+2),AR3	;长度:前面加了8个boot_table数据,后面加了两个0
		STM #0x8000,AR2          ;目标地址
	

prog1:		
	    LD *(adder),A			;将需要写进FLASH的源地址写到A中
	    ADDM #1,*(adder)
	    READA *(byte_l)          ;取出源地址中的数据
	    

;以下为flash
;;------------16位方式,只要一种方式就行。这里只用写一个字。 
;;;	                             ;参见datasheet中Byte_program命令
;;;	   
	    ST #0xaa,*(0xd555)		;AAH--->5555H
	    
	    nop
	    nop
	    ST #0x55,*(0xaaaa)		;55H--->2AAAH

	    nop
	    nop
	    ST #0xa0,*(0xd555)		;A0H--->5555H
	   
prog_lw:    
		MVKD *(byte_l),*AR2
	    RPT #(1000-1)
	    NOP
prog_lr:    
		MVDK *AR2,*(x)
	    LD *(byte_l),A
	    XOR *(x),A
	    AND #0x80,A
	    BC prog_lr,ANEQ
	    
	    LD *AR2+,A 				;AR2++
*------------------------------------------------------
		BANZ prog1,*AR3-
		
*-------------------------------------------------------
*write 0x8000---->0xffff       ;BOOT程序首先读入外部数据区0xffff的
						     ;内容作为代码存放源地址 
*                            ;这里是0x8000

		STM 0xffff,AR2
		nop
	    nop
	    ST #0xaa,*(0xd555)		;AAH--->5555H
	    
	    nop
	    nop
	    ST #0x55,*(0xaaaa)		;55H--->2AAAH

	    nop
	    nop
	    ST #0xa0,*(0xd555)		;A0H--->5555H
	    
	   
prog_hw2:    
		ST 0x8000,*(byte_h)
		MVKD *(byte_h),*AR2
	    RPT #(1000-1)
	    NOP
prog_hr2:    
		MVDK *AR2,*(x)
	    LD *(byte_h),A
	    XOR *(x),A
	    AND #0x80,A
	    BC prog_hr2,ANEQ
		
		RET

*********************************************************
boot_table:
		STM #(0x2000-8),AR3
		RPT #(8-1)
		MVPD #boot1,*AR3+       ;将boot_table的8个数据防到1ff8~2000,以和用户代码形成连续地址,方便搬移处理
		
		
		STM #(0x2000+0x1000),AR3
		RPT #(2-1)
		ST #0,*AR3+             ;写2个0作为结束符
		
		RET 
boot1:		
		.data                   ;boot_table的含义请参见相关书籍(8位并行方式,参见P341张伟雄)
		.word 0x10aa,0x7e08,0xf800,0x0000
		.word 0x2000,0x1000,0x0000,0x2000
*先读I/O的0xffff处,如不是再读DATA的0Xffff处的		
*0x08aa;0x08aa为8位并行引导标识,0x10aa为16位并行引导标识。
*0x7e08;等待状态SWWSR
*0xf800;BSCR
*0x0000;ENTER POINT(XPC)
*0x2000;ENTER POINT(PC)
*0x1000;SIZE(LONGTH) OF FIRST SECTION
*0x0000;DESTINATION OF FIRST SECTION (XPC)
*0x2000;DESTINATION OF FIRST SECTION (PC)
	    
	    
	    
	    

⌨️ 快捷键说明

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