📄 d12setup.s
字号:
; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **时钟频率:8MHZ
;
; **函数功能:标准设备请求
; **函数输入参数及说明:无
;
; **函数返回值:无
; **在本函数以外定义的变量:D12_COMMAND,D12_DATA
; **调用的函数说明:
; USB_submit();
; 控制端点提交函数
;
; **修改人:陈驰
; **修改日期:2004.4.30
; **修改说明:创建
; *************************************************************/
; void set_feature(void)
; {
.dbline 270
; unsigned char j;
; switch (XmtBuff.b[0])
lds R20,_XmtBuff
clr R21
cpi R20,0
cpc R20,R21
breq L35
cpi R20,1
ldi R30,0
cpc R21,R30
breq L35
cpi R20,2
ldi R30,0
cpc R21,R30
breq L39
rjmp L34
X2:
.dbline 271
; {
.dbline 273
; case 0x00://设置设备唤醒功能
; break;
.dbline 275
; case 0x01://设置接口状态
; break;
L39:
.dbline 278
; case 0x02://停止端点
; //XmtBuff.b[5] D7为方向,D3~0为端点号
; j = XmtBuff.b[5];
lds R20,_XmtBuff+5
.dbline 279
; if(j<0x80)
cpi R20,128
brsh L41
.dbline 280
; {
.dbline 281
; j = 0x40+j * 2;
lsl R20
subi R20,192 ; addi 64
.dbline 282
; D12_COMMAND = j;// 停止OUT端点
sts 31745,R20
.dbline 283
; cwait;
nop
.dbline 284
; D12_DATA = 0x01;
ldi R24,1
sts 31744,R24
.dbline 285
; csram;
sts 0xfc01,R22
.dbline 285
.dbline 286
; }
rjmp L35
L41:
.dbline 288
; else
; {
.dbline 289
; j = j & 0x0f;
andi R20,15
.dbline 290
; j = 0x41+j*2;
lsl R20
subi R20,191 ; addi 65
.dbline 291
; D12_COMMAND = j;// 停止IN端点
sts 31745,R20
.dbline 292
; cwait;
nop
.dbline 293
; D12_DATA = 0x01;
ldi R24,1
sts 31744,R24
.dbline 294
; csram;
sts 0xfc01,R22
.dbline 294
.dbline 295
; }
.dbline 296
; break;
L34:
L35:
.dbline 298
; }
; XmtBuff.wrLength = 0;
clr R2
clr R3
sts _XmtBuff+64+1,R3
sts _XmtBuff+64,R2
.dbline 299
; USB_submit();
rcall _USB_submit
.dbline -2
.dbline 300
; }
L33:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r j 20 c
.dbfunc s set_address _set_address fI
; j -> R20
.even
_set_address::
rcall push_gset1
.dbline -1
.dbline 325
; /************************************************************
; **工程名称:U盘固件程序开发
; **编译器类型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **创建人:陈驰
; **所属单位:湖南大学计算机与通信学院
;
; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **时钟频率:8MHZ
;
; **函数功能:标准设备请求
; **函数输入参数及说明:无
;
; **函数返回值:无
; **在本函数以外定义的变量:D12_COMMAND,D12_DATA
; **调用的函数说明:
; USB_submit();
; 控制端点提交函数
;
; **修改人:陈驰
; **修改日期:2004.4.30
; **修改说明:创建
; *************************************************************/
; void set_address(void)
; {
.dbline 327
; unsigned char j;
; j = 0x80 | XmtBuff.b[2];
lds R20,_XmtBuff+2
ori R20,128
.dbline 328
; D12_COMMAND = 0xd0;//设置新地址使能
ldi R24,208
sts 31745,R24
.dbline 329
; cwait;
nop
.dbline 330
; D12_DATA = j;
sts 31744,R20
.dbline 331
; csram;
sts 0xfc01,R22
.dbline 331
.dbline 332
; XmtBuff.wrLength = 0;
clr R2
clr R3
sts _XmtBuff+64+1,R3
sts _XmtBuff+64,R2
.dbline 333
; USB_submit();
rcall _USB_submit
.dbline -2
.dbline 334
; }
L44:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r j 20 c
.dbfunc s get_descriptor _get_descriptor fI
; i -> R20,R21
.even
_get_descriptor::
rcall push_gset1
.dbline -1
.dbline 359
; /************************************************************
; **工程名称:U盘固件程序开发
; **编译器类型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **创建人:陈驰
; **所属单位:湖南大学计算机与通信学院
;
; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **时钟频率:8MHZ
;
; **函数功能:标准设备请求
; **函数输入参数及说明:无
;
; **函数返回值:无
; **在本函数以外定义的变量:D12_COMMAND,D12_DATA
; **调用的函数说明:
; USB_submit();
; 控制端点提交函数
;
; **修改人:陈驰
; **修改日期:2004.4.30
; **修改说明:创建
; *************************************************************/
; void get_descriptor(void)
; {
.dbline 361
; unsigned int i;
; XmtBuff.p_p=1;
ldi R24,1
sts _XmtBuff+70,R24
.dbline 362
; switch (XmtBuff.b[3])
lds R20,_XmtBuff+3
clr R21
cpi R20,1
ldi R30,0
cpc R21,R30
breq L53
cpi R20,2
ldi R30,0
cpc R21,R30
breq L56
cpi R20,3
ldi R30,0
cpc R21,R30
brne X6
rjmp L66
X6:
rjmp L49
X3:
.dbline 363
; {
L53:
.dbline 365
; case 0x01: //USB_DEVICE
; XmtBuff.pp = device_descriptor;
ldi R24,<_device_descriptor
ldi R25,>_device_descriptor
sts _XmtBuff+66+1,R25
sts _XmtBuff+66,R24
.dbline 366
; XmtBuff.wrLength = sizeof(device_descriptor);
ldi R24,18
ldi R25,0
sts _XmtBuff+64+1,R25
sts _XmtBuff+64,R24
.dbline 367
; break;
rjmp L50
L56:
.dbline 369
; case 0x02:// USB_CONFIGURATION
; i = XmtBuff.b[7];
lds R20,_XmtBuff+7
clr R21
.dbline 370
; i = ((i<<8) | XmtBuff.b[6]);
lds R2,_XmtBuff+6
clr R3
mov R4,R20
mov R5,R21
mov R5,R4
clr R4
or R4,R2
or R5,R3
mov R20,R4
mov R21,R5
.dbline 371
; XmtBuff.pp = Configuration_Descriptor;
ldi R24,<_Configuration_Descriptor
ldi R25,>_Configuration_Descriptor
sts _XmtBuff+66+1,R25
sts _XmtBuff+66,R24
.dbline 372
; XmtBuff.wrLength = *(XmtBuff.pp+2);
adiw R24,2
mov R30,R24
mov R31,R25
lpm
mov R2,R0
clr R3
sts _XmtBuff+64+1,R3
sts _XmtBuff+64,R2
.dbline 373
; if(i<16)
cpi R20,16
ldi R30,0
cpc R21,R30
brsh L50
.dbline 374
; XmtBuff.wrLength = XmtBuff.b[6];
lds R2,_XmtBuff+6
clr R3
sts _XmtBuff+64+1,R3
sts _XmtBuff+64,R2
.dbline 375
; break;
rjmp L50
L66:
.dbline 377
; case 0x03: //USB_STRING
; switch(XmtBuff.b[2])
lds R20,_XmtBuff+2
clr R21
cpi R20,0
cpc R20,R21
breq L50
cpi R20,1
ldi R30,0
cpc R21,R30
breq L50
cpi R20,2
ldi R30,0
cpc R21,R30
breq L50
rjmp L67
X4:
.dbline 378
; {
.dbline 382
; case 0x00 :
; //XmtBuff.wrLength = sizeof(USBStringLanguageDescription);
; //?XmtBuff.p = USBStringLanguageDescription;
; break;
.dbline 386
; case 0x01 :
; //?XmtBuff.wrLength = sizeof(USBStringDescription1);
; //?XmtBuff.p = USBStringDescription1;
; break;
.dbline 390
; case 0x02 :
; //?XmtBuff.wrLength = sizeof(USBStringDescription2);
; //?XmtBuff.p = USBStringDescription2;
; break;
L67:
.dbline 392
; default :
; void_function();
rcall _void_function
.dbline 393
; return;
rjmp L47
X5:
.dbline 395
; }
; break;
L49:
.dbline 397
; default :
; void_function();
rcall _void_function
.dbline 398
; return;
rjmp L47
L50:
.dbline 400
; }
; USB_submit();
rcall _USB_submit
.dbline -2
.dbline 401
; }
L47:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbfunc s get_configuration _get_configuration fI
.even
_get_configuration::
.dbline -1
.dbline 426
; /************************************************************
; **工程名称:U盘固件程序开发
; **编译器类型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **创建人:陈驰
; **所属单位:湖南大学计算机与通信学院
;
; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **时钟频率:8MHZ
;
; **函数功能:标准设备请求
; **函数输入参数及说明:无
;
; **函数返回值:无
; **在本函数以外定义的变量:D12_COMMAND,D12_DATA
; **调用的函数说明:
; USB_submit();
; 控制端点提交函数
;
; **修改人:陈驰
; **修改日期:2004.4.30
; **修改说明:创建
; *************************************************************/
; void get_configuration(void)
; {
.dbline 427
; XmtBuff.b[0] = 1;//返回是否被配置(非 0 为配置)
ldi R24,1
sts _XmtBuff,R24
.dbline 428
; XmtBuff.wrLength = 16;
ldi R24,16
ldi R25,0
sts _XmtBuff+64+1,R25
sts _XmtBuff+64,R24
.dbline 429
; XmtBuff.p_p=0;
clr R2
sts _XmtBuff+70,R2
.dbline 430
; XmtBuff.p = XmtBuff.b;
ldi R24,<_XmtBuff
ldi R25,>_XmtBuff
sts _XmtBuff+68+1,R25
sts _XmtBuff+68,R24
.dbline 431
; USB_submit();
rcall _USB_submit
.dbline -2
.dbline 432
; }
L74:
.dbline 0 ; func end
ret
.dbfunc s set_configuration _set_configuration fI
; j -> R20
.even
_set_configuration::
rcall push_gset1
.dbline -1
.dbline 457
; /************************************************************
; **工程名称:U盘固件程序开发
; **编译器类型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **创建人:陈驰
; **所属单位:湖南大学计算机与通信学院
;
; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **时钟频率:8MHZ
;
; **函数功能:标准设备请求
; **函数输入参数及说明:无
;
; **函数返回值:无
; **在本函数以外定义的变量:D12_COMMAND,D12_DATA
; **调用的函数说明:
; USB_submit();
; 控制端点提交函数
;
; **修改人:陈驰
; **修改日期:2004.4.30
; **修改说明:创建
; *************************************************************/
; void set_configuration(void)
; {
.dbline 459
; unsigned char j;
; if (XmtBuff.b[0] == 0x00)
lds R2,_XmtBuff
tst R2
brne L79
.dbline 460
; {
.dbline 461
; XmtBuff.wrLength = 0;
clr R2
clr R3
sts _XmtBuff+64+1,R3
sts _XmtBuff+64,R2
.dbline 462
; USB_submit();
rcall _USB_submit
.dbline 463
; j = XmtBuff.b[2];
lds R20,_XmtBuff+2
.dbline 464
; D12_COMMAND = 0xd8;
ldi R24,216
sts 31745,R24
.dbline 465
; if(j == 0x00)
tst R20
brne L83
.dbline 466
; {
.dbline 467
; D12_DATA = 0x00; // 停止普通/同步端点
clr R2
sts 31744,R2
.dbline 468
rjmp L84
L83:
.dbline 468
; }else if(j == 0x01)
cpi R20,1
brne L85
.dbline 469
; {
.dbline 470
; D12_DATA = 0x01; // 使能普通/同步端点
ldi R24,1
sts 31744,R24
.dbline 471
; cwait;
nop
.dbline 472
; D12_COMMAND = 0x03;
ldi R24,3
sts 31745,R24
.dbline 473
; cwait;
nop
.dbline 474
; D12_COMMAND = 0xfa;// 设置 IN 缓冲区有效(满标志)
ldi R24,250
sts 31745,R24
.dbline 475
; cwait;
nop
.dbline 476
; D12_COMMAND = 0x05;
ldi R24,5
sts 31745,R24
.dbline 477
; cwait;
nop
.dbline 478
; D12_COMMAND = 0xfa;// 设置 IN 缓冲区有效(满标志)
ldi R24,250
sts 31745,R24
.dbline 479
; }
L85:
L84:
.dbline 480
; csram;
sts 0xfc01,R22
.dbline 480
.dbline 481
; }
rjmp L80
L79:
.dbline 483
rcall _void_function
L80:
.dbline -2
.dbline 484
; else
; void_function();
; }
L78:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r j 20 c
.dbfunc s get_interface _get_interface fI
.even
_get_interface::
.dbline -1
.dbline 509
; /************************************************************
; **工程名称:U盘固件程序开发
; **编译器类型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **创建人:陈驰
; **所属单位:湖南大学计算机与通信学院
;
; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **时钟频率:8MHZ
;
; **函数功能:标准设备请求
; **函数输入参数及说明:无
;
; **函数返回值:无
; **在本函数以外定义的变量:传输结构体
; **调用的函数说明:
; USB_submit();
; 控制端点提交函数
;
; **修改人:陈驰
; **修改日期:2004.4.30
; **修改说明:创建
; *************************************************************/
; void get_interface(void)
; {
.dbline 510
; XmtBuff.b[0] = 0;
clr R2
sts _XmtBuff,R2
.dbline 511
; XmtBuff.wrLength = 1;
ldi R24,1
ldi R25,0
sts _XmtBuff+64+1,R25
sts _XmtBuff+64,R24
.dbline 512
; XmtBuff.p_p=0;
sts _XmtBuff+70,R2
.dbline 513
; XmtBuff.p = XmtBuff.b;
ldi R24,<_XmtBuff
ldi R25,>_XmtBuff
sts _XmtBuff+68+1,R25
sts _XmtBuff+68,R24
.dbline 514
; USB_submit();
rcall _USB_submit
.dbline -2
.dbline 515
; }
L87:
.dbline 0 ; func end
ret
.dbfunc s set_interface _set_interface fI
.even
_set_interface::
.dbline -1
.dbline 540
; /************************************************************
; **工程名称:U盘固件程序开发
; **编译器类型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **创建人:陈驰
; **所属单位:湖南大学计算机与通信学院
;
; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **时钟频率:8MHZ
;
; **函数功能:标准设备请求
; **函数输入参数及说明:无
;
; **函数返回值:无
; **在本函数以外定义的变量:传输结构体
; **调用的函数说明:
; USB_submit();
; 控制端点提交函数
;
; **修改人:陈驰
; **修改日期:2004.4.30
; **修改说明:创建
; *************************************************************/
; void set_interface(void)
; {
.dbline 541
; XmtBuff.wrLength = 0;
clr R2
clr R3
sts _XmtBuff+64+1,R3
sts _XmtBuff+64,R2
.dbline 542
; USB_submit();
rcall _USB_submit
.dbline -2
.dbline 543
; }
L91:
.dbline 0 ; func end
ret
.area bss(ram, con, rel)
.dbfile G:\source\D12Setup.c
_XmtBuff::
.blkb 71
.dbsym s XmtBuff _XmtBuff X
.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 + -