📄 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逻辑控制中选中FLASH存储器,使FLASH的FLASHCE=DS
ST #0xaa,*(0xd555) ;AAH--->5555H
;0xd555的地址线A15为高表示访问的是外部存储器
nop ;5555H是FLASH内部的偏移量
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)
STM #(0x1000+8+2),AR3 ;前面加了8个字的数据格式,后面加了两 个0
STM #0x8000,AR2
prog1:
LD *(adder),A
ADDM #1,*(adder)
READA *(byte_l) ;取低八位数据
LD *(byte_l),A
ANDM #0xff,*(byte_l)
STL A,-8,*(byte_h)
ANDM #0xff,*(byte_h) ;取高八位数据
nop
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 ;将高八位数据写入FLASH
RPT #(1000-1)
NOP
prog_hr:
MVDK *AR2,*(x) ;从FLASH中读入高八位数据
LD *(byte_h),A
XOR *(x),A ;比较写入的数据是否和读出的对应
AND #0x80,A
BC prog_hr,ANEQ
*-------------------------------------------------------
LD *AR2+,A ;AR2++ 将FLASH中的地址加1
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
RPT #(1000-1)
NOP
prog_lr:
MVDK *AR2,*(x)
LD *(byte_l),A
nop
nop
XOR *(x),A
nop
nop
AND #0x80,A
BC prog_lr,ANEQ
LD *AR2+,A ;AR2++
*------------------------------------------------------
BANZ prog1,*AR3- ;比较数据是否写完
RET
*********************************************************
boot_table:
STM #(0x2000-8),AR3 ;在被烧写程序的中断项量表后面加上
RPT #(8-1) ;FLASH数据的存储格式。
MVPD #boot1,*AR3+
STM #(0x2000+0x1000),AR3 ;在被烧写数据的末尾加上两个零
RPT #(2-1)
ST #0,*AR3+
RET
boot1:
.data
.word 0x08aa,0x7e08,0xf800,0x0000
.word 0x2f80,0x1000,0x0000,0x2000
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -