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