www.pudn.com > usbcode.rar > D12Setup.lis
.module D12Setup.c
.area data(ram, con, rel)
0000 _StandardDeviceRequest::
0000 .blkw 1
.area idata
0000 1200 .word PL_get_status
.area data(ram, con, rel)
0002 .blkw 1
.area idata
0002 1000 .word PL_clear_feature
.area data(ram, con, rel)
0004 .blkw 1
.area idata
0004 0E00 .word PL_void_function
.area data(ram, con, rel)
0006 .blkw 1
.area idata
0006 0C00 .word PL_set_feature
.area data(ram, con, rel)
0008 .blkw 1
.area idata
0008 0E00 .word PL_void_function
.area data(ram, con, rel)
000A .blkw 1
.area idata
000A 0A00 .word PL_set_address
.area data(ram, con, rel)
000C .blkw 1
.area idata
000C 0800 .word PL_get_descriptor
.area data(ram, con, rel)
000E .blkw 1
.area idata
000E 0E00 .word PL_void_function
.area data(ram, con, rel)
0010 .blkw 1
.area idata
0010 0600 .word PL_get_configuration
.area data(ram, con, rel)
0012 .blkw 1
.area idata
0012 0400 .word PL_set_configuration
.area data(ram, con, rel)
0014 .blkw 1
.area idata
0014 0200 .word PL_get_interface
.area data(ram, con, rel)
0016 .blkw 1
.area idata
0016 0000 .word PL_set_interface
.area data(ram, con, rel)
0018 .blkw 1
.area idata
0018 0E00 .word PL_void_function
.area data(ram, con, rel)
001A .dbfile G:\source/d12setup.h
001A .dbsym s StandardDeviceRequest _StandardDeviceRequest A[26:13]pfI
.area lit(rom, con, rel)
0000 _device_descriptor::
0000 1201 .byte 18,1
0002 0001 .byte 0,1
0004 0000 .byte 0,0
0006 0040 .byte 0,64
0008 7104 .byte 'q,4
000A 9008 .byte 144,8
000C 0001 .byte 0,1
000E 0000 .byte 0,0
0010 0001 .byte 0,1
0012 .dbsym s device_descriptor _device_descriptor A[18:18]c
0012 _Configuration_Descriptor::
0012 0902 .byte 9,2
0014 2000 .byte 32,0
0016 0101 .byte 1,1
0018 0080 .byte 0,128
001A 32 .byte 50
001B .dbsym s Configuration_Descriptor _Configuration_Descriptor A[9:9]c
001B _Interface_Descriptor::
001B 0904 .byte 9,4
001D 0000 .byte 0,0
001F 0208 .byte 2,8
0021 0650 .byte 6,'P
0023 00 .byte 0
0024 .dbsym s Interface_Descriptor _Interface_Descriptor A[9:9]c
0024 _Bulk_in_Descriptor::
0024 0705 .byte 7,5
0026 8202 .byte 130,2
0028 4000 .byte 64,0
002A 00 .byte 0
002B .dbsym s Bulk_in_Descriptor _Bulk_in_Descriptor A[7:7]c
002B _Bulk_out_Descriptor::
002B 0705 .byte 7,5
002D 0202 .byte 2,2
002F 4000 .byte 64,0
0031 00 .byte 0
0032 .dbsym s Bulk_out_Descriptor _Bulk_out_Descriptor A[7:7]c
.area text(rom, con, rel)
0000 .dbfile G:\source/d12setup.h
0000 .dbfile G:\source\D12Setup.c
0000 .dbfunc s Setup_control _Setup_control fI
; p -> R10,R11
; j -> R20
; i -> R22
.even
0000 _Setup_control::
0000 00D0 rcall push_gset3
0002 .dbline -1
0002 .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)
; {
0002 .dbline 53
; unsigned char i,j,*p;
; D12_COMMAND = 0x00;//选择端点(指针指向0位置)
0002 2224 clr R2
0004 2092017C sts 31745,R2
0008 .dbline 54
; cwait;
0008 0000 nop
000A .dbline 55
; D12_COMMAND = 0xf0;//读标准控制码
000A 80EF ldi R24,240
000C 8093017C sts 31745,R24
0010 .dbline 56
; cwait1;
0010 0000 nop
0012 .dbline 56
0012 0000 nop
0014 .dbline 64
; /****************************
; 缓冲区数据结构:
; 字节1:保留,可为任意值
; 字节2:数据字节的数目/长度
; 字节3:数据字节1
; 字节4:数据字节2
; *****************************/
; i = D12_DATA;//字节1
0014 6091007C lds R22,31744
0018 .dbline 65
; cwait1;
0018 0000 nop
001A .dbline 65
001A 0000 nop
001C .dbline 66
; i = D12_DATA;//字节2
001C 6091007C lds R22,31744
0020 .dbline 67
; cwait1;
0020 0000 nop
0022 .dbline 67
0022 0000 nop
0024 .dbline 68
; j = D12_DATA;//数据字节
0024 4091007C lds R20,31744
0028 .dbline 69
; csram;
0028 609301FC sts 0xfc01,R22
002C .dbline 69
002C .dbline 70
; p = XmtBuff.b;//P指针指向传输缓冲区
002C 80E0 ldi R24,<_XmtBuff
002E 90E0 ldi R25,>_XmtBuff
0030 A82E mov R10,R24
0032 B92E mov R11,R25
0034 .dbline 71
; *(p++) = j;
0034 2A2C mov R2,R10
0036 3B2C mov R3,R11
0038 822D mov R24,R2
003A 932D mov R25,R3
003C 0196 adiw R24,1
003E A82E mov R10,R24
0040 B92E mov R11,R25
0042 E22D mov R30,R2
0044 F32D mov R31,R3
0046 4083 std z+0,R20
0048 .dbline 72
; for(i=0;i<7;i++)
0048 6627 clr R22
004A 06C0 rjmp L6
004C L3:
004C .dbline 73
004C .dbline 74
004C 4091007C lds R20,31744
0050 .dbline 75
0050 609301FC sts 0xfc01,R22
0054 .dbline 75
0054 .dbline 76
0054 4193 st Z+,R20
0056 .dbline 77
0056 L4:
0056 .dbline 72
0056 6395 inc R22
0058 L6:
0058 .dbline 72
0058 6730 cpi R22,7
005A C0F3 brlo L3
005C .dbline 78
; {
; j = D12_DATA;//数据字节
; csram;
; asm("st Z+,%j");
; }
; D12_COMMAND = 0x01;// 选择端点(指针指向0位置)
005C 81E0 ldi R24,1
005E 8093017C sts 31745,R24
0062 .dbline 79
; cwait;
0062 0000 nop
0064 .dbline 80
; D12_COMMAND = 0xf1;//应答SETUP包
0064 81EF ldi R24,241
0066 8093017C sts 31745,R24
006A .dbline 81
; csram;
006A 609301FC sts 0xfc01,R22
006E .dbline 81
006E .dbline 82
; i = XmtBuff.b[1];
006E 60910100 lds R22,_XmtBuff+1
0072 .dbline 83
; if (i <= 0x0B)//标准请求跳转表
0072 8BE0 ldi R24,11
0074 8617 cp R24,R22
0076 70F0 brlo L8
0078 .dbline 84
; {
0078 .dbline 85
; (*StandardDeviceRequest[i])();
0078 80E0 ldi R24,<_StandardDeviceRequest
007A 90E0 ldi R25,>_StandardDeviceRequest
007C E62F mov R30,R22
007E FF27 clr R31
0080 EE0F lsl R30
0082 FF1F rol R31
0084 E80F add R30,R24
0086 F91F adc R31,R25
0088 A081 ldd R26,z+0
008A B181 ldd R27,z+1
008C EA2F mov R30,R26
008E FB2F mov R31,R27
0090 00D0 rcall xicall
0092 .dbline 86
; }
0092 1BC0 rjmp L9
0094 L8:
0094 .dbline 87
; else{
0094 .dbline 88
; D12_COMMAND = 0x01;//选择端点(指针指向0位置)
0094 81E0 ldi R24,1
0096 8093017C sts 31745,R24
009A .dbline 89
; cwait;
009A 0000 nop
009C .dbline 90
; D12_COMMAND = 0xf0;// 写缓冲区
009C 80EF ldi R24,240
009E 8093017C sts 31745,R24
00A2 .dbline 91
; cwait;
00A2 0000 nop
00A4 .dbline 99
; /****************************
; 缓冲区数据结构:
; 字节1:保留,可为任意值
; 字节2:数据字节的数目/长度
; 字节3:数据字节1
; 字节4:数据字节2
; *****************************/
; D12_DATA = 0x00;//字节1
00A4 2224 clr R2
00A6 2092007C sts 31744,R2
00AA .dbline 100
; cwait;
00AA 0000 nop
00AC .dbline 101
; D12_DATA = 0x01;//字节2
00AC 81E0 ldi R24,1
00AE 8093007C sts 31744,R24
00B2 .dbline 102
; csram;
00B2 609301FC sts 0xfc01,R22
00B6 .dbline 102
00B6 .dbline 103
; D12_DATA = 0x00;//数据字节
00B6 2224 clr R2
00B8 2092007C sts 31744,R2
00BC .dbline 104
; csram;
00BC 609301FC sts 0xfc01,R22
00C0 .dbline 104
00C0 .dbline 105
; D12_COMMAND = 0xfa;//设置 IN 缓冲区有效(满标志)
00C0 8AEF ldi R24,250
00C2 8093017C sts 31745,R24
00C6 .dbline 106
; csram;
00C6 609301FC sts 0xfc01,R22
00CA .dbline 106
00CA .dbline 107
; }
00CA L9:
00CA .dbline 108
; D12_COMMAND = 0x00;//选择端点(指针指向0位置)
00CA 2224 clr R2
00CC 2092017C sts 31745,R2
00D0 .dbline 109
; cwait;
00D0 0000 nop
00D2 .dbline 110
; D12_COMMAND = 0xf1;//应答SETUP包
00D2 81EF ldi R24,241
00D4 8093017C sts 31745,R24
00D8 .dbline 111
; cwait;
00D8 0000 nop
00DA .dbline 112
; D12_COMMAND = 0xf2;//清端点缓冲区
00DA 82EF ldi R24,242
00DC 8093017C sts 31745,R24
00E0 .dbline -2
00E0 .dbline 113
; }
00E0 L2:
00E0 00D0 rcall pop_gset3
00E2 .dbline 0 ; func end
00E2 0895 ret
00E4 .dbsym r p 10 pc
00E4 .dbsym r j 20 c
00E4 .dbsym r i 22 c
00E4 .dbfunc s void_function _void_function fI
.even
00E4 _void_function::
00E4 .dbline -1
00E4 .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)
; {
00E4 .dbline 137
; D12_COMMAND = 0x40;//0端点停止(用于发送Stall包)
00E4 80E4 ldi R24,64
00E6 8093017C sts 31745,R24
00EA .dbline 138
; cwait;
00EA 0000 nop
00EC .dbline 139
; D12_DATA = 0x01;
00EC 81E0 ldi R24,1
00EE 8093007C sts 31744,R24
00F2 .dbline 140
; cwait;
00F2 0000 nop
00F4 .dbline 141
; D12_COMMAND = 0x41;//1端点停止(用于发送Stall包)
00F4 81E4 ldi R24,65
00F6 8093017C sts 31745,R24
00FA .dbline 142
; cwait;
00FA 0000 nop
00FC .dbline 143
; D12_DATA = 0x01;
00FC 81E0 ldi R24,1
00FE 8093007C sts 31744,R24
0102 .dbline 144
; cwait;
0102 0000 nop
0104 .dbline 145
; D12_COMMAND = 0xf1;//应答SETUP包
0104 81EF ldi R24,241
0106 8093017C sts 31745,R24
010A .dbline 146
; csram;
010A 609301FC sts 0xfc01,R22
010E .dbline 146
010E .dbline -2
010E .dbline 147
; }
010E L10:
010E .dbline 0 ; func end
010E 0895 ret
0110 .dbfunc s get_status _get_status fI
.even
0110 _get_status::
0110 00D0 rcall push_gset1
0112 .dbline -1
0112 .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)
; {
0112 .dbline 173
; XmtBuff.b[1] = 0x00;
0112 2224 clr R2
0114 20920100 sts _XmtBuff+1,R2
0118 .dbline 174
; switch (XmtBuff.b[0])
0118 40910000 lds R20,_XmtBuff
011C 5527 clr R21
011E 4038 cpi R20,128
0120 E0E0 ldi R30,0
0122 5E07 cpc R21,R30
0124 81F0 breq L14
0126 4138 cpi R20,129
0128 E0E0 ldi R30,0
012A 5E07 cpc R21,R30
012C 29F0 breq L17
012E 4238 cpi R20,130
0130 E0E0 ldi R30,0
0132 5E07 cpc R21,R30
0134 29F0 breq L18
0136 07C0 rjmp L13
0138 X0:
0138 .dbline 175
; {
0138 .dbline 177
; case 0x80:
; break;
0138 L17:
0138 .dbline 179
; case 0x81:
; XmtBuff.b[0] = 0x00;
0138 2224 clr R2
013A 20920000 sts _XmtBuff,R2
013E .dbline 180
; break;
013E 03C0 rjmp L14
0140 L18:
0140 .dbline 182
; case 0x82:
; XmtBuff.b[0] = 0x00;
0140 2224 clr R2
0142 20920000 sts _XmtBuff,R2
0146 .dbline 183
; break;
0146 L13:
0146 L14:
0146 .dbline 185
; }
; XmtBuff.p_p=0;
0146 2224 clr R2
0148 20924600 sts _XmtBuff+70,R2
014C .dbline 186
; XmtBuff.wrLength = 2;
014C 82E0 ldi R24,2
014E 90E0 ldi R25,0
0150 90934100 sts _XmtBuff+64+1,R25
0154 80934000 sts _XmtBuff+64,R24
0158 .dbline 187
; XmtBuff.p = XmtBuff.b;
0158 80E0 ldi R24,<_XmtBuff
015A 90E0 ldi R25,>_XmtBuff
015C 90934500 sts _XmtBuff+68+1,R25
0160 80934400 sts _XmtBuff+68,R24
0164 .dbline 188
; USB_submit();
0164 00D0 rcall _USB_submit
0166 .dbline -2
0166 .dbline 189
; }
0166 L11:
0166 00D0 rcall pop_gset1
0168 .dbline 0 ; func end
0168 0895 ret
016A .dbfunc s clear_feature _clear_feature fI
; j -> R20
.even
016A _clear_feature::
016A 00D0 rcall push_gset1
016C .dbline -1
016C .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)
; {
016C .dbline 216
; unsigned char j;
; switch (XmtBuff.b[0])
016C 40910000 lds R20,_XmtBuff
0170 5527 clr R21
0172 4030 cpi R20,0
0174 4507 cpc R20,R21
0176 11F1 breq L24
0178 4130 cpi R20,1
017A E0E0 ldi R30,0
017C 5E07 cpc R21,R30
017E F1F0 breq L24
0180 4230 cpi R20,2
0182 E0E0 ldi R30,0
0184 5E07 cpc R21,R30
0186 09F0 breq L28
0188 19C0 rjmp L23
018A X1:
018A .dbline 217
; {
018A .dbline 219
; case 0x00://清设备唤醒功能
; break;
018A .dbline 221
; case 0x01://清接口状态
; break;
018A L28:
018A .dbline 224
; case 0x02://启用端点
; //XmtBuff.b[5] D7为方向,D3~0为端点号
; j = XmtBuff.b[5];
018A 40910500 lds R20,_XmtBuff+5
018E .dbline 225
; if(j<0x80)
018E 4038 cpi R20,128
0190 50F4 brsh L30
0192 .dbline 226
; {
0192 .dbline 227
; j = 0x40+j*2;
0192 440F lsl R20
0194 405C subi R20,192 ; addi 64
0196 .dbline 228
; D12_COMMAND = j;// 启用OUT端点
0196 4093017C sts 31745,R20
019A .dbline 229
; D12_DATA = 0x00;
019A 2224 clr R2
019C 2092007C sts 31744,R2
01A0 .dbline 230
; csram;
01A0 609301FC sts 0xfc01,R22
01A4 .dbline 230
01A4 .dbline 231
; }
01A4 0BC0 rjmp L24
01A6 L30:
01A6 .dbline 233
; else
; {
01A6 .dbline 234
; j = (j & 0x0f);
01A6 4F70 andi R20,15
01A8 .dbline 235
; D12_COMMAND = 0x41+j*2;// 启用IN端点
01A8 842F mov R24,R20
01AA 880F lsl R24
01AC 8F5B subi R24,191 ; addi 65
01AE 8093017C sts 31745,R24
01B2 .dbline 236
; D12_DATA = 0x00;
01B2 2224 clr R2
01B4 2092007C sts 31744,R2
01B8 .dbline 237
; csram;
01B8 609301FC sts 0xfc01,R22
01BC .dbline 237
01BC .dbline 238
; }
01BC .dbline 239
; break;
01BC L23:
01BC L24:
01BC .dbline 241
; }
; XmtBuff.wrLength = 0;
01BC 2224 clr R2
01BE 3324 clr R3
01C0 30924100 sts _XmtBuff+64+1,R3
01C4 20924000 sts _XmtBuff+64,R2
01C8 .dbline 242
; USB_submit();
01C8 00D0 rcall _USB_submit
01CA .dbline -2
01CA .dbline 243
; }
01CA L22:
01CA 00D0 rcall pop_gset1
01CC .dbline 0 ; func end
01CC 0895 ret
01CE .dbsym r j 20 c
01CE .dbfunc s set_feature _set_feature fI
; j -> R20
.even
01CE _set_feature::
01CE 00D0 rcall push_gset1
01D0 .dbline -1
01D0 .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)
; {
01D0 .dbline 270
; unsigned char j;
; switch (XmtBuff.b[0])
01D0 40910000 lds R20,_XmtBuff
01D4 5527 clr R21
01D6 4030 cpi R20,0
01D8 4507 cpc R20,R21
01DA 19F1 breq L35
01DC 4130 cpi R20,1
01DE E0E0 ldi R30,0
01E0 5E07 cpc R21,R30
01E2 F9F0 breq L35
01E4 4230 cpi R20,2
01E6 E0E0 ldi R30,0
01E8 5E07 cpc R21,R30
01EA 09F0 breq L39
01EC 1AC0 rjmp L34
01EE X2:
01EE .dbline 271
; {
01EE .dbline 273
; case 0x00://设置设备唤醒功能
; break;
01EE .dbline 275
; case 0x01://设置接口状态
; break;
01EE L39:
01EE .dbline 278
; case 0x02://停止端点
; //XmtBuff.b[5] D7为方向,D3~0为端点号
; j = XmtBuff.b[5];
01EE 40910500 lds R20,_XmtBuff+5
01F2 .dbline 279
; if(j<0x80)
01F2 4038 cpi R20,128
01F4 58F4 brsh L41
01F6 .dbline 280
; {
01F6 .dbline 281
; j = 0x40+j * 2;
01F6 440F lsl R20
01F8 405C subi R20,192 ; addi 64
01FA .dbline 282
; D12_COMMAND = j;// 停止OUT端点
01FA 4093017C sts 31745,R20
01FE .dbline 283
; cwait;
01FE 0000 nop
0200 .dbline 284
; D12_DATA = 0x01;
0200 81E0 ldi R24,1
0202 8093007C sts 31744,R24
0206 .dbline 285
; csram;
0206 609301FC sts 0xfc01,R22
020A .dbline 285
020A .dbline 286
; }
020A 0BC0 rjmp L35
020C L41:
020C .dbline 288
; else
; {
020C .dbline 289
; j = j & 0x0f;
020C 4F70 andi R20,15
020E .dbline 290
; j = 0x41+j*2;
020E 440F lsl R20
0210 4F5B subi R20,191 ; addi 65
0212 .dbline 291
; D12_COMMAND = j;// 停止IN端点
0212 4093017C sts 31745,R20
0216 .dbline 292
; cwait;
0216 0000 nop
0218 .dbline 293
; D12_DATA = 0x01;
0218 81E0 ldi R24,1
021A 8093007C sts 31744,R24
021E .dbline 294
; csram;
021E 609301FC sts 0xfc01,R22
0222 .dbline 294
0222 .dbline 295
; }
0222 .dbline 296
; break;
0222 L34:
0222 L35:
0222 .dbline 298
; }
; XmtBuff.wrLength = 0;
0222 2224 clr R2
0224 3324 clr R3
0226 30924100 sts _XmtBuff+64+1,R3
022A 20924000 sts _XmtBuff+64,R2
022E .dbline 299
; USB_submit();
022E 00D0 rcall _USB_submit
0230 .dbline -2
0230 .dbline 300
; }
0230 L33:
0230 00D0 rcall pop_gset1
0232 .dbline 0 ; func end
0232 0895 ret
0234 .dbsym r j 20 c
0234 .dbfunc s set_address _set_address fI
; j -> R20
.even
0234 _set_address::
0234 00D0 rcall push_gset1
0236 .dbline -1
0236 .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)
; {
0236 .dbline 327
; unsigned char j;
; j = 0x80 | XmtBuff.b[2];
0236 40910200 lds R20,_XmtBuff+2
023A 4068 ori R20,128
023C .dbline 328
; D12_COMMAND = 0xd0;//设置新地址使能
023C 80ED ldi R24,208
023E 8093017C sts 31745,R24
0242 .dbline 329
; cwait;
0242 0000 nop
0244 .dbline 330
; D12_DATA = j;
0244 4093007C sts 31744,R20
0248 .dbline 331
; csram;
0248 609301FC sts 0xfc01,R22
024C .dbline 331
024C .dbline 332
; XmtBuff.wrLength = 0;
024C 2224 clr R2
024E 3324 clr R3
0250 30924100 sts _XmtBuff+64+1,R3
0254 20924000 sts _XmtBuff+64,R2
0258 .dbline 333
; USB_submit();
0258 00D0 rcall _USB_submit
025A .dbline -2
025A .dbline 334
; }
025A L44:
025A 00D0 rcall pop_gset1
025C .dbline 0 ; func end
025C 0895 ret
025E .dbsym r j 20 c
025E .dbfunc s get_descriptor _get_descriptor fI
; i -> R20,R21
.even
025E _get_descriptor::
025E 00D0 rcall push_gset1
0260 .dbline -1
0260 .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)
; {
0260 .dbline 361
; unsigned int i;
; XmtBuff.p_p=1;
0260 81E0 ldi R24,1
0262 80934600 sts _XmtBuff+70,R24
0266 .dbline 362
; switch (XmtBuff.b[3])
0266 40910300 lds R20,_XmtBuff+3
026A 5527 clr R21
026C 4130 cpi R20,1
026E E0E0 ldi R30,0
0270 5E07 cpc R21,R30
0272 51F0 breq L53
0274 4230 cpi R20,2
0276 E0E0 ldi R30,0
0278 5E07 cpc R21,R30
027A 99F0 breq L56
027C 4330 cpi R20,3
027E E0E0 ldi R30,0
0280 5E07 cpc R21,R30
0282 09F4 brne X6
0284 38C0 rjmp L66
0286 X6:
0286 48C0 rjmp L49
0288 X3:
0288 .dbline 363
; {
0288 L53:
0288 .dbline 365
; case 0x01: //USB_DEVICE
; XmtBuff.pp = device_descriptor;
0288 80E0 ldi R24,<_device_descriptor
028A 90E0 ldi R25,>_device_descriptor
028C 90934300 sts _XmtBuff+66+1,R25
0290 80934200 sts _XmtBuff+66,R24
0294 .dbline 366
; XmtBuff.wrLength = sizeof(device_descriptor);
0294 82E1 ldi R24,18
0296 90E0 ldi R25,0
0298 90934100 sts _XmtBuff+64+1,R25
029C 80934000 sts _XmtBuff+64,R24
02A0 .dbline 367
; break;
02A0 3DC0 rjmp L50
02A2 L56:
02A2 .dbline 369
; case 0x02:// USB_CONFIGURATION
; i = XmtBuff.b[7];
02A2 40910700 lds R20,_XmtBuff+7
02A6 5527 clr R21
02A8 .dbline 370
; i = ((i<<8) | XmtBuff.b[6]);
02A8 20900600 lds R2,_XmtBuff+6
02AC 3324 clr R3
02AE 442E mov R4,R20
02B0 552E mov R5,R21
02B2 542C mov R5,R4
02B4 4424 clr R4
02B6 4228 or R4,R2
02B8 5328 or R5,R3
02BA 442D mov R20,R4
02BC 552D mov R21,R5
02BE .dbline 371
; XmtBuff.pp = Configuration_Descriptor;
02BE 80E0 ldi R24,<_Configuration_Descriptor
02C0 90E0 ldi R25,>_Configuration_Descriptor
02C2 90934300 sts _XmtBuff+66+1,R25
02C6 80934200 sts _XmtBuff+66,R24
02CA .dbline 372
; XmtBuff.wrLength = *(XmtBuff.pp+2);
02CA 0296 adiw R24,2
02CC E82F mov R30,R24
02CE F92F mov R31,R25
02D0 C895 lpm
02D2 202C mov R2,R0
02D4 3324 clr R3
02D6 30924100 sts _XmtBuff+64+1,R3
02DA 20924000 sts _XmtBuff+64,R2
02DE .dbline 373
; if(i<16)
02DE 4031 cpi R20,16
02E0 E0E0 ldi R30,0
02E2 5E07 cpc R21,R30
02E4 D8F4 brsh L50
02E6 .dbline 374
; XmtBuff.wrLength = XmtBuff.b[6];
02E6 20900600 lds R2,_XmtBuff+6
02EA 3324 clr R3
02EC 30924100 sts _XmtBuff+64+1,R3
02F0 20924000 sts _XmtBuff+64,R2
02F4 .dbline 375
; break;
02F4 13C0 rjmp L50
02F6 L66:
02F6 .dbline 377
; case 0x03: //USB_STRING
; switch(XmtBuff.b[2])
02F6 40910200 lds R20,_XmtBuff+2
02FA 5527 clr R21
02FC 4030 cpi R20,0
02FE 4507 cpc R20,R21
0300 69F0 breq L50
0302 4130 cpi R20,1
0304 E0E0 ldi R30,0
0306 5E07 cpc R21,R30
0308 49F0 breq L50
030A 4230 cpi R20,2
030C E0E0 ldi R30,0
030E 5E07 cpc R21,R30
0310 29F0 breq L50
0312 00C0 rjmp L67
0314 X4:
0314 .dbline 378
; {
0314 .dbline 382
; case 0x00 :
; //XmtBuff.wrLength = sizeof(USBStringLanguageDescription);
; //?XmtBuff.p = USBStringLanguageDescription;
; break;
0314 .dbline 386
; case 0x01 :
; //?XmtBuff.wrLength = sizeof(USBStringDescription1);
; //?XmtBuff.p = USBStringDescription1;
; break;
0314 .dbline 390
; case 0x02 :
; //?XmtBuff.wrLength = sizeof(USBStringDescription2);
; //?XmtBuff.p = USBStringDescription2;
; break;
0314 L67:
0314 .dbline 392
; default :
; void_function();
0314 E7DE rcall _void_function
0316 .dbline 393
; return;
0316 03C0 rjmp L47
0318 X5:
0318 .dbline 395
; }
; break;
0318 L49:
0318 .dbline 397
; default :
; void_function();
0318 E5DE rcall _void_function
031A .dbline 398
; return;
031A 01C0 rjmp L47
031C L50:
031C .dbline 400
; }
; USB_submit();
031C 00D0 rcall _USB_submit
031E .dbline -2
031E .dbline 401
; }
031E L47:
031E 00D0 rcall pop_gset1
0320 .dbline 0 ; func end
0320 0895 ret
0322 .dbsym r i 20 i
0322 .dbfunc s get_configuration _get_configuration fI
.even
0322 _get_configuration::
0322 .dbline -1
0322 .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)
; {
0322 .dbline 427
; XmtBuff.b[0] = 1;//返回是否被配置(非 0 为配置)
0322 81E0 ldi R24,1
0324 80930000 sts _XmtBuff,R24
0328 .dbline 428
; XmtBuff.wrLength = 16;
0328 80E1 ldi R24,16
032A 90E0 ldi R25,0
032C 90934100 sts _XmtBuff+64+1,R25
0330 80934000 sts _XmtBuff+64,R24
0334 .dbline 429
; XmtBuff.p_p=0;
0334 2224 clr R2
0336 20924600 sts _XmtBuff+70,R2
033A .dbline 430
; XmtBuff.p = XmtBuff.b;
033A 80E0 ldi R24,<_XmtBuff
033C 90E0 ldi R25,>_XmtBuff
033E 90934500 sts _XmtBuff+68+1,R25
0342 80934400 sts _XmtBuff+68,R24
0346 .dbline 431
; USB_submit();
0346 00D0 rcall _USB_submit
0348 .dbline -2
0348 .dbline 432
; }
0348 L74:
0348 .dbline 0 ; func end
0348 0895 ret
034A .dbfunc s set_configuration _set_configuration fI
; j -> R20
.even
034A _set_configuration::
034A 00D0 rcall push_gset1
034C .dbline -1
034C .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)
; {
034C .dbline 459
; unsigned char j;
; if (XmtBuff.b[0] == 0x00)
034C 20900000 lds R2,_XmtBuff
0350 2220 tst R2
0352 51F5 brne L79
0354 .dbline 460
; {
0354 .dbline 461
; XmtBuff.wrLength = 0;
0354 2224 clr R2
0356 3324 clr R3
0358 30924100 sts _XmtBuff+64+1,R3
035C 20924000 sts _XmtBuff+64,R2
0360 .dbline 462
; USB_submit();
0360 00D0 rcall _USB_submit
0362 .dbline 463
; j = XmtBuff.b[2];
0362 40910200 lds R20,_XmtBuff+2
0366 .dbline 464
; D12_COMMAND = 0xd8;
0366 88ED ldi R24,216
0368 8093017C sts 31745,R24
036C .dbline 465
; if(j == 0x00)
036C 4423 tst R20
036E 21F4 brne L83
0370 .dbline 466
; {
0370 .dbline 467
; D12_DATA = 0x00; // 停止普通/同步端点
0370 2224 clr R2
0372 2092007C sts 31744,R2
0376 .dbline 468
0376 15C0 rjmp L84
0378 L83:
0378 .dbline 468
; }else if(j == 0x01)
0378 4130 cpi R20,1
037A 99F4 brne L85
037C .dbline 469
; {
037C .dbline 470
; D12_DATA = 0x01; // 使能普通/同步端点
037C 81E0 ldi R24,1
037E 8093007C sts 31744,R24
0382 .dbline 471
; cwait;
0382 0000 nop
0384 .dbline 472
; D12_COMMAND = 0x03;
0384 83E0 ldi R24,3
0386 8093017C sts 31745,R24
038A .dbline 473
; cwait;
038A 0000 nop
038C .dbline 474
; D12_COMMAND = 0xfa;// 设置 IN 缓冲区有效(满标志)
038C 8AEF ldi R24,250
038E 8093017C sts 31745,R24
0392 .dbline 475
; cwait;
0392 0000 nop
0394 .dbline 476
; D12_COMMAND = 0x05;
0394 85E0 ldi R24,5
0396 8093017C sts 31745,R24
039A .dbline 477
; cwait;
039A 0000 nop
039C .dbline 478
; D12_COMMAND = 0xfa;// 设置 IN 缓冲区有效(满标志)
039C 8AEF ldi R24,250
039E 8093017C sts 31745,R24
03A2 .dbline 479
; }
03A2 L85:
03A2 L84:
03A2 .dbline 480
; csram;
03A2 609301FC sts 0xfc01,R22
03A6 .dbline 480
03A6 .dbline 481
; }
03A6 01C0 rjmp L80
03A8 L79:
03A8 .dbline 483
03A8 9DDE rcall _void_function
03AA L80:
03AA .dbline -2
03AA .dbline 484
; else
; void_function();
; }
03AA L78:
03AA 00D0 rcall pop_gset1
03AC .dbline 0 ; func end
03AC 0895 ret
03AE .dbsym r j 20 c
03AE .dbfunc s get_interface _get_interface fI
.even
03AE _get_interface::
03AE .dbline -1
03AE .dbline 509
; /************************************************************
; **工程名称:U盘固件程序开发
; **编译器类型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **创建人:陈驰
; **所属单位:湖南大学计算机与通信学院
;
; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **时钟频率:8MHZ
;
; **函数功能:标准设备请求
; **函数输入参数及说明:无
;
; **函数返回值:无
; **在本函数以外定义的变量:传输结构体
; **调用的函数说明:
; USB_submit();
; 控制端点提交函数
;
; **修改人:陈驰
; **修改日期:2004.4.30
; **修改说明:创建
; *************************************************************/
; void get_interface(void)
; {
03AE .dbline 510
; XmtBuff.b[0] = 0;
03AE 2224 clr R2
03B0 20920000 sts _XmtBuff,R2
03B4 .dbline 511
; XmtBuff.wrLength = 1;
03B4 81E0 ldi R24,1
03B6 90E0 ldi R25,0
03B8 90934100 sts _XmtBuff+64+1,R25
03BC 80934000 sts _XmtBuff+64,R24
03C0 .dbline 512
; XmtBuff.p_p=0;
03C0 20924600 sts _XmtBuff+70,R2
03C4 .dbline 513
; XmtBuff.p = XmtBuff.b;
03C4 80E0 ldi R24,<_XmtBuff
03C6 90E0 ldi R25,>_XmtBuff
03C8 90934500 sts _XmtBuff+68+1,R25
03CC 80934400 sts _XmtBuff+68,R24
03D0 .dbline 514
; USB_submit();
03D0 00D0 rcall _USB_submit
03D2 .dbline -2
03D2 .dbline 515
; }
03D2 L87:
03D2 .dbline 0 ; func end
03D2 0895 ret
03D4 .dbfunc s set_interface _set_interface fI
.even
03D4 _set_interface::
03D4 .dbline -1
03D4 .dbline 540
; /************************************************************
; **工程名称:U盘固件程序开发
; **编译器类型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **创建人:陈驰
; **所属单位:湖南大学计算机与通信学院
;
; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **时钟频率:8MHZ
;
; **函数功能:标准设备请求
; **函数输入参数及说明:无
;
; **函数返回值:无
; **在本函数以外定义的变量:传输结构体
; **调用的函数说明:
; USB_submit();
; 控制端点提交函数
;
; **修改人:陈驰
; **修改日期:2004.4.30
; **修改说明:创建
; *************************************************************/
; void set_interface(void)
; {
03D4 .dbline 541
; XmtBuff.wrLength = 0;
03D4 2224 clr R2
03D6 3324 clr R3
03D8 30924100 sts _XmtBuff+64+1,R3
03DC 20924000 sts _XmtBuff+64,R2
03E0 .dbline 542
; USB_submit();
03E0 00D0 rcall _USB_submit
03E2 .dbline -2
03E2 .dbline 543
; }
03E2 L91:
03E2 .dbline 0 ; func end
03E2 0895 ret
.area bss(ram, con, rel)
0000 .dbfile G:\source\D12Setup.c
0000 _XmtBuff::
0000 .blkb 71
0047 .dbsym s XmtBuff _XmtBuff X
.area func_lit
0000 EA01 PL_set_interface: .word `_set_interface
0002 D701 PL_get_interface: .word `_get_interface
0004 A501 PL_set_configuration: .word `_set_configuration
0006 9101 PL_get_configuration: .word `_get_configuration
0008 2F01 PL_get_descriptor: .word `_get_descriptor
000A 1A01 PL_set_address: .word `_set_address
000C E700 PL_set_feature: .word `_set_feature
000E 7200 PL_void_function: .word `_void_function
0010 B500 PL_clear_feature: .word `_clear_feature
0012 8800 PL_get_status: .word `_get_status