📄 i2c_read.asm
字号:
;;;;;;;;----------初始化i2c外设
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
.def loopw
.def loopw1
.def loopw2
.def loopw3
.def loopr
.def loopr1
.def loopr2
;.def loopr3
;;;;;;;;;;传递函数,a31为写地址, b31读数据,
loopw1:mvkl i2cstr0,a1
mvkh i2cstr0,a1;bb=0?
ldw *a1,b2
nop
mvkl 1000h,a0
mvkh 0h,a0
and a0,b2,a0
[a0] b loopw1
nop 5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;判断总线忙不忙
mvkl 66a0h,b2
mvkh 0h,b2
nop
mvkl i2cmdr0,a2
mvkh i2cmdr0,a2;设定工作模式
stw b2,*a2
nop 9
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;开始传输数据
mvk 0h,a8
mvk 01h,b8;设定数据量
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
loopw2:mvkl i2cstr0,a1
mvkh i2cstr0,a1;nack=0?
ldw *a1,a2
mvkl 2h,a0
mvkh 0h,a0
and a0,a2,a0
[a0] b loopw2
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 loopw2
nop 9
;;;;;;;;;;;;;;;;;;;;;;;;;;;;察看缓冲器里的数据是否准备好
cmpeq a8,b8,a0
[a0] b loopw
; nop 2 ;这里加延时会出现错误___________________?
add 1,a8,a8
mvkl i2cdxr0,a1
mvkh i2cdxr0,a1;发送数据的值
mvd a30,b1 ;从机为57h发送55有相应
nop 3
stw b1,*a1
nop 9
mvkl 10h,b1
mvkh 0h,b1
bdec $,b1
nop 5
b loopw2
nop 5
;;;;;;;;;;;;;;;;;;;;;; 发送数据
loopw: mvkl i2cstr0,a1
mvkh i2cstr0,a1;nack=0?
ldw *a1,a2
mvkl 2h,a0
mvkh 0h,a0
and a0,a2,a0
[a0] b loopw
mvkl i2cstr0,a1
mvkh i2cstr0,a1;ardy=0
ldw *a1,a2
mvkl 4h,a0
mvkh 0h,a0
and a0,a2,a0
[!a0] b loopw
nop 5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;察看是否成功访问
mvkl 0a600h,b1
bdec $,b1
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 0ffffh,b0
mvkh 0h,b0
nop 5
nop
bdec $,b0
nop 5
;;;;;;;;;;;;;;;;;;发送停止
loopw3: nop 9
nop 9
mvkl i2cstr0,a1
mvkh i2cstr0,a1;bb=1?
ldw *a1,b2
nop 9
mvkl 1000h,a0
mvkh 0h,a0
and a0,b2,a0
stw a0,*a1
[a0] b loopw3
nop 4;;;;;;;;;;;;;;;清忙位
nop
nop
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;读数据;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mvkl 05dh,a31
mvkh 00h,a31
; .copy "i2c_config.asm"
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
loopr1:mvkl i2cstr0,a1
mvkh i2cstr0,a1;bb=0?
ldw *a1,b2
nop
mvkl 1000h,a0
mvkh 0h,a0
and a0,b2,a0
[a0] b loopr1
nop 5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;判断总线忙不忙
mvkl 064a0h,b2
mvkh 0h,b2
nop
mvkl i2cmdr0,a2
mvkh i2cmdr0,a2;设定工作模式
stw b2,*a2
nop 9
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;开始传输数据
mvk 0h,a8
mvk 01h,b8;设定数据量
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
loopr2:mvkl i2cstr0,a1
mvkh i2cstr0,a1;nack=0?
ldw *a1,a2
mvkl 2h,a0
mvkh 0h,a0
and a0,a2,a0
[a0] b loopr2
nop 5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;察看是否有总线响应
mvkl i2cstr0,a1
mvkh i2cstr0,a1;请求发送数据
ldw *a1,b1
mvkl 8h,a0
mvkh 0h,a0
and a0,b1,a0
nop 9
[!a0] b loopr2
nop 9
;;;;;;;;;;;;;;;;;;;;;;;;;;;;察看缓冲器里的数据是否准备好
cmpeq a8,b8,a0
[a0] b loopr
; nop 2 ;这里加延时会出现错误___________________?
mvkl 0E4a0h,b2
mvkh 0h,b2
nop
mvkl i2cmdr0,a2
mvkh i2cmdr0,a2;设定工作模式
; stw b2,*a2
nop 9
nop 5
add 1,a8,a8
zero b10
mvkl i2cdrr0,a1
mvkh i2cdrr0,a1;发送数据的值
; mvkl 0h,a10;从机为57h发送55有相应
;stw a10,*a1
ldw *a1,b10
nop 9
mvkl 8000h,b2
mvkh 0h,b2
nop
mvkl i2cmdr0,a2
mvkh i2cmdr0,a2;设定工作模式
ldw *a2,b1
nop 4
and b2,b1,b1
stw a1,*a2
nop 9
loopr4:mvkl i2cstr0,a1
mvkh i2cstr0,a1;nack=0?
ldw *a1,a2
mvkl 2000h,a0
mvkh 0h,a0
and a0,a2,a0
[!a0] b loopr4
NOP
mvkl 010h,b1
mvkh 0h,b1
bdec $,b1
nop 5
b loopr2
nop 5
;;;;;;;;;;;;;;;;;;;;;; 发送数据
mvkl 0ffffh,b1
bdec $,b1
loopr: mvkl i2cstr0,a1
mvkh i2cstr0,a1;ardy=0
ldw *a1,a2
mvkl 4h,a0
mvkh 0h,a0
and a0,a2,a0
[!a0] b loopr
nop 5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;察看是否成功访问
mvkl 0a600h,b1
bdec $,b1
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 0ffffh,b0
mvkh 0h,b0
nop 5
nop
bdec $,b0
nop 5
;;;;;;;;;;;;;;;;;;发送停止
loopr3:
nop 9
mvkl i2cstr0,a1
mvkh i2cstr0,a1;bb=1?
ldw *a1,b2
nop 9
mvkl 1000h,a0
mvkh 0h,a0
and a0,b2,a0
stw a0,*a1
[a0] b loopr3
nop
nop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -