📄 boot.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
;由CPLD中的代码控制
ST #0xaa,*(0xd555) ;AAH--->5555H
;地址的高位减8
nop
nop
ST #0x55,*(0xaaaa) ;55H--->2AAAH
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
STM #200,AR1
erase_loop:
RPT #(50000-1)
NOP
BANZ erase_loop,*AR1-
RET
********************************************************
prog_flash:
ST #(0x2000-8),*(adder) ;*(adder)=0x1ff8
STM #(0x1000+8+2),AR3 ;前面加了8个,后面加了两 个0
STM #0x8000,AR2
prog1:
LD *(adder),A ;A=0x1ff8
ADDM #1,*(adder) ;*(adder)=0x1ff9
READA *(byte_l) ;*(byte_l)=0x08AA
LD *(byte_l),A ;A=0x08AA
ANDM #0xff,*(byte_l) ;*(byte_l)=0x00AA
STL A,-8,*(byte_h) ;*(byte_h)=0x0008
ANDM #0xff,*(byte_h) ;*(byte_h)=0x0008
nop ;开始写FLASH
nop
ST #0xaa,*(0xd555) ;AAH--->5555H
nop
nop
ST #0x55,*(0xaaaa) ;55H--->2AAAH
nop
nop
ST #0xa0,*(0xd555) ;A0H--->5555H
prog_hw:
MVKD *(byte_h),*AR2 ;*(0x8000)=0x0008
RPT #(1000-1)
NOP
NOP
NOP
NOP
prog_hr:
MVDK *AR2,*(x) ;*(x)=0x0008
LD *(byte_h),A ;A=0x0008
XOR *(x),A ;A=0x0000
AND #0x80,A
BC prog_hr,ANEQ
*-------------------------------------------------------
LD *AR2+,A ;AR2++ A=0x0008
nop
nop
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 ;*(0x8001)=0x00AA
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++(开始在FLASH中写入下个固定的值)
*------------------------------------------------------
BANZ prog1,*AR3-
RET
*********************************************************
boot_table:
STM #(0x2000-8),AR3
RPT #(8-1)
MVPD #boot1,*AR3+
STM #(0x2000+0x1000),AR3
RPT #(2-1)
ST #0,*AR3+
RET
boot1:
.data
.word 0x08aa,0x7e08,0xf800,0x0000
.word 0x2000,0x1000,0x0000,0x2000
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -