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

📄 progflash1.asm

📁 dsp自编程源代码
💻 ASM
字号:
	.include "initdsp.inc"
	.global  _BurnOneFrame
	.mmregs
	.sect ".text" ;此段放入.text段中
	.bss   _FlashBuffer1,128
	.global   _FlashBuffer1
	.bss   FLASH_CMD1,	1
	.bss   FLASH_CMD2,	1
	.bss   FLASH_CMD3,	1
	.bss   FLASH_CMD4,	1
	.bss   FLASH_CMD5,	1
	.bss   FLASH_CMD6,	1
	.bss   FLASH_CMD7,	1
	.bss   FLASH_CMD8,	1	
	.bss   _FLASH_START,	1;烧写的起始地址
	.global   _FLASH_START 
	.bss   Device_Code, 1
	.bss   TestData,	1
	;.bss   DataToggleTmp, 1;读取数据的D6进行比较
	   	
		
;宏定义
Software_ID_Entry	.macro		;Software ID Entry
			nop
			nop
			stm #FLASH_CMD1,ar2	;发送第一个命令
			stm #0D555H,ar3
			mvdd *ar2,*ar3 		
			nop
			nop
			stm #FLASH_CMD2,ar2	;发送第二个命令		
			stm #0AAAAH,ar3
			mvdd *ar2,*ar3
			nop
			nop
			stm #FLASH_CMD3,ar2	;发送第三个命令			
			stm #0D555H,ar3
			mvdd *ar2,*ar3		
			nop
			nop
			.endm

Software_ID_Exit	.macro		;Software ID Exit
			nop
			nop
			stm #FLASH_CMD1,ar2	;发送第一个命令
			stm #0D555H,ar3
			mvdd *ar2,*ar3 		
			nop
			nop
			stm #FLASH_CMD2,ar2	;发送第二个命令				
			stm #0AAAAH,ar3
			mvdd *ar2,*ar3 				
			nop
			nop
			stm #FLASH_CMD4,ar2	;发送第四个命令					
			stm #0D555H,ar3
			mvdd *ar2,*ar3
			nop
			nop
			.endm

Software_Chip_Erase	.macro		;Software Chip Erase
			nop
			nop
			stm #FLASH_CMD1,ar2	;发送第一个命令	
			stm #0D555H,ar3
			mvdd *ar2,*ar3 			
			nop
			nop
			stm #FLASH_CMD2,ar2	;发送第二个命令				
			stm #0AAAAH,ar3
			mvdd *ar2,*ar3 	
			nop
			nop
			stm #FLASH_CMD5,ar2	;发送第五个命令					
			stm #0D555H,ar3
			mvdd *ar2,*ar3
			nop
			nop
			stm #FLASH_CMD1,ar2	;发送第一个命令	
			stm #0D555H,ar3
			mvdd *ar2,*ar3 	
			nop
			nop				
			stm #FLASH_CMD2,ar2	;发送第二个命令				
			stm #0AAAAH,ar3
			mvdd *ar2,*ar3 	
			nop
			nop	
			stm #FLASH_CMD6,ar2	;发送第六个命令	
			stm #0D555H,ar3
			mvdd *ar2,*ar3 	
			nop
			nop	
			.endm
			
Software_Data_Protect_Disable	.macro		;Software_Data_Protect_Disable
			nop
			nop
			stm #FLASH_CMD1,ar2	;发送第一个命令	
			stm #0D555H,ar3
			mvdd *ar2,*ar3
			nop
			nop
			stm #FLASH_CMD2,ar2	;发送第二个命令				
			stm #0AAAAH,ar3
			mvdd *ar2,*ar3 
			nop
			nop
			stm #FLASH_CMD5,ar2	;发送第五个命令					
			stm #0D555H,ar3
			mvdd *ar2,*ar3
			nop
			nop
			stm #FLASH_CMD1,ar2	;发送第一个命令	
			stm #0D555H,ar3
			mvdd *ar2,*ar3
			nop
			nop				
			stm #FLASH_CMD2,ar2	;发送第二个命令				
			stm #0AAAAH,ar3
			mvdd *ar2,*ar3 
			nop
			nop	
			stm #FLASH_CMD7,ar2	;发送第七个命令					
			stm #0D555H,ar3
			mvdd *ar2,*ar3
			nop
			nop	
			.endm

Page_Write	.macro		;Page Write
			nop
			nop
			stm #FLASH_CMD1,ar2	;发送第一个命令	
			stm #0D555H,ar3
			mvdd *ar2,*ar3
			nop
			nop
			stm #FLASH_CMD2,ar2	;发送第二个命令				
			stm #0AAAAH,ar3
			mvdd *ar2,*ar3 
			nop
			nop
			stm #FLASH_CMD8,ar2	;发送第八个命令					
			stm #0D555H,ar3
			mvdd *ar2,*ar3
			nop
			nop
			.endm


StatusDetection:
		nop
		nop
		;stm #DataToggleTmp,ar2;//
		;//stm #0D555H,ar3
		stm #23h,ar6;//这是一个任意数
		nop
DataToggleLoopStart:
		nop
		nop
		mvmm ar0,ar6;//将以前的值保存
		ld *(0ffffh),a;//从任意地址读数据
		nop
		nop
		and #40h,a;//只取D6
		nop
		nop
		stlm a,ar0
		nop
		nop
		cmpr EQ,ar6;//让ar6与ar0比较
		nop
		nop
		BC DataToggleLoopEnd,TC;//两次的数据相同
		nop
		nop
		B DataToggleLoopStart
DataToggleLoopEnd:
		nop
		nop	
		ret
		
		



			
_BurnOneFrame:
	pshm st0	;保护DP
	ld	#0,DP	;数据页空间设置为0
	st #00aah,*(FLASH_CMD1);//填写命令字
	st #0055h,*(FLASH_CMD2)
	st #0090h,*(FLASH_CMD3)	
	st #00f0h,*(FLASH_CMD4)
	st #0080h,*(FLASH_CMD5)	
	st #0010h,*(FLASH_CMD6)	
	st #0020h,*(FLASH_CMD7)	
	st #00a0h,*(FLASH_CMD8)	
	st #8080h,*(TestData);烧写的起始地址为8000h	
	nop
	nop
;	stm #8001h,ar2
;	stm #Device_Code,ar3
;	stm 100,brc
;	rptb sss-1
;	nop
;	nop
;	mvdd *ar2+,*ar3
;	nop
;	nop
;sss:
	
;	Software_ID_Entry
;	stm #8000h,ar2
;	nop
;	nop
;	stm #Device_Code,ar3
;	nop
;	nop	
;	mvdd *ar2+,*ar3;读厂商代码	0xbf
;	nop
;	nop
;	mvdd *ar2,*ar3;读器件代码	0x12	
;	nop
;	nop
;	Software_ID_Exit	
;	nop	
;	nop	
;	call Delay10ms
;	nop
;	nop
;	Software_Chip_Erase
;	call Delay10ms
;	nop
;	nop
	Page_Write
	mvdm *(_FLASH_START),ar5
	nop
	nop
	stm _FlashBuffer1,ar2
	nop
	nop
	stm #127,brc
	rptb OneByteOver-1


	
	nop
	nop
;	st #0cch,*(TestData)
	nop
	nop

	;stm TestData,ar2
	nop
	nop	
	mvdd *ar2+,*ar5+;按页写
	nop	
	nop
	nop
	nop
OneByteOver:
	;call Delay10ms
	nop
	call StatusDetection
	nop	
	;mvmd *(ar5),_FLASH_START
	;mvdd *ar2,*ar3;读器件代码	0x12
	nop
	popm st0
	nop
	nop
	ret	
	
	
Delay10ms:	stm	#0100h, brc
			rptb Delay1ms-1
			stm #0100h,ar4		;此时CPU速度为8MHz
Delay1us:	banz Delay1us,*ar4-
			nop
			nop
Delay1ms:
			nop
			ret

⌨️ 快捷键说明

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