📄 d12_setup.s
字号:
.dbline 154
.dbline 155
; }
.dbline 156
; break;
L41:
L42:
.dbline 158
; }
; XmtBuff.wrLength = 0;
clr R2
sts _XmtBuff+34,R2
.dbline 159
; USB_submit();
rcall _USB_submit
.dbline -2
.dbline 160
; }
L40:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r j 20 c
.dbend
.dbfunc e set_address _set_address fV
; j -> R20
.even
_set_address::
rcall push_gset1
.dbline -1
.dbline 162
; void set_address(void)
; {
.dbline 164
; char j;
; j = 0x80 | XmtBuff.b[2];
lds R20,_XmtBuff+2
ori R20,128
.dbline 165
; D12_COMMAND = 0xd0;//设置新地址使能
ldi R24,208
sts 32513,R24
.dbline 166
; cwait;
nop
.dbline 167
; D12_DATA = j;
sts 32512,R20
.dbline 168
; csram;
sts 0xfc01,R22
.dbline 168
.dbline 169
; XmtBuff.wrLength = 0;
clr R2
sts _XmtBuff+34,R2
.dbline 170
; USB_submit();
rcall _USB_submit
.dbline -2
.dbline 171
; }
L51:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r j 20 c
.dbend
.dbfunc e get_descriptor _get_descriptor fV
; i -> R20,R21
.even
_get_descriptor::
rcall push_gset1
.dbline -1
.dbline 174
;
; void get_descriptor(void)
; {
.dbline 176
; unsigned int i;
; XmtBuff.p_p=1;
ldi R24,1
sts _XmtBuff+39,R24
.dbline 177
; switch (XmtBuff.b[3])
lds R20,_XmtBuff+3
clr R21
cpi R20,1
ldi R30,0
cpc R21,R30
breq L60
cpi R20,2
ldi R30,0
cpc R21,R30
breq L63
cpi R20,3
ldi R30,0
cpc R21,R30
breq L73
rjmp L56
X5:
.dbline 178
; {
L60:
.dbline 180
; case 0x01: //USB_DEVICE
; XmtBuff.pp = device_descriptor;
ldi R24,<_device_descriptor
ldi R25,>_device_descriptor
sts _XmtBuff+35+1,R25
sts _XmtBuff+35,R24
.dbline 181
; XmtBuff.wrLength = sizeof(device_descriptor);
ldi R24,18
sts _XmtBuff+34,R24
.dbline 182
; break;
rjmp L57
L63:
.dbline 184
; case 0x02:// USB_CONFIGURATION
; i = XmtBuff.b[7];
lds R20,_XmtBuff+7
clr R21
.dbline 185
; i = ((i<<8) | XmtBuff.b[6]);
lds R2,_XmtBuff+6
mov R21,R20
mov R20,R2
.dbline 186
; XmtBuff.pp = Configuration_Descriptor;
ldi R24,<_Configuration_Descriptor
ldi R25,>_Configuration_Descriptor
sts _XmtBuff+35+1,R25
sts _XmtBuff+35,R24
.dbline 187
; XmtBuff.wrLength = *(XmtBuff.pp+2);
movw R30,R24
adiw R30,2
lpm R30,Z
sts _XmtBuff+34,R30
.dbline 188
; if(i<16)
cpi R20,16
ldi R30,0
cpc R21,R30
brsh L57
.dbline 189
; XmtBuff.wrLength = XmtBuff.b[6];
sts _XmtBuff+34,R2
.dbline 190
; break;
rjmp L57
L73:
.dbline 192
; case 0x03: //USB_STRING
; switch(XmtBuff.b[2])
lds R20,_XmtBuff+2
clr R21
cpi R20,0
cpc R20,R21
breq L57
X6:
cpi R20,1
ldi R30,0
cpc R21,R30
breq L57
cpi R20,2
ldi R30,0
cpc R21,R30
breq L57
rjmp L74
X7:
.dbline 193
; {
.dbline 197
; case 0x00 :
; //?XmtBuff.wrLength = sizeof(USBStringLanguageDescription);
; //?XmtBuff.p = USBStringLanguageDescription;
; break;
.dbline 201
; case 0x01 :
; //?XmtBuff.wrLength = sizeof(USBStringDescription1);
; //?XmtBuff.p = USBStringDescription1;
; break;
.dbline 205
; case 0x02 :
; //?XmtBuff.wrLength = sizeof(USBStringDescription2);
; //?XmtBuff.p = USBStringDescription2;
; break;
L74:
.dbline 207
; default :
; void_function();
rcall _void_function
.dbline 208
; return;
rjmp L54
X8:
.dbline 210
; }
; break;
L56:
.dbline 212
; default :
; void_function();
rcall _void_function
.dbline 213
; return;
rjmp L54
L57:
.dbline 215
; }
; USB_submit();
rcall _USB_submit
.dbline -2
.dbline 216
; }
L54:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbend
.dbfunc e get_configuration _get_configuration fV
.even
_get_configuration::
.dbline -1
.dbline 219
;
; void get_configuration(void)
; {
.dbline 220
; XmtBuff.b[0] = 1;//返回是否被配置(非 0 为配置)
ldi R24,1
sts _XmtBuff,R24
.dbline 221
; XmtBuff.wrLength = 16;
ldi R24,16
sts _XmtBuff+34,R24
.dbline 222
; XmtBuff.p_p=0;
clr R2
sts _XmtBuff+39,R2
.dbline 223
; XmtBuff.p = XmtBuff.b;
ldi R24,<_XmtBuff
ldi R25,>_XmtBuff
sts _XmtBuff+37+1,R25
sts _XmtBuff+37,R24
.dbline 224
; USB_submit();
.dbline -2
.dbline 228
; ///D12_COMMAND = 0x05;
; ///cwait;
; ///D12_COMMAND = 0xfa;// 设置 IN 缓冲区有效(满标志)
; }
L81:
.dbline 0 ; func end
rjmp _USB_submit
.dbend
.dbfunc e set_configuration _set_configuration fV
; j -> R20
; u -> R20,R21
.even
_set_configuration::
rcall push_gset1
.dbline -1
.dbline 231
;
; void set_configuration(void)
; {
.dbline 234
; char j;
; int u;
; if (XmtBuff.b[0] == 0x00)
lds R2,_XmtBuff
tst R2
brne L86
.dbline 235
; {
.dbline 236
; XmtBuff.wrLength = 0;
clr R2
sts _XmtBuff+34,R2
.dbline 237
; USB_submit();
rcall _USB_submit
.dbline 238
; j = XmtBuff.b[2];
lds R20,_XmtBuff+2
.dbline 239
; D12_COMMAND = 0xd8;
ldi R24,216
sts 32513,R24
.dbline 240
; if(j == 0x00)
tst R20
brne L90
.dbline 241
; {
.dbline 242
; D12_DATA = 0x00; // 停止普通/同步端点
clr R2
sts 32512,R2
.dbline 243
rjmp L91
L90:
.dbline 243
; }else if(j == 0x01)
cpi R20,1
brne L92
.dbline 244
; {
.dbline 245
; D12_DATA = 0x01; // 使能普通/同步端点
ldi R24,1
sts 32512,R24
.dbline 246
; cwait;
nop
.dbline 249
; /// bconfig=1;
;
; D12_COMMAND=0x05;
ldi R24,5
sts 32513,R24
.dbline 250
; D12_COMMAND=0xf0;
ldi R24,240
sts 32513,R24
.dbline 251
; D12_DATA=0;
clr R2
sts 32512,R2
.dbline 252
; D12_DATA=64;
ldi R24,64
sts 32512,R24
.dbline 253
; for( u=0;u<64;u++)
clr R20
clr R21
L94:
.dbline 254
sts 32512,R20
L95:
.dbline 253
subi R20,255 ; offset = 1
sbci R21,255
.dbline 253
cpi R20,64
ldi R30,0
cpc R21,R30
brlt L94
.dbline 255
; D12_DATA=u;
; D12_COMMAND=0xfa;
ldi R24,250
sts 32513,R24
.dbline 260
; //D12_COMMAND = 0x05;
; //cwait;
; //D12_COMMAND = 0xfa;// 设置 IN 缓冲区有效(满标志)
;
; }
L92:
L91:
.dbline 261
; csram;
sts 0xfc01,R22
.dbline 261
.dbline 262
; }
rjmp L87
L86:
.dbline 264
rcall _void_function
L87:
.dbline -2
.dbline 265
; else
; void_function();
; }
L85:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r j 20 c
.dbsym r u 20 I
.dbend
.dbfunc e get_interface _get_interface fV
.even
_get_interface::
.dbline -1
.dbline 268
;
; void get_interface(void)
; {
.dbline 269
; XmtBuff.b[0] = 0;
clr R2
sts _XmtBuff,R2
.dbline 270
; XmtBuff.wrLength = 1;
ldi R24,1
sts _XmtBuff+34,R24
.dbline 271
; XmtBuff.p_p=0;
sts _XmtBuff+39,R2
.dbline 272
; XmtBuff.p = XmtBuff.b;
ldi R24,<_XmtBuff
ldi R25,>_XmtBuff
sts _XmtBuff+37+1,R25
sts _XmtBuff+37,R24
.dbline 273
; USB_submit();
.dbline -2
.dbline 274
; }
L98:
.dbline 0 ; func end
rjmp _USB_submit
.dbend
.dbfunc e set_interface _set_interface fV
.even
_set_interface::
.dbline -1
.dbline 277
;
; void set_interface(void)
; {
.dbline 278
; XmtBuff.wrLength = 0;
clr R2
sts _XmtBuff+34,R2
.dbline 279
; USB_submit();
.dbline -2
.dbline 280
; }
L102:
.dbline 0 ; func end
rjmp _USB_submit
.dbend
.dbfunc e USB_submit _USB_submit fV
; j -> R16
; k -> R18
; i -> R20
.even
_USB_submit::
rcall push_gset1
.dbline -1
.dbline 283
;
; void USB_submit(void)
; {
.dbline 285
; char i,j,k;
; if(16>XmtBuff.wrLength)
lds R2,_XmtBuff+34
ldi R24,16
cp R2,R24
brsh L105
.dbline 286
; {
.dbline 287
; j = XmtBuff.wrLength;
mov R16,R2
.dbline 288
; }else
rjmp L106
L105:
.dbline 289
; {
.dbline 290
; j = 16;
ldi R16,16
.dbline 291
; }
L106:
.dbline 292
; D12_COMMAND = 1;// 选择 IN 端点(指针指向0位置)
ldi R24,1
sts 32513,R24
.dbline 293
; cwait;
nop
.dbline 294
; D12_COMMAND = 0xf0;// 写缓冲区
ldi R24,240
sts 32513,R24
.dbline 295
; cwait;
nop
.dbline 296
; D12_DATA = 0x00;
clr R2
sts 32512,R2
.dbline 297
; cwait;
nop
.dbline 298
; D12_DATA = j;
sts 32512,R16
.dbline 299
; csram;
sts 0xfc01,R22
.dbline 299
.dbline 300
; if(XmtBuff.p_p)
lds R2,_XmtBuff+39
tst R2
breq L109
.dbline 301
; {
.dbline 302
; for(i=0;i<j ;i++)
clr R20
rjmp L115
L112:
.dbline 303
.dbline 304
lds R2,_XmtBuff+35
lds R3,_XmtBuff+35+1
mov R30,R20
clr R31
add R30,R2
adc R31,R3
lpm R18,Z
.dbline 305
sts 32512,R18
.dbline 306
sts 0xfc01,R22
.dbline 306
.dbline 307
L113:
.dbline 302
inc R20
L115:
.dbline 302
cp R20,R16
brlo L112
.dbline 308
; {
; k = *(XmtBuff.pp+i);
; D12_DATA = k;
; csram;
; }
; XmtBuff.pp += j;
lds R2,_XmtBuff+35
lds R3,_XmtBuff+35+1
mov R4,R16
clr R5
add R4,R2
adc R5,R3
sts _XmtBuff+35+1,R5
sts _XmtBuff+35,R4
.dbline 309
; }else
rjmp L110
L109:
.dbline 310
; {
.dbline 311
; for(i=0;i<j;i++)
clr R20
rjmp L121
L118:
.dbline 312
.dbline 313
lds R30,_XmtBuff+37
lds R31,_XmtBuff+37+1
ld R18,Z+
sts _XmtBuff+37+1,R31
sts _XmtBuff+37,R30
.dbline 314
sts 32512,R18
.dbline 315
sts 0xfc01,R22
.dbline 315
.dbline 316
L119:
.dbline 311
inc R20
L121:
.dbline 311
cp R20,R16
brlo L118
.dbline 317
; {
; k = *(XmtBuff.p++);
; D12_DATA = k;
; csram;
; }
; }
L110:
.dbline 318
; XmtBuff.wrLength -= j;
lds R2,_XmtBuff+34
sub R2,R16
sts _XmtBuff+34,R2
.dbline 319
; D12_COMMAND = 0xfa;// 设置 IN 缓冲区有效(满标志)
ldi R24,250
sts 32513,R24
.dbline 320
; csram;
sts 0xfc01,R22
.dbline 320
.dbline -2
.dbline 321
; }
L104:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r j 16 c
.dbsym r k 18 c
.dbsym r i 20 c
.dbend
.area bss(ram, con, rel)
.dbfile G:\Backup\6月1日flag置(认为接近最终)\ilx511_usb\D12_setup.c
_XmtBuff::
.blkb 40
.dbstruct 0 40 .1
.dbfield 0 b A[16:16]c
.dbfield 16 msg A[16:16]c
.dbfield 32 msgL c
.dbfield 33 wendu c
.dbfield 34 wrLength c
.dbfield 35 pp pkc
.dbfield 37 p pc
.dbfield 39 p_p c
.dbend
.dbsym e XmtBuff _XmtBuff S[.1]
.area func_lit
PL_set_interface: .word `_set_interface
PL_get_interface: .word `_get_interface
PL_set_configuration: .word `_set_configuration
PL_get_configuration: .word `_get_configuration
PL_get_descriptor: .word `_get_descriptor
PL_set_address: .word `_set_address
PL_set_feature: .word `_set_feature
PL_void_function: .word `_void_function
PL_clear_feature: .word `_clear_feature
PL_get_status: .word `_get_status
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -