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

📄 flash.asm

📁 5000系列DSP实验常用程序
💻 ASM
字号:
**********************************************************************************
*  flash.asm	v1.00      烧写程序	                                             *
*  版权(c) 	2004-		北京百科融创科技有限公司		                         *
*  设计者:	赵治心																 *
*  邮箱:   ourui.wl@263.net								                     *
**********************************************************************************/
	.def _c_int00
    .mmregs
SWCR	.set 2BH
Flash_a1	.set 0d555h
Flash_a2	.set 0aaaah
Flash_page	.set 0h
Polling_Bit	.set	0080h
Flash_block .set 8000h
Code_addr   .set 2000h
Code_length .set 2d00h
Flash_addr  .set 8000h
STACK   .usect "STK",100
	.bss Temp,1
    .text 
_c_int00: 
	SSBX CPL 
	RSBX SXM
	STM #7FFFH,SWWSR             
	STM #0ffe3H,PMST
	STM #0FFFEH,SWCR
    STM #STACK+100h,sp          ;设置堆栈指针
    LD #00h,dp
    STM #0b, CLKMD 				;switch to DIV mode
TstStatu: 
	LDM CLKMD, A
	AND #01b, A 				;poll STATUS bit
	BC TstStatu, ANEQ
	STM #1111001111101111b, CLKMD ;switch to PLL 
	RPT #1000
	NOP
    STM #0000h,imr              ;屏蔽所有中断

    ;初始化cpu完毕 
    CALL Flash_erasechip
    STM	#15H,AR2
DELAY
    RPT	#0FFFFH
    NOP
    BANZ DELAY,*AR2-
START_PROG:                      ;开始烧写FLASH
    ST  #0, *(Temp)    
    STM #Flash_addr,AR4               ;设置FLASH的开始烧写的地址
    STM #Code_addr,AR3           	  ;被烧写的源程序起始地址
    STM #Code_length-1,BRC 		;写入的字节数
    RPTB LOOP1
    CALL Flash_writes             ;烧写FLASH
    NOP
    NOP
LOOP1: NOP
    STM #0FFFFH,AR4              ;向数据空间的FFFF地址写入自举表的首地址8000H   
    CALL Flash_writeword              
    NOP                          ;烧写结束
    NOP
    STM #Flash_addr,AR3
    LD #0,B
    STM #Code_length-1,BRC 		 ;校验
    RPTB LOOP2
	ADD  *AR3+,	B   
    NOP
LOOP2: 
	NOP
	STL  B,*(AR2)
	LD   *(AR2),B
	NOP
	NOP
	SUB *(Temp),B
	BC	ERROR,BNEQ
RIGHT
	B $
ERROR
    B START_PROG

*********************************************************************************

*********************************************************************************
*	FLASH的操作																	*
*********************************************************************************
Flash_erasechip:	
				STM	#Flash_a1,AR2
				ST	#00AAH,*AR2			; AAH -> (X5555H)
				NOP
				NOP
				STM	#Flash_a2,AR2
				ST	#0055H,*AR2			; 55H -> (X2AAAH)
				NOP
				NOP
				STM	#Flash_a1,AR2
				ST	#0080H,*AR2			; 80H -> (X5555H)
				NOP
				NOP
				STM	#Flash_a1,AR2
				ST	#00AAH,*AR2			; AAH -> (X5555H)
				NOP
				NOP
				STM	#Flash_a2,AR2
				ST	#0055H,*AR2			; 55H -> (X2AAAH)
				NOP
				NOP
				STM	#Flash_a1,AR2
				ST	#0010H,*AR2			; 10H -> (X5555H)
				NOP
				NOP
				RET
				
Flash_eraseblock:	
				STM	#Flash_a1,AR2
				ST	#00AAH,*AR2
				NOP						; AAH -> (X5555H)
				NOP
				STM	#Flash_a2,AR2
				ST	#0055H,*AR2
				NOP						; 55H -> (X2AAAH)
				NOP
				STM	#Flash_a1,AR2
				ST	#0080H,*AR2
				NOP						; 80H -> (X5555H)
				NOP
				STM	#Flash_a1,AR2
				ST	#00AAH,*AR2
				NOP						; AAH -> (X5555H)
				NOP
				STM	#Flash_a2,AR2
				ST	#0055H,*AR2
				NOP						; 55H -> (X2AAAH)
				NOP
				STM	#Flash_a1,AR2
				ST	#0050H,*AR2
				NOP						; 10H -> (X5555H)
				NOP
				NOP
				RPT	#0A200H
				NOP
				RET
				
Flash_writes:	
				STM	#Flash_a1,AR2
				ST	#0AAAAh,*AR2		; AAH -> (X5555H)
				NOP
				NOP
				STM	#Flash_a2,AR2
				ST	#05555H,*AR2		; 55H -> (X2AAAH)
				NOP
				NOP
				STM	#Flash_a1,AR2
				ST	#0A0A0h,*AR2		; A0H -> (X5555H)
				NOP
				NOP
				LD  *AR3,	A
				STL	A,	*AR4
				NOP
				NOP
				RPT #01200h
				NOP
				CALL Check_Toggle_Ready
				LD *(Temp),A
				ADD *AR3+,A
				STL A,*(Temp)
				RET
				
Check_Toggle_Ready: 					;need A has been stored the destination address 
				LD   *AR4,	A
				AND 	#0x4040,A 
LoopTog: 
				NOP 
				NOP
				LD 	*AR4+,B
				AND #0x4040,B 
				SUB A,B 
				BC LoopTog,BNEQ
				NOP  
				NOP 
				RET

Flash_writeword:	
				STM	#Flash_a1,AR2
				ST	#00AAh,*AR2			; AAH -> (X5555H)
				NOP
				NOP
				STM	#Flash_a2,AR2
				ST	#0055H,*AR2			; 55H -> (X2AAAH)
				NOP
				NOP
				STM	#Flash_a1,AR2
				ST	#00A0h,*AR2			; A0H -> (X5555H)
				NOP
				NOP
				LD  #8000H,	A
				STL A,	*AR4  
				NOP
				NOP
				RPT #01200h
				NOP
				CALL Check_Toggle_Ready
				NOP
				NOP
				RET			

	.end			

⌨️ 快捷键说明

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