www.pudn.com > usbcode.rar > D12Setup.s
.module D12Setup.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:\source/d12setup.h
.dbsym s StandardDeviceRequest _StandardDeviceRequest A[26:13]pfI
.area lit(rom, con, rel)
_device_descriptor::
.byte 18,1
.byte 0,1
.byte 0,0
.byte 0,64
.byte 'q,4
.byte 144,8
.byte 0,1
.byte 0,0
.byte 0,1
.dbsym s device_descriptor _device_descriptor A[18:18]c
_Configuration_Descriptor::
.byte 9,2
.byte 32,0
.byte 1,1
.byte 0,128
.byte 50
.dbsym s Configuration_Descriptor _Configuration_Descriptor A[9:9]c
_Interface_Descriptor::
.byte 9,4
.byte 0,0
.byte 2,8
.byte 6,'P
.byte 0
.dbsym s Interface_Descriptor _Interface_Descriptor A[9:9]c
_Bulk_in_Descriptor::
.byte 7,5
.byte 130,2
.byte 64,0
.byte 0
.dbsym s Bulk_in_Descriptor _Bulk_in_Descriptor A[7:7]c
_Bulk_out_Descriptor::
.byte 7,5
.byte 2,2
.byte 64,0
.byte 0
.dbsym s Bulk_out_Descriptor _Bulk_out_Descriptor A[7:7]c
.area text(rom, con, rel)
.dbfile G:\source/d12setup.h
.dbfile G:\source\D12Setup.c
.dbfunc s Setup_control _Setup_control fI
; p -> R10,R11
; j -> R20
; i -> R22
.even
_Setup_control::
rcall push_gset3
.dbline -1
.dbline 51
; /*++
;
; Module Name:
;
; D12Setup.c
;
; Abstract:
;
; Header file related to D12 module
;
; Environment:
;
; ICCAVR 6.29
;
; Revision History:
;
; 04/23/2004 chenchi created
;
; --*/
; /******************************************************************/
; #include "io8515v.h"
; #include "d12.h"
; #include "d12setup.h"
;
; TRANSMIT_STRUCT XmtBuff;//定义传输结构体变量
;
; /************************************************************
; **工程名称:U盘固件程序开发
; **编译器类型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **创建人:陈驰
; **所属单位:湖南大学计算机与通信学院
;
; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **时钟频率:8MHZ
;
; **函数功能:完成设备枚举
; **函数输入参数及说明:无
;
; **函数返回值:无
; **在本函数以外定义的变量:D12_COMMAND,D12_DATA
; **调用的函数说明:
; (*StandardDeviceRequest[i])();
; 标准设备请求函数
;
; **修改人:陈驰
; **修改日期:2004.4.30
; **修改说明:创建
; *************************************************************/
; void Setup_control(void)
; {
.dbline 53
; unsigned char i,j,*p;
; D12_COMMAND = 0x00;//选择端点(指针指向0位置)
clr R2
sts 31745,R2
.dbline 54
; cwait;
nop
.dbline 55
; D12_COMMAND = 0xf0;//读标准控制码
ldi R24,240
sts 31745,R24
.dbline 56
; cwait1;
nop
.dbline 56
nop
.dbline 64
; /****************************
; 缓冲区数据结构:
; 字节1:保留,可为任意值
; 字节2:数据字节的数目/长度
; 字节3:数据字节1
; 字节4:数据字节2
; *****************************/
; i = D12_DATA;//字节1
lds R22,31744
.dbline 65
; cwait1;
nop
.dbline 65
nop
.dbline 66
; i = D12_DATA;//字节2
lds R22,31744
.dbline 67
; cwait1;
nop
.dbline 67
nop
.dbline 68
; j = D12_DATA;//数据字节
lds R20,31744
.dbline 69
; csram;
sts 0xfc01,R22
.dbline 69
.dbline 70
; p = XmtBuff.b;//P指针指向传输缓冲区
ldi R24,<_XmtBuff
ldi R25,>_XmtBuff
mov R10,R24
mov R11,R25
.dbline 71
; *(p++) = j;
mov R2,R10
mov R3,R11
mov R24,R2
mov R25,R3
adiw R24,1
mov R10,R24
mov R11,R25
mov R30,R2
mov R31,R3
std z+0,R20
.dbline 72
; for(i=0;i<7;i++)
clr R22
rjmp L6
L3:
.dbline 73
.dbline 74
lds R20,31744
.dbline 75
sts 0xfc01,R22
.dbline 75
.dbline 76
st Z+,R20
.dbline 77
L4:
.dbline 72
inc R22
L6:
.dbline 72
cpi R22,7
brlo L3
.dbline 78
; {
; j = D12_DATA;//数据字节
; csram;
; asm("st Z+,%j");
; }
; D12_COMMAND = 0x01;// 选择端点(指针指向0位置)
ldi R24,1
sts 31745,R24
.dbline 79
; cwait;
nop
.dbline 80
; D12_COMMAND = 0xf1;//应答SETUP包
ldi R24,241
sts 31745,R24
.dbline 81
; csram;
sts 0xfc01,R22
.dbline 81
.dbline 82
; i = XmtBuff.b[1];
lds R22,_XmtBuff+1
.dbline 83
; if (i <= 0x0B)//标准请求跳转表
ldi R24,11
cp R24,R22
brlo L8
.dbline 84
; {
.dbline 85
; (*StandardDeviceRequest[i])();
ldi R24,<_StandardDeviceRequest
ldi R25,>_StandardDeviceRequest
mov R30,R22
clr R31
lsl R30
rol R31
add R30,R24
adc R31,R25
ldd R26,z+0
ldd R27,z+1
mov R30,R26
mov R31,R27
rcall xicall
.dbline 86
; }
rjmp L9
L8:
.dbline 87
; else{
.dbline 88
; D12_COMMAND = 0x01;//选择端点(指针指向0位置)
ldi R24,1
sts 31745,R24
.dbline 89
; cwait;
nop
.dbline 90
; D12_COMMAND = 0xf0;// 写缓冲区
ldi R24,240
sts 31745,R24
.dbline 91
; cwait;
nop
.dbline 99
; /****************************
; 缓冲区数据结构:
; 字节1:保留,可为任意值
; 字节2:数据字节的数目/长度
; 字节3:数据字节1
; 字节4:数据字节2
; *****************************/
; D12_DATA = 0x00;//字节1
clr R2
sts 31744,R2
.dbline 100
; cwait;
nop
.dbline 101
; D12_DATA = 0x01;//字节2
ldi R24,1
sts 31744,R24
.dbline 102
; csram;
sts 0xfc01,R22
.dbline 102
.dbline 103
; D12_DATA = 0x00;//数据字节
clr R2
sts 31744,R2
.dbline 104
; csram;
sts 0xfc01,R22
.dbline 104
.dbline 105
; D12_COMMAND = 0xfa;//设置 IN 缓冲区有效(满标志)
ldi R24,250
sts 31745,R24
.dbline 106
; csram;
sts 0xfc01,R22
.dbline 106
.dbline 107
; }
L9:
.dbline 108
; D12_COMMAND = 0x00;//选择端点(指针指向0位置)
clr R2
sts 31745,R2
.dbline 109
; cwait;
nop
.dbline 110
; D12_COMMAND = 0xf1;//应答SETUP包
ldi R24,241
sts 31745,R24
.dbline 111
; cwait;
nop
.dbline 112
; D12_COMMAND = 0xf2;//清端点缓冲区
ldi R24,242
sts 31745,R24
.dbline -2
.dbline 113
; }
L2:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r p 10 pc
.dbsym r j 20 c
.dbsym r i 22 c
.dbfunc s void_function _void_function fI
.even
_void_function::
.dbline -1
.dbline 136
; /************************************************************
; **工程名称:U盘固件程序开发
; **编译器类型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **创建人:陈驰
; **所属单位:湖南大学计算机与通信学院
;
; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **时钟频率:8MHZ
;
; **函数功能:停止控制端点.应答枚举请求
; **函数输入参数及说明:无
;
; **函数返回值:无
; **在本函数以外定义的变量:D12_COMMAND,D12_DATA
; **调用的函数说明:无
;
; **修改人:陈驰
; **修改日期:2004.4.30
; **修改说明:创建
; *************************************************************/
; void void_function(void)
; {
.dbline 137
; D12_COMMAND = 0x40;//0端点停止(用于发送Stall包)
ldi R24,64
sts 31745,R24
.dbline 138
; cwait;
nop
.dbline 139
; D12_DATA = 0x01;
ldi R24,1
sts 31744,R24
.dbline 140
; cwait;
nop
.dbline 141
; D12_COMMAND = 0x41;//1端点停止(用于发送Stall包)
ldi R24,65
sts 31745,R24
.dbline 142
; cwait;
nop
.dbline 143
; D12_DATA = 0x01;
ldi R24,1
sts 31744,R24
.dbline 144
; cwait;
nop
.dbline 145
; D12_COMMAND = 0xf1;//应答SETUP包
ldi R24,241
sts 31745,R24
.dbline 146
; csram;
sts 0xfc01,R22
.dbline 146
.dbline -2
.dbline 147
; }
L10:
.dbline 0 ; func end
ret
.dbfunc s get_status _get_status fI
.even
_get_status::
rcall push_gset1
.dbline -1
.dbline 172
; /************************************************************
; **工程名称:U盘固件程序开发
; **编译器类型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **创建人:陈驰
; **所属单位:湖南大学计算机与通信学院
;
; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **时钟频率:8MHZ
;
; **函数功能:标准设备请求
; **函数输入参数及说明:无
;
; **函数返回值:无
; **在本函数以外定义的变量:D12_COMMAND,D12_DATA
; **调用的函数说明:
; USB_submit();
; 控制端点提交函数
;
; **修改人:陈驰
; **修改日期:2004.4.30
; **修改说明:创建
; *************************************************************/
; void get_status(void)
; {
.dbline 173
; XmtBuff.b[1] = 0x00;
clr R2
sts _XmtBuff+1,R2
.dbline 174
; switch (XmtBuff.b[0])
lds R20,_XmtBuff
clr R21
cpi R20,128
ldi R30,0
cpc R21,R30
breq L14
cpi R20,129
ldi R30,0
cpc R21,R30
breq L17
cpi R20,130
ldi R30,0
cpc R21,R30
breq L18
rjmp L13
X0:
.dbline 175
; {
.dbline 177
; case 0x80:
; break;
L17:
.dbline 179
; case 0x81:
; XmtBuff.b[0] = 0x00;
clr R2
sts _XmtBuff,R2
.dbline 180
; break;
rjmp L14
L18:
.dbline 182
; case 0x82:
; XmtBuff.b[0] = 0x00;
clr R2
sts _XmtBuff,R2
.dbline 183
; break;
L13:
L14:
.dbline 185
; }
; XmtBuff.p_p=0;
clr R2
sts _XmtBuff+70,R2
.dbline 186
; XmtBuff.wrLength = 2;
ldi R24,2
ldi R25,0
sts _XmtBuff+64+1,R25
sts _XmtBuff+64,R24
.dbline 187
; XmtBuff.p = XmtBuff.b;
ldi R24,<_XmtBuff
ldi R25,>_XmtBuff
sts _XmtBuff+68+1,R25
sts _XmtBuff+68,R24
.dbline 188
; USB_submit();
rcall _USB_submit
.dbline -2
.dbline 189
; }
L11:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbfunc s clear_feature _clear_feature fI
; j -> R20
.even
_clear_feature::
rcall push_gset1
.dbline -1
.dbline 214
; /************************************************************
; **工程名称:U盘固件程序开发
; **编译器类型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **创建人:陈驰
; **所属单位:湖南大学计算机与通信学院
;
; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **时钟频率:8MHZ
;
; **函数功能:标准设备请求
; **函数输入参数及说明:无
;
; **函数返回值:无
; **在本函数以外定义的变量:D12_COMMAND,D12_DATA
; **调用的函数说明:
; USB_submit();
; 控制端点提交函数
;
; **修改人:陈驰
; **修改日期:2004.4.30
; **修改说明:创建
; *************************************************************/
; void clear_feature(void)
; {
.dbline 216
; unsigned char j;
; switch (XmtBuff.b[0])
lds R20,_XmtBuff
clr R21
cpi R20,0
cpc R20,R21
breq L24
cpi R20,1
ldi R30,0
cpc R21,R30
breq L24
cpi R20,2
ldi R30,0
cpc R21,R30
breq L28
rjmp L23
X1:
.dbline 217
; {
.dbline 219
; case 0x00://清设备唤醒功能
; break;
.dbline 221
; case 0x01://清接口状态
; break;
L28:
.dbline 224
; case 0x02://启用端点
; //XmtBuff.b[5] D7为方向,D3~0为端点号
; j = XmtBuff.b[5];
lds R20,_XmtBuff+5
.dbline 225
; if(j<0x80)
cpi R20,128
brsh L30
.dbline 226
; {
.dbline 227
; j = 0x40+j*2;
lsl R20
subi R20,192 ; addi 64
.dbline 228
; D12_COMMAND = j;// 启用OUT端点
sts 31745,R20
.dbline 229
; D12_DATA = 0x00;
clr R2
sts 31744,R2
.dbline 230
; csram;
sts 0xfc01,R22
.dbline 230
.dbline 231
; }
rjmp L24
L30:
.dbline 233
; else
; {
.dbline 234
; j = (j & 0x0f);
andi R20,15
.dbline 235
; D12_COMMAND = 0x41+j*2;// 启用IN端点
mov R24,R20
lsl R24
subi R24,191 ; addi 65
sts 31745,R24
.dbline 236
; D12_DATA = 0x00;
clr R2
sts 31744,R2
.dbline 237
; csram;
sts 0xfc01,R22
.dbline 237
.dbline 238
; }
.dbline 239
; break;
L23:
L24:
.dbline 241
; }
; XmtBuff.wrLength = 0;
clr R2
clr R3
sts _XmtBuff+64+1,R3
sts _XmtBuff+64,R2
.dbline 242
; USB_submit();
rcall _USB_submit
.dbline -2
.dbline 243
; }
L22:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r j 20 c
.dbfunc s set_feature _set_feature fI
; j -> R20
.even
_set_feature::
rcall push_gset1
.dbline -1
.dbline 268
; /************************************************************
; **工程名称:U盘固件程序开发
; **编译器类型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **创建人:陈驰
; **所属单位:湖南大学计算机与通信学院
;
; **芯片类型: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