📄 usb.asm.bak
字号:
*
.mmregs
.include constant.inc
.include c54.inc
.def usb_read
* .ref io_map,page
.ref io_map
.ref usbbuf,BUFFER
.sect "progsys"
*********************** usb_read *********************
usb_read:
PSHM AL
PSHM AH
PSHM AG
PSHM AR2
PSHM AR3
STM #usbbuf,AR2
STM #(512-1),AR3
RPTZ A, #(1024-1) ;清接收缓冲区
STL A,*AR2+
* Command0
PORTR USB_COMMAND,*(io_map)
ANDM #0x03,*(io_map)
CMPM *(io_map),#0
nop
nop
XC 2,TC
B SameReturn
* Command1
CMPM *(io_map),#1
nop
nop
XC 2,TC
B UpAdd1_1
* Command2
CMPM *(io_map),#2
nop
nop
XC 2,TC
B UpDec1_1 ;
*********************************************************
SameReturn:
STM #usbbuf,AR2 ;指向接收存储区起始位置
SameReturn_1:
PORTR #(USB_STATUS+1),*(io_map) ;接收usb数据用端点4,out
BITF *(io_map),0x02
BC SameReturn_1,NTC ;判断,条件满足方可 接收
PORTR #(USB_DATA+1) ,*AR2
ANDM #0xff,*AR2+
BANZ SameReturn_1,*AR3- ;接收完512字节
;以上完成数据接收,存放在usbbuf
ST #20,*(usbbuf) ;返回数据的长度
STM #(usbbuf+1),AR2
STM #BUFFER,AR3 ;返回数据的起始地址
RPT #(20-1) ;下行数据原样返回
MVDD *AR2+,*AR3+
STM #usbbuf,AR2 ;usb发送缓冲区首地址
STM #(512-1),AR3
SameReturn_2:
PORTR #(USB_STATUS+3),*(io_map) ;usb发送用端点8
ANDM #0x01,*(io_map)
CMPM *(io_map),0x01
nop
nop
XC 2,NTC
B SameReturn_2 ;判断,条件满足方可 发送
PORTW *AR2+,#(USB_DATA+3)
BANZ SameReturn_2,*AR3- ;发送完512字节
;以上完成数据发送
B usb_exit
*********************************************************
UpAdd1_1:
STM #usbbuf,AR2 ;指向接收存储区起始位置
UpAdd1_2:
PORTR #(USB_STATUS+1),*(io_map) ;接收usb数据用端点4,out
BITF *(io_map),0x02
BC UpAdd1_2,NTC ;判断,条件满足方可 接收
PORTR #(USB_DATA+1) ,*AR2
ANDM #0xff,*AR2+
BANZ UpAdd1_2,*AR3- ;接收完512字节
;以上完成数据接收,存放在usbbuf
ST #20,*(usbbuf) ;返回数据的长度
STM #(usbbuf+1),AR2
STM #BUFFER,AR3 ;返回数据的起始地址
stm #(20-1),BRC ;下行数据加1返回
rptb AddHere-1
ADDM #1,*AR2
MVDD *AR2+,*AR3+
AddHere:
STM #usbbuf,AR2 ;usb发送缓冲区首地址
STM #(512-1),AR3
UpAdd1_3:
PORTR #(USB_STATUS+3),*(io_map) ;usb发送用端点8
ANDM #0x01,*(io_map)
CMPM *(io_map),0x01
nop
nop
XC 2,NTC
B UpAdd1_3 ;判断,条件满足方可 发送
; PORTW *AR2+,#(USB_DATA+3)
PORTW *AR2+,#(USB_DATA+3)
BANZ UpAdd1_3,*AR3- ;发送完512字节
;以上完成数据发送
B usb_exit
*********************************************************
UpDec1_1:
STM #usbbuf,AR2 ;指向接收存储区起始位置
UpDec1_2:
PORTR #(USB_STATUS+1),*(io_map) ;接收usb数据用端点4,out
BITF *(io_map),0x02
BC UpDec1_2,NTC ;判断,条件满足方可 接收
PORTR #(USB_DATA+1) ,*AR2
ANDM #0xff,*AR2+
BANZ UpDec1_2,*AR3- ;接收完512字节
;以上完成数据接收,存放在usbbuf
ST #20,*(usbbuf) ;返回数据的长度
STM #(usbbuf+1),AR2
STM #BUFFER,AR3 ;返回数据的起始地址
stm #(20-1),BRC ;下行数据减1返回
rptb DecHere-1
ADDM #-1,*AR2
MVDD *AR2+,*AR3+
DecHere:
STM #usbbuf,AR2 ;usb发送缓冲区首地址
STM #(512-1),AR3
UpDec1_3:
PORTR #(USB_STATUS+3),*(io_map) ;usb发送用端点8
ANDM #0x01,*(io_map)
CMPM *(io_map),0x01
nop
nop
XC 2,NTC
B UpDec1_3 ;判断,条件满足方可 发送
; PORTW *AR2+,#(USB_DATA+3)
PORTW *AR2+,#(USB_DATA+3)
BANZ UpDec1_3,*AR3- ;发送完512字节
;以上完成数据发送
; B usb_exit
*********************************************************
usb_exit:
POPM AR3
POPM AR2
POPM AG
POPM AH
POPM AL
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -