📄 3-6.asm
字号:
.mmregs
SWCR .set 002BH ;定义SWCR寄存器
OUTDATA1 .set 0000H ;定义DA输出数值1
OUTDATA2 .set 07FFH ;定义DA输出数值2
K_IPTR .set 000111000B<<07 ;定义中断入口地址高9bit
K_TEMP .set 1111111B ;定义中断入口地址低7bit
.data ;数据段开始
RES_SPACE: ;程序标号
.space 07E0h ;将前127个字节预留
.word 8000h
.word 0000H
.sect ".DISPLAY"
.label DISPLAY_SRC
.word 08AAH ;定义BOOT启动方式,并行8bit
.word 7fffH ;SWWSR的值
.word 0F000H ;BSCR的值
.word 0000h ;xpc 的值
.word 0200h ;pc 的值
.word 01e0h ;程序长度
.word 0000h ;第一段的xpc值
.word 0100h ;第一段的pc值
.copy "vectors.asm" ;拷贝中断向量表程序
start: ;以下斜体部分为写入Flash的程序,这里不做说明
stm #3000h,sp ;如果写入的内容改变,可以将用户程序替代斜体
STM #80H,AR2 ;部分程序就可以了
STM #81H,AR3
ST #outdata1,*ar2
ST #outdata2,*ar3
begin:
portw *ar2,0bfffh
rpt #7fffh
nop
portw *ar3,0bfffh
rpt #7fffh
nop
b begin ;程序结束
.space 2000h ;以下程序实现将斜体部分程序内容写入Flash中
.label DISPLAY_END
.text
MAIN_START:
STM #3000h,SP
STM #0FFA0H,PMST
STM #07FFFH,SWWSR
STM #0FFFFH,SWCR
STM #0H,34H
STM #0H,35H
STM #1H,34H
STM #0H,35H
STM #0EH,34H
STM #3F4FH,35H
SSBX INTM ;关闭所有中断
STM #8000h,AR6
STM #8000H,AR3 ;写入的地址
STM DISPLAY_SRC,AR5 ;写入的程序头
STM #0BH,AR4 ;一共写入12页
WRI_RPT:
STM #63,AR1 ;一页写入64个字节,在Flash中为128个字节
WRI_LOP:
LD *AR5,-8,A ;将128个半字节依次写入Flash中
NOP
NOP
AND #0FEFFH,A ;将D8数据总线置0,用于Flash的写时钟
NOP
NOP
STL A,*AR6
NOP
NOP
LD *AR5,-8,A
NOP
NOP
OR #0100H,A ;将D8数据总线置1
NOP
NOP
STL A,*AR6+ ;地址加1,准备写入下一个数据
NOP
NOP
LD *AR5,A
NOP
NOP
AND #0FEFFH,A
NOP
NOP
STL A,*AR6
NOP
NOP
LD *AR5+,A
NOP
NOP
OR #0100H,A
NOP
NOP
STL A,*AR6+
NOP
NOP
BANZ WRI_LOP,*AR1-
CALL DELAYY
BANZ WRI_RPT,*AR4-
STM #RES_SPACE,AR1
STM #0FF80H,AR5 ;将原中断向量清零
STM #127,AR3
WRI_LOOP:
LD *AR1,-8,A
NOP
NOP
AND #0FEFFH,A
NOP
NOP
STL A,*AR5
NOP
NOP
LD *AR1+,-8,A
NOP
NOP
OR #0100H,A
NOP
NOP
STL A,*AR5+
NOP
BANZ WRI_LOOP,*AR3-
LOAD_LOOP:
B LOAD_LOOP
DELAYY: ;延时子程序
PSHM AR2 ;等待Flash将一页数据写入的时间,
STM #0020H,AR2
DELAYY_LOOP:
RPT #0fff0h
NOP
BANZ DELAYY_LOOP,*AR2-
POPM AR2
RET
.END ;程序结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -