?? avr_usb_disk.lst
字號:
__start:
__text_start:
0137 E5CF LDI R28,0x5F
0138 E0D2 LDI R29,2
0139 BFCD OUT P3D,R28
013A BFDE OUT P3E,R29
013B 51C0 SUBI R28,0x10
013C 40D0 SBCI R29,0
013D EA0A LDI R16,0xAA
013E 8308 STD R16,0+Y
013F 2400 CLR R0
0140 EEE6 LDI R30,0xE6
0141 E0F0 LDI R31,0
0142 E011 LDI R17,1
0143 37E7 CPI R30,0x77
0144 07F1 CPC R31,R17
0145 F011 BEQ 0x0148
0146 9201 ST R0,Z+
0147 CFFB RJMP 0x0143
0148 8300 STD R16,0+Z
0149 EEE7 LDI R30,0xE7
014A E0F1 LDI R31,1
014B E6A0 LDI R26,0x60
014C E0B0 LDI R27,0
014D E012 LDI R17,2
014E 36ED CPI R30,0x6D
014F 07F1 CPC R31,R17
0150 F021 BEQ 0x0155
0151 95C8 LPM
0152 9631 ADIW R30,1
0153 920D ST R0,X+
0154 CFF9 RJMP 0x014E
0155 D5DB RCALL _main
_exit:
0156 CFFF RJMP _exit
_Bulk_Out_Packet:
p --> R12
Buff --> Y+0
j --> R10
i --> R22
len --> R20
0157 D995 RCALL push_gset4
0158 2F40 MOV R20,R16
0159 97EF SBIW R28,0x3F
015A 9721 SBIW R28,1
FILE: G:\source\Scsi.c
(0000) /*++
(0001)
(0002) Module Name:
(0003)
(0004) Scsi.c
(0005)
(0006) Abstract:
(0007)
(0008) Header file related to D12 module
(0009)
(0010) Environment:
(0011)
(0012) ICCAVR 6.29
(0013)
(0014) Revision History:
(0015)
(0016) 04/23/2004 chenchi created
(0017)
(0018) --*/
(0019) /******************************************************************/
(0020)
(0021) #include <macros.h>
(0022) #include "d12.h"
(0023) #include "scsi.h"
(0024) #include "scsi_data.h"
(0025) #include "nflash32.h"
(0026)
(0027) unsigned char BulkPhase = 0;
(0028) unsigned char BulkStausPhase;
(0029) unsigned int dCBWDaTrLen;
(0030) unsigned char * WritePageBuff = "";
(0031) unsigned int WritePageBuffLen = 0;
(0032)
(0033) CSW_STRUCT Usb_Csw;
(0034) CBW_STRUCT Usb_Cbw;
(0035)
(0036) /************************************************************
(0037) **工程名稱:U盤固件程序開發
(0038) **編譯器類型及版本:ICCAVR 6.26C
(0039) **日期:2004.4.30
(0040) **創建人:陳馳
(0041) **所屬單位:湖南大學計算機與通信學院
(0042)
(0043) **芯片類型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
(0044) **時鐘頻率:8MHZ
(0045)
(0046) **函數功能:處理PC發送的批量傳輸包
(0047) **函數輸入參數及說明:接收數據長度
(0048)
(0049) **函數返回值:無
(0050) **在本函數以外定義的變量:
(0051) **調用的函數說明:無
(0052)
(0053) **修改人:陳馳
(0054) **修改日期:2004.4.30
(0055) **修改說明:創建
(0056) *************************************************************/
(0057) void Bulk_Out_Packet(unsigned char len){
(0058) unsigned char i,j,*p;
(0059) unsigned char Buff[64];
(0060) if(BulkPhase == CommandPhase){
015B 90200060 LDS R2,0x60
015D 2022 TST R2
015E F4F1 BNE 0x017D
(0061) j = D12_DATA;
015F 90A07C00 LDS R10,0x7C00
(0062) csram;
0161 9360FC01 STS R22,0xFC01
(0063) p = XmtBuff.b;
0163 E185 LDI R24,0x15
0164 E091 LDI R25,1
0165 2EC8 MOV R12,R24
0166 2ED9 MOV R13,R25
(0064) *(p++) = j;
0167 2C2C MOV R2,R12
0168 2C3D MOV R3,R13
0169 2D82 MOV R24,R2
016A 2D93 MOV R25,R3
016B 9601 ADIW R24,1
016C 2EC8 MOV R12,R24
016D 2ED9 MOV R13,R25
016E 2DE2 MOV R30,R2
016F 2DF3 MOV R31,R3
0170 82A0 STD R10,0+Z
(0065) for(i=0;i<len;i++)
0171 2766 CLR R22
0172 C006 RJMP 0x0179
(0066) {
(0067) j = D12_DATA;
0173 90A07C00 LDS R10,0x7C00
(0068) csram;
0175 9360FC01 STS R22,0xFC01
(0069) asm("st Z+,%j");
0177 92A1 ST R10,Z+
(0070) }
0178 9563 INC R22
0179 1764 CP R22,R20
017A F3C0 BCS 0x0173
(0071) Usb_BoCommand();
017B D065 RCALL _Usb_BoCommand
(0072) }
017C C055 RJMP 0x01D2
(0073) else if(BulkPhase == OutDataPhase){
017D 91800060 LDS R24,0x60
017F 3081 CPI R24,1
0180 F009 BEQ 0x0182
0181 C050 RJMP 0x01D2
(0074) j = D12_DATA;
0182 90A07C00 LDS R10,0x7C00
(0075) csram;
0184 9360FC01 STS R22,0xFC01
(0076) p = Buff;
0186 2F8C MOV R24,R28
0187 2F9D MOV R25,R29
0188 2EC8 MOV R12,R24
0189 2ED9 MOV R13,R25
(0077) *(p++) = j;
018A 2C2C MOV R2,R12
018B 2C3D MOV R3,R13
018C 2D82 MOV R24,R2
018D 2D93 MOV R25,R3
018E 9601 ADIW R24,1
018F 2EC8 MOV R12,R24
0190 2ED9 MOV R13,R25
0191 2DE2 MOV R30,R2
0192 2DF3 MOV R31,R3
0193 82A0 STD R10,0+Z
(0078) for(i=0;i<len;i++)
0194 2766 CLR R22
0195 C006 RJMP 0x019C
(0079) {
(0080) j = D12_DATA;
0196 90A07C00 LDS R10,0x7C00
(0081) csram;
0198 9360FC01 STS R22,0xFC01
(0082) asm("st Z+,%j");
019A 92A1 ST R10,Z+
(0083) }
019B 9563 INC R22
019C 1764 CP R22,R20
019D F3C0 BCS 0x0196
(0084) for(i=0;i<len;i++){
019E 2766 CLR R22
019F C017 RJMP 0x01B7
(0085) WritePageBuff[WritePageBuffLen+i] = Buff[i];
01A0 2E26 MOV R2,R22
01A1 2433 CLR R3
01A2 91F00064 LDS R31,0x64
01A4 91E00063 LDS R30,0x63
01A6 0DE2 ADD R30,R2
01A7 1DF3 ADC R31,R3
01A8 90300062 LDS R3,0x62
01AA 90200061 LDS R2,0x61
01AC 0DE2 ADD R30,R2
01AD 1DF3 ADC R31,R3
01AE 2F8C MOV R24,R28
01AF 2F9D MOV R25,R29
01B0 2FA6 MOV R26,R22
01B1 27BB CLR R27
01B2 0FA8 ADD R26,R24
01B3 1FB9 ADC R27,R25
01B4 902C LD R2,0(X)
01B5 8220 STD R2,0+Z
(0086) }
01B6 9563 INC R22
01B7 1764 CP R22,R20
01B8 F338 BCS 0x01A0
(0087) WritePageBuffLen += len;
01B9 2E24 MOV R2,R20
01BA 2433 CLR R3
01BB 90500064 LDS R5,0x64
01BD 90400063 LDS R4,0x63
01BF 0C42 ADD R4,R2
01C0 1C53 ADC R5,R3
01C1 92500064 STS R5,0x64
01C3 92400063 STS R4,0x63
(0088) if(WritePageBuffLen == 512){
01C5 2D84 MOV R24,R4
01C6 2D95 MOV R25,R5
01C7 3080 CPI R24,0
01C8 E0E2 LDI R30,2
01C9 079E CPC R25,R30
01CA F439 BNE 0x01D2
(0089) Usb_BoBulkInData();
01CB D0CD RCALL _Usb_BoBulkInData
(0090) WritePageBuffLen = 0;
01CC 2422 CLR R2
01CD 2433 CLR R3
01CE 92300064 STS R3,0x64
01D0 92200063 STS R2,0x63
(0091) }
(0092) }
(0093) D12_COMMAND = 0x04;//選擇端點(指針指向0位置)
01D2 E084 LDI R24,4
01D3 93807C01 STS R24,0x7C01
(0094) cwait;
01D5 0000 NOP
(0095) D12_COMMAND = 0xf1;
01D6 EF81 LDI R24,0xF1
01D7 93807C01 STS R24,0x7C01
(0096) cwait;
01D9 0000 NOP
(0097) D12_COMMAND = 0xf2;//清端點緩沖區
01DA EF82 LDI R24,0xF2
01DB 93807C01 STS R24,0x7C01
(0098) }
01DD 96EF ADIW R28,0x3F
01DE 9621 ADIW R28,1
01DF D917 RCALL pop_gset4
01E0 9508 RET
_Usb_BoCommand:
01E1 D8EE RCALL push_gset1
(0099) /************************************************************
(0100) **工程名稱:U盤固件程序開發
(0101) **編譯器類型及版本:ICCAVR 6.26C
(0102) **日期:2004.4.30
(0103) **創建人:陳馳
(0104) **所屬單位:湖南大學計算機與通信學院
(0105)
(0106) **芯片類型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
(0107) **時鐘頻率:8MHZ
(0108)
(0109) **函數功能:SCSI命令處理
(0110) **函數輸入參數及說明:無
(0111)
(0112) **函數返回值:無
(0113) **在本函數以外定義的變量:
(0114) **調用的函數說明:無
(0115)
(0116) **修改人:陳馳
(0117) **修改日期:2004.4.30
(0118) **修改說明:創建
(0119) *************************************************************/
(0120) void Usb_BoCommand(void){
(0121) XmtBuff.p_p=1;
01E2 E081 LDI R24,1
01E3 9380015B STS R24,0x15B
(0122) dCBWDaTrLen=((XmtBuff.b[11]<<8)+(XmtBuff.b[10]))<<15;
01E5 9020011F LDS R2,0x11F
01E7 2433 CLR R3
01E8 91000120 LDS R16,0x120
01EA 2711 CLR R17
01EB 2F10 MOV R17,R16
01EC 2700 CLR R16
01ED 0D02 ADD R16,R2
01EE 1D13 ADC R17,R3
01EF E02F LDI R18,0xF
01F0 E030 LDI R19,0
01F1 DB7D RCALL lsl16
01F2 93100113 STS R17,_dCBWDaTrLen+1
01F4 93000112 STS R16,_dCBWDaTrLen
(0123) dCBWDaTrLen=(dCBWDaTrLen<<1)+((XmtBuff.b[9]<<8)+(XmtBuff.b[8])) ;
01F6 9020011D LDS R2,0x11D
01F8 2433 CLR R3
01F9 9040011E LDS R4,0x11E
01FB 2455 CLR R5
01FC 2C54 MOV R5,R4
01FD 2444 CLR R4
01FE 0C42 ADD R4,R2
01FF 1C53 ADC R5,R3
0200 2E20 MOV R2,R16
0201 2E31 MOV R3,R17
0202 0C22 LSL R2
0203 1C33 ROL R3
0204 0C24 ADD R2,R4
0205 1C35 ADC R3,R5
0206 92300113 STS R3,_dCBWDaTrLen+1
0208 92200112 STS R2,_dCBWDaTrLen
(0124) Usb_Cbw.CBWCB[0] = XmtBuff.b[15];
020A 90200124 LDS R2,0x124
020C 922000F5 STS R2,0xF5
(0125) switch(Usb_Cbw.CBWCB[0]){
020E 2D42 MOV R20,R2
020F 2755 CLR R21
0210 314E CPI R20,0x1E
0211 E0E0 LDI R30,0
0212 075E CPC R21,R30
0213 F409 BNE 0x0215
0214 C05C RJMP 0x0271
0215 E18E LDI R24,0x1E
0216 E090 LDI R25,0
0217 1784 CP R24,R20
0218 0795 CPC R25,R21
0219 F0D4 BLT 0x0234
021A 3142 CPI R20,0x12
021B E0E0 LDI R30,0
021C 075E CPC R21,R30
021D F409 BNE 0x021F
021E C048 RJMP 0x0267
021F E182 LDI R24,0x12
0220 E090 LDI R25,0
0221 1784 CP R24,R20
0222 0795 CPC R25,R21
0223 F054 BLT 0x022E
0224 3040 CPI R20,0
0225 0745 CPC R20,R21
0226 F409 BNE 0x0228
0227 C035 RJMP 0x025D
0228 3043 CPI R20,3
0229 E0E0 LDI R30,0
022A 075E CPC R21,R30
022B F409 BNE 0x022D
022C C035 RJMP 0x0262
022D C066 RJMP 0x0294
022E 314A CPI R20,0x1A
022F E0E0 LDI R30,0
0230 075E CPC R21,R30
0231 F409 BNE 0x0233
0232 C039 RJMP 0x026C
0233 C060 RJMP 0x0294
0234 324F CPI R20,0x2F
0235 E0E0 LDI R30,0
0236 075E CPC R21,R30
0237 F409 BNE 0x0239
0238 C051 RJMP 0x028A
0239 E28F LDI R24,0x2F
023A E090 LDI R25,0
023B 1784 CP R24,R20
023C 0795 CPC R25,R21
023D F0CC BLT 0x0257
023E 3243 CPI R20,0x23
023F E0E0 LDI R30,0
0240 075E CPC R21,R30
0241 F40C BGE 0x0243
0242 C051 RJMP 0x0294
0243 E28A LDI R24,0x2A
0244 E090 LDI R25,0
0245 1784 CP R24,R20
0246 0795 CPC R25,R21
0247 F40C BGE 0x0249
0248 C04B RJMP 0x0294
0249 E080 LDI R24,0
024A E090 LDI R25,0
024B 2F04 MOV R16,R20
024C 2F15 MOV R17,R21
024D 5203 SUBI R16,0x23
024E 4010 SBCI R17,0
024F 0F00 LSL R16
0250 1F11 ROL R17
0251 0F08 ADD R16,R24
0252 1F19 ADC R17,R25
0253 DB0D RCALL lpm16
0254 2FE0 MOV R30,R16
0255 2FF1 MOV R31,R17
0256 9409 IJMP
0257 354A CPI R20,0x5A
0258 E0E0 LDI R30,0
0259 075E CPC R21,R30
025A F409 BNE 0x025C
025B C033 RJMP 0x028F
025C C037 RJMP 0x0294
(0126) case 0x00:
(0127) SCSICMD_TestUnitReady();
025D D0F7 RCALL _SCSICMD_TestUnitReady
(0128) BulkStausPhase = InCSWPhase;
025E E088 LDI R24,0x8
025F 93800114 STS R24,_BulkStausPhase
(0129) break;
0261 C035 RJMP 0x0297
(0130) case 0x03:
(0131) SCSICMD_RequestSense();
0262 D10C RCALL _SCSICMD_RequestSense
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -