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 + -
显示快捷键?