flash.asm

来自「一个测试凌阳61板中FLASH的程序」· 汇编 代码 · 共 107 行

ASM
107
字号
.include hardware.inc

.define C_FLASH_SIZE 			0x8000
.define C_FLASH_BLOCK_SIZE 		0x0100
.define C_FLASH_MATCH 			0xAAAA
.define C_FLASH_PAGE_ERAZE		0x5511
.define C_FLASH_WORD_CTRL		0x5533
.define C_FLASH_ARRAY_CTRL 		0x5544
.define C_FLASH_CTRL			0x7555
.external _write;
.code
.public _Flash_Write_Word
_Flash_Write_Word: .proc
	push bp to [sp];
	bp=sp+1;
	push r1,r4 to [sp];
	r1=C_FLASH_MATCH;
	[C_FLASH_CTRL]=r1;
	r1=C_FLASH_WORD_CTRL;
	[C_FLASH_CTRL]=r1;	
	r1=[bp+3];
	r2=[bp+4];
	[r1]=r2;
	pop r1,r4 from [sp];
	pop bp from [sp];
	retf;
.endp

.public _Flash_Write_Array
_Flash_Write_Array:.proc
	push bp to [sp];
	bp=sp+1;
	push r1,r4 to [sp];
	r1=[bp+3];
	r2=[bp+4];
	r3=[bp+5];
	r4=C_FLASH_MATCH;
	[C_FLASH_CTRL]=r4;
_Flash_Write_Array_Loop:
	r4=C_FLASH_ARRAY_CTRL;
	[C_FLASH_CTRL]=r4;
	R4=[R2++];
	[R1++]=R4;
	R3-=1;
	JNZ _Flash_Write_Array_Loop;
	[C_FLASH_CTRL]=R3;
	pop r1,r4 from [sp];
	pop bp from [sp];
	retf;
.endp

.public _Flash_Erase
_Flash_Erase:.proc
	push bp to [sp];
	bp=sp+1;
	push r1,r4 to [sp];
	r1=C_FLASH_MATCH;
	[C_FLASH_CTRL]=r1;		
	r1=C_FLASH_PAGE_ERAZE;
	[C_FLASH_CTRL]=r1;	
	r1=[bp+3];
	[r1]=r1;
	pop r1,r4 from [sp];
	pop bp from [sp];
	retf;
.endp

.public _readtest
_readtest:.proc
	push r1 to [sp]
	r1=[0xf000];
	[P_IOB_Data]=r1;
	pop r1 from [sp]
	retf;
	.endp
	
.public _system
_system:.proc
	r1=0xffff;
	[P_IOB_Dir]=r1;
	[P_IOB_Attrib]=r1;
	r1=0;
	[P_IOB_Data]=r1;
	r1=0xffff;
	r1=0;
	[P_IOA_Dir]=r1;
	[P_IOA_Attrib]=r1;	
	[P_IOA_Data]=r1;
	retf;
	.endp
	
.public _scan
_scan:.proc
	push r1 to [sp];
	r1=[P_IOA_Data];
	test r1,1;
	jz write;
	call _readtest;
	jmp _scan_end;
write:
	test r1,2;
	jz _scan_end;
	call _write;
_scan_end:
	pop r1 from [sp];
	retf;
	.endp

⌨️ 快捷键说明

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