📄 boot.asm
字号:
.title "Flash bootup utility for DM642 EVM"
.option D,T
.length 102
.width 140
; .sect ".boot_load"
.global _boot
eprh .equ 0x01a0ff9c
ciprh .equ 0x01a0ffa4
cierh .equ 0x01a0ffa8
ccerh .equ 0x01a0ffac
erh .equ 0x01a0ffb0
eerh .equ 0x01a0ffb4
ecrh .equ 0x01a0ffb8
pcfglock .equ 0x01b3f018
percfg .equ 0x01b3f000
I2COAR0 .equ 0x01b40000
i2cier0 .equ 0x01b40004
i2cstr0 .equ 0x01b40008
i2cclkl0 .equ 0x01b4000c
i2cclkh0 .equ 0x01b40010
i2ccnt0 .equ 0x01b40014
i2cdrr0 .equ 0x01b40018
i2csar0 .equ 0x01b4001c
i2cdxr0 .equ 0x01b40020
i2cmdr0 .equ 0x01b40024
i2cisrc0 .equ 0x01b40028
reserved .equ 0x01b4002c
i2cpsc0 .equ 0x01b40030
i2cpid10 .equ 0x01b40034
i2cpid20 .equ 0x01b40038
LEDCTLR .equ 0x01b00000
LEDCTLR1 .equ 0x01b00004
LEDCTLR2 .equ 0x01b00008
loog .equ 0x10c0010c ;定时时间长度
.def _main
.def loop
.def loop1
.def loop2
_main:
;;;;;;;;;i0口程序
mvkl LEDCTLR,a1;中断子程序
mvkh LEDCTLR,a1
mvkl 0ffffh,b1 ;控制通用IO口的工作
mvkh 0h,b1
stw b1,*a1
mvkl LEDCTLR1,a1
mvkh LEDCTLR1,a1
mvkl 0ffffh,b1
mvkh 00h,b1
stw b1,*a1
mvkl LEDCTLR2,a1
mvkh LEDCTLR2,a1
mvkl 0ffffh,b1
mvkh 00h,b1
stw b1,*a1;GP0=1 select IIC_set b2
mvkl 10000,a0
bdec $,a0;等待128时钟访问外设
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;开锁程序
mvkl pcfglock,a1
mvkh pcfglock,a1;dsp 的端口锁
ldw *a1,a2
mvkl loog,b1
mvkh loog,b1
stw b1,*a1
nop ;开锁写一次pcfglock开锁再写关锁
mvkl percfg,a1
mvkh percfg,a1;使能外设端口
ldw *a1,a2
mvkl 8h,b1
mvkh 0,b1
or b1,a2,a2
stw a2,*a1;
nop
; ldw *a1,a7
;nop 6
mvkl 128,a0
bdec $,a0;等待128时钟访问外设
;;;;;;;;;;;; 开外设I2C ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;----------初始化i2c外设
mvkl 1ah,b2
mvkh 0h,b2
nop
mvkl I2COAR0,a2
mvkh I2COAR0,a2;设定主机地址
stw b2,*a2
nop
mvkl i2cier0,a1
mvkh i2cier0,a1;设定i2c中断
mvkl 0h,b1;0禁止1使能
mvkh 0h,b1
stw b1,*a1
nop
;;;;;;;;;;;;; 确定scl上的时钟;;;;;;;;;;;
mvkl i2cclkh0,a1
mvkh i2cclkh0,a1;设定分频系数2H
mvkl 1bh,b1
mvkh 0h,b1
stw b1,*a1
nop
mvkl 1bh,b2
mvkh 0h,b2
nop
mvkl i2cclkl0,a2
mvkh i2cclkl0,a2;设定分频系数2L
stw b2,*a2
nop
mvkl 45h,b2
mvkh 0h,b2
nop
mvkl i2cpsc0,a2
mvkh i2cpsc0,a2;设定分频系数1
stw b2,*a2
nop
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; mvkl i2ccnt0,a2
; mvkh i2ccnt0,a2;设定计数器当rm=0
; ldw *a2,a0
; mvkl 4h,b2
; mvkh 0h,b2
; stw b2,*a2
; nop
mvkl i2csar0,a1
mvkh i2csar0,a1;设定从机地址57h
mvkl 57h,b1
mvkh 0h,b1
stw b1,*a1
nop
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;--------------------------------------
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
loop1: mvkl i2cstr0,a1
mvkh i2cstr0,a1;bb=0?
ldw *a1,b2
nop
mvkl 1000h,a0
mvkh 0h,a0
and a0,b2,a0
[a0] b loop1
nop 5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;判断总线忙不忙
mvkl 66a0h,b2
mvkh 0h,b2
nop
mvkl i2cmdr0,a2
mvkh i2cmdr0,a2;设定工作模式
stw b2,*a2
nop 9
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;开始传输数据
mvk 0h,a8
mvk 10h,b8;设定数据量
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
loop2: mvkl i2cstr0,a1
mvkh i2cstr0,a1;nack=0?
ldw *a1,a2
mvkl 2h,a0
mvkh 0h,a0
and a0,a2,a0
[a0] b loop2
nop 5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;察看是否有总线响应
mvkl i2cstr0,a1
mvkh i2cstr0,a1;请求发送数据
ldw *a1,b1
mvkl 10h,a0
mvkh 0h,a0
and a0,b1,a0
nop 9
[!a0] b loop2
nop 9
;;;;;;;;;;;;;;;;;;;;;;;;;;;;察看缓冲器里的数据是否准备好
cmpeq a8,b8,a0
[a0] b loop
add 1,a8,a8
mvkl i2cdxr0,a1
mvkh i2cdxr0,a1;发送数据的值
mvkl 55,b1
mvkh 0h,b1
stw b1,*a1
nop 9
mvkl 1000,a10
bdec $,a10
nop 5
b loop2
nop 5
;;;;;;;;;;;;;;;;;;;;;; 发送数据
loop: mvkl i2cstr0,a1
mvkh i2cstr0,a1;ardy=0
ldw *a1,a2
mvkl 4h,a0
mvkh 0h,a0
and a0,a2,a0
[!a0] b loop
nop 5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;察看是否成功访问
mvkl i2cmdr0,a1
mvkh i2cmdr0,a1
ldw *a1,b1
mvkl 0dfffh,a2
mvkh 0ffffh,a2
and a2,b1,a0
stw a0,*a1
nop 5
;;;;;;;;;;;;;;;;;;;;;
mvkl i2cmdr0,a1
mvkh i2cmdr0,a1
ldw *a1,b1
mvkl 0800h,a0
mvkh 0h,a0
or a0,b1,a0
stw a0,*a1
nop 5
;;;;;;;;;;;;;;;;;;;;;;;;;发送停止
mvkl i2cstr0,a1
mvkh i2cstr0,a1;bb=1?
ldw *a1,b2
nop
mvkl 1000h,a0
mvkh 0h,a0
and a0,b2,a0
stw a0,*a1
nop 5
;;;;;;;;;;;;;;;;;;;;;;;
mvkl 0ffffh,b0
mvkh 0h,b0
nop 5
nop
bdec $,a0
nop 5
b _main
nop
nop
nop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -