?? 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內(nèi)部的偏移量
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個字的數(shù)據(jù)格式,后面加了兩 個0
STM #0x8000,AR2
prog1:
LD *(adder),A
ADDM #1,*(adder)
READA *(byte_l) ;取低八位數(shù)據(jù)
LD *(byte_l),A
ANDM #0xff,*(byte_l)
STL A,-8,*(byte_h)
ANDM #0xff,*(byte_h) ;取高八位數(shù)據(jù)
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 ;將高八位數(shù)據(jù)寫入FLASH
RPT #(1000-1)
NOP
prog_hr:
MVDK *AR2,*(x) ;從FLASH中讀入高八位數(shù)據(jù)
LD *(byte_h),A
XOR *(x),A ;比較寫入的數(shù)據(jù)是否和讀出的對應
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- ;比較數(shù)據(jù)是否寫完
RET
*********************************************************
boot_table:
STM #(0x2000-8),AR3 ;在被燒寫程序的中斷項量表后面加上
RPT #(8-1) ;FLASH數(shù)據(jù)的存儲格式。
MVPD #boot1,*AR3+
STM #(0x2000+0x1000),AR3 ;在被燒寫數(shù)據(jù)的末尾加上兩個零
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 + -