📄 d12_setup.s
字号:
.module D12_setup.c
.area data(ram, con, rel)
_StandardDeviceRequest::
.blkw 1
.area idata
.word PL_get_status
.area data(ram, con, rel)
.blkw 1
.area idata
.word PL_clear_feature
.area data(ram, con, rel)
.blkw 1
.area idata
.word PL_void_function
.area data(ram, con, rel)
.blkw 1
.area idata
.word PL_set_feature
.area data(ram, con, rel)
.blkw 1
.area idata
.word PL_void_function
.area data(ram, con, rel)
.blkw 1
.area idata
.word PL_set_address
.area data(ram, con, rel)
.blkw 1
.area idata
.word PL_get_descriptor
.area data(ram, con, rel)
.blkw 1
.area idata
.word PL_void_function
.area data(ram, con, rel)
.blkw 1
.area idata
.word PL_get_configuration
.area data(ram, con, rel)
.blkw 1
.area idata
.word PL_set_configuration
.area data(ram, con, rel)
.blkw 1
.area idata
.word PL_get_interface
.area data(ram, con, rel)
.blkw 1
.area idata
.word PL_set_interface
.area data(ram, con, rel)
.blkw 1
.area idata
.word PL_void_function
.area data(ram, con, rel)
.dbfile G:\Backup\6月1日flag置(认为接近最终)\ilx511_usb/d12setup.h
.dbsym e StandardDeviceRequest _StandardDeviceRequest A[26:13]pfV
.area lit(rom, con, rel)
_device_descriptor::
.byte 18,1
.byte 16,1
.byte 220,0
.byte 0,16
.byte 'q,4
.byte 144,8
.byte 0,1
.byte 0,0
.byte 0,1
.dbsym e device_descriptor _device_descriptor A[18:18]kc
_Configuration_Descriptor::
.byte 9,2
.byte 46,0
.byte 1,1
.byte 0,32
.byte 'd
.dbsym e Configuration_Descriptor _Configuration_Descriptor A[9:9]kc
_Interface_Descriptor::
.byte 9,4
.byte 0,0
.byte 4,220
.byte 160,176
.byte 0
.dbsym e Interface_Descriptor _Interface_Descriptor A[9:9]kc
_Endpoint1_out_Descriptor::
.byte 7,5
.byte 1,3
.byte 16,0
.byte 1
.dbsym e Endpoint1_out_Descriptor _Endpoint1_out_Descriptor A[7:7]kc
_Endpoint1_in_Descriptor::
.byte 7,5
.byte 129,3
.byte 16,0
.byte 1
.dbsym e Endpoint1_in_Descriptor _Endpoint1_in_Descriptor A[7:7]kc
_Endpoint2_out_Descriptor::
.byte 7,5
.byte 2,2
.byte 64,0
.byte 1
.dbsym e Endpoint2_out_Descriptor _Endpoint2_out_Descriptor A[7:7]kc
_Endpoint2_in_Descriptor::
.byte 7,5
.byte 130,2
.byte 64,0
.byte 1
.dbsym e Endpoint2_in_Descriptor _Endpoint2_in_Descriptor A[7:7]kc
.area text(rom, con, rel)
.dbfile G:\Backup\6月1日flag置(认为接近最终)\ilx511_usb/d12setup.h
.dbfile G:\Backup\6月1日flag置(认为接近最终)\ilx511_usb\D12_setup.c
.dbfunc e Setup_control _Setup_control fV
; p -> R10,R11
; j -> R22
; i -> R20
.even
_Setup_control::
rcall push_gset3
.dbline -1
.dbline 9
; #include "io8515v.h"
; #include "d12head.h"
; #include "d12setup.h"
;
; TRANSMIT_STRUCT XmtBuff;
; ///int bconfig;
;
; void Setup_control(void)
; {
.dbline 11
; char i,j,*p;
; D12_COMMAND = 0x00;// 选择端点0(指针指向0位置)
clr R2
sts 32513,R2
.dbline 12
; cwait;
nop
.dbline 13
; D12_COMMAND = 0xf0;// 读标准控制码
ldi R24,240
sts 32513,R24
.dbline 14
; cwait1;
nop
.dbline 14
nop
.dbline 15
; i = D12_DATA;
lds R20,32512
.dbline 16
; cwait1;
nop
.dbline 16
nop
.dbline 17
; i = D12_DATA;//长度
lds R20,32512
.dbline 18
; cwait1;
nop
.dbline 18
nop
.dbline 19
; j = D12_DATA;
lds R22,32512
.dbline 20
; csram;
sts 0xfc01,R22
.dbline 20
.dbline 21
; p = XmtBuff.b;
ldi R30,<_XmtBuff
ldi R31,>_XmtBuff
.dbline 22
; *(p++) = j;
st Z+,R22
movw R10,R30
.dbline 23
; for(i=0;i<7;i++)
clr R20
rjmp L11
L8:
.dbline 24
.dbline 25
lds R22,32512
.dbline 26
sts 0xfc01,R22
.dbline 26
.dbline 27
st Z+,R22
.dbline 28
L9:
.dbline 23
inc R20
L11:
.dbline 23
cpi R20,7
brlo L8
.dbline 29
; {
; j = D12_DATA;
; csram;
; asm("st Z+,%j");
; }
; D12_COMMAND = 0x01;// 选择端点 1(指针指向0位置)
ldi R24,1
sts 32513,R24
.dbline 30
; cwait;
nop
.dbline 31
; D12_COMMAND = 0xf1;// 应答SETUP包,使能(清 OUT 缓冲区、使能 IN 缓冲区)命令
ldi R24,241
sts 32513,R24
.dbline 32
; csram;
sts 0xfc01,R22
.dbline 32
.dbline 33
; i = XmtBuff.b[1];
lds R20,_XmtBuff+1
.dbline 34
; if(XmtBuff.b[0] & 0x40)//厂商请求跳转表
lds R2,_XmtBuff
sbrs R2,6
rjmp L13
.dbline 35
; {
.dbline 37
; //if (i <= 0x0f)
; {
.dbline 39
; //(*VendorDeviceRequest[i])();
; }
.dbline 40
; }
rjmp L14
L13:
.dbline 42
; else
; {
.dbline 43
; if (i <= 0x0B)//标准请求跳转表
ldi R24,11
cp R24,R20
brlo L15
.dbline 44
; {
.dbline 45
; (*StandardDeviceRequest[i])();
ldi R24,2
mul R24,R20
movw R30,R0
ldi R24,<_StandardDeviceRequest
ldi R25,>_StandardDeviceRequest
add R30,R24
adc R31,R25
ldd R26,z+0
ldd R27,z+1
movw R30,R26
rcall xicall
.dbline 46
; }
L15:
.dbline 47
; }
L14:
.dbline 48
; D12_COMMAND = 0x00;// 选择端点0(指针指向0位置)
clr R2
sts 32513,R2
.dbline 49
; cwait;
nop
.dbline 50
; D12_COMMAND = 0xf1;// 应答SETUP包,使能(清 OUT 缓冲区、使能 IN 缓冲区)命令
ldi R24,241
sts 32513,R24
.dbline 51
; cwait;
nop
.dbline 52
; D12_COMMAND = 0xf2;// 清 OUT 缓冲区
ldi R24,242
sts 32513,R24
.dbline -2
.dbline 53
; }
L7:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r p 10 pc
.dbsym r j 22 c
.dbsym r i 20 c
.dbend
.dbfunc e void_function _void_function fV
.even
_void_function::
.dbline -1
.dbline 56
;
; void void_function(void)
; {
.dbline 57
; D12_COMMAND = 0x40;// 0 端点停止(用于发送Stall包)
ldi R24,64
sts 32513,R24
.dbline 58
; cwait;
nop
.dbline 59
; D12_DATA = 0x01;
ldi R24,1
sts 32512,R24
.dbline 60
; cwait;
nop
.dbline 61
; D12_COMMAND = 0x41;// 1 端点停止(用于发送Stall包)
ldi R24,65
sts 32513,R24
.dbline 62
; cwait;
nop
.dbline 63
; D12_DATA = 0x01;
ldi R24,1
sts 32512,R24
.dbline 64
; cwait;
nop
.dbline 65
; D12_COMMAND = 0xf1;// 应答SETUP包,使能(清 OUT 缓冲区、使能 IN 缓冲区)命令
ldi R24,241
sts 32513,R24
.dbline 66
; csram;
sts 0xfc01,R22
.dbline 66
.dbline -2
.dbline 67
; }
L17:
.dbline 0 ; func end
ret
.dbend
.dbfunc e get_status _get_status fV
.even
_get_status::
rcall push_gset1
.dbline -1
.dbline 70
;
; void get_status(void)
; {
.dbline 71
; XmtBuff.b[1] = 0x00;
clr R2
sts _XmtBuff+1,R2
.dbline 72
; switch (XmtBuff.b[0])
lds R20,_XmtBuff
clr R21
cpi R20,128
ldi R30,0
cpc R21,R30
breq L23
cpi R20,129
ldi R30,0
cpc R21,R30
breq L24
cpi R20,130
ldi R30,0
cpc R21,R30
breq L25
rjmp L20
X0:
.dbline 73
; {
L23:
.dbline 76
; case 0x80://返回设备状态
; //发送两个字节数据:第一字节D1为1支持远程唤醒,D0为0是总线供电,其它位为0;第二字节为0。
; XmtBuff.b[0] = 0x03;
ldi R24,3
sts _XmtBuff,R24
.dbline 77
; break;
rjmp L21
L24:
.dbline 81
; case 0x81://返回接口状态
; //发送两个字节数据:第一字节为0;第二字节为0。
; //XmtBuff.b[5] 为接口号
; XmtBuff.b[0] = 0x00;
clr R2
sts _XmtBuff,R2
.dbline 82
; break;
rjmp L21
L25:
.dbline 86
; case 0x82://返回端点状态
; //发送两个字节数据:第一字节D0为1端点处于暂停,否则D0为0,其它位为0;第二字节为0。
; //XmtBuff.b[5] D7为方向,D3~0为端点号
; XmtBuff.b[0] = 0x00;
clr R2
sts _XmtBuff,R2
.dbline 87
; break;
L20:
L21:
.dbline 89
; }
; XmtBuff.p_p=0;
clr R2
sts _XmtBuff+39,R2
.dbline 90
; XmtBuff.wrLength = 2;
ldi R24,2
sts _XmtBuff+34,R24
.dbline 91
; XmtBuff.p = XmtBuff.b;
ldi R24,<_XmtBuff
ldi R25,>_XmtBuff
sts _XmtBuff+37+1,R25
sts _XmtBuff+37,R24
.dbline 92
; USB_submit();
rcall _USB_submit
.dbline -2
.dbline 93
; }
L18:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbend
.dbfunc e clear_feature _clear_feature fV
; j -> R20
.even
_clear_feature::
rcall push_gset1
.dbline -1
.dbline 96
;
; void clear_feature(void)
; {
.dbline 98
; char j;
; switch (XmtBuff.b[0])
lds R20,_XmtBuff
clr R21
cpi R20,0
cpc R20,R21
breq L31
X1:
cpi R20,1
ldi R30,0
cpc R21,R30
breq L31
cpi R20,2
ldi R30,0
cpc R21,R30
breq L35
rjmp L30
X2:
.dbline 99
; {
.dbline 101
; case 0x00://清设备唤醒功能
; break;
.dbline 103
; case 0x01://清接口状态
; break;
L35:
.dbline 106
; case 0x02://启用端点
; //XmtBuff.b[5] D7为方向,D3~0为端点号
; j = XmtBuff.b[5];
lds R20,_XmtBuff+5
.dbline 107
; if(j<0x80)
cpi R20,128
brsh L37
.dbline 108
; {
.dbline 109
; j = 0x40+j*2;
ldi R24,2
mul R24,R20
mov R20,R0
subi R20,192 ; addi 64
.dbline 110
; D12_COMMAND = j;// 启用OUT端点
sts 32513,R20
.dbline 111
; D12_DATA = 0x00;
clr R2
sts 32512,R2
.dbline 112
; csram;
sts 0xfc01,R22
.dbline 112
.dbline 113
; }
rjmp L31
L37:
.dbline 115
; else
; {
.dbline 116
; j = (j & 0x0f);
andi R20,15
.dbline 117
; D12_COMMAND = 0x41+j*2;// 启用IN端点
ldi R24,2
mul R24,R20
mov R24,R0
subi R24,191 ; addi 65
sts 32513,R24
.dbline 118
; D12_DATA = 0x00;
clr R2
sts 32512,R2
.dbline 119
; csram;
sts 0xfc01,R22
.dbline 119
.dbline 120
; }
.dbline 121
; break;
L30:
L31:
.dbline 123
; }
; XmtBuff.wrLength = 0;
clr R2
sts _XmtBuff+34,R2
.dbline 124
; USB_submit();
rcall _USB_submit
.dbline -2
.dbline 125
; }
L29:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r j 20 c
.dbend
.dbfunc e set_feature _set_feature fV
; j -> R20
.even
_set_feature::
rcall push_gset1
.dbline -1
.dbline 128
;
; void set_feature(void)
; {
.dbline 130
; char j;
; switch (XmtBuff.b[0])
lds R20,_XmtBuff
clr R21
cpi R20,0
cpc R20,R21
breq L42
X3:
cpi R20,1
ldi R30,0
cpc R21,R30
breq L42
cpi R20,2
ldi R30,0
cpc R21,R30
breq L46
rjmp L41
X4:
.dbline 131
; {
.dbline 133
; case 0x00://设置设备唤醒功能
; break;
.dbline 135
; case 0x01://设置接口状态
; break;
L46:
.dbline 138
; case 0x02://停止端点
; //XmtBuff.b[5] D7为方向,D3~0为端点号
; j = XmtBuff.b[5];
lds R20,_XmtBuff+5
.dbline 139
; if(j<0x80)
cpi R20,128
brsh L48
.dbline 140
; {
.dbline 141
; j = 0x40+j * 2;
ldi R24,2
mul R24,R20
mov R20,R0
subi R20,192 ; addi 64
.dbline 142
; D12_COMMAND = j;// 停止OUT端点
sts 32513,R20
.dbline 143
; cwait;
nop
.dbline 144
; D12_DATA = 0x01;
ldi R24,1
sts 32512,R24
.dbline 145
; csram;
sts 0xfc01,R22
.dbline 145
.dbline 146
; }
rjmp L42
L48:
.dbline 148
; else
; {
.dbline 149
; j = j & 0x0f;
andi R20,15
.dbline 150
; j = 0x41+j*2;
ldi R24,2
mul R24,R20
mov R20,R0
subi R20,191 ; addi 65
.dbline 151
; D12_COMMAND = j;// 停止IN端点
sts 32513,R20
.dbline 152
; cwait;
nop
.dbline 153
; D12_DATA = 0x01;
ldi R24,1
sts 32512,R24
.dbline 154
; csram;
sts 0xfc01,R22
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -