www.pudn.com > usbcode.rar > Scsi.s
.module Scsi.c .area lit(rom, con, rel) _SCSI_INQUIRY:: .byte 0,128 .byte 0,1 .byte 31,0 .byte 0,0 .byte 32,32 .byte 32,32 .byte 32,32 .byte 32,32 .byte 'C,'H .byte 'E,'N .byte 'C,'H .byte 'I,32 .byte 'A,'V .byte 'R,32 .byte 'D,'I .byte 'S,'K .byte 49,46 .byte 48,48 .dbfile G:\source/scsi_data.h .dbsym s SCSI_INQUIRY _SCSI_INQUIRY A[36:36]c _SCSIDATA_ReadFormatCapacities:: .byte 0,0 .byte 0,8 .byte 0,0 .byte 255,255 .byte 3,0 .byte 2,0 .dbsym s SCSIDATA_ReadFormatCapacities _SCSIDATA_ReadFormatCapacities A[12:12]c _SCSIDATA_ReadCapacity:: .byte 0,0 .byte 249,255 .byte 0,0 .byte 2,0 .dbsym s SCSIDATA_ReadCapacity _SCSIDATA_ReadCapacity A[8:8]c _SCSIDATA_RequestSense:: .byte 'p,0 .byte 5,0 .byte 0,0 .byte 0,10 .byte 0,0 .byte 0,0 .byte 32,0 .byte 0,0 .byte 0,0 .dbsym s SCSIDATA_RequestSense _SCSIDATA_RequestSense A[18:18]c _SCSIDATA_Sense:: .byte 3,0 .byte 0,0 .byte 1,10 .byte 0,16 .byte 0,0 .byte 0,0 .byte 2,0 .byte 0,0 .byte 5,30 .byte 15,160 .byte 4,16 .byte 2,0 .byte 0,250 .byte 0,0 .byte 0,0 .byte 0,0 .byte 0,0 .byte 0,0 .byte 0,0 .byte 0,0 .byte 0,0 .byte 0,0 .byte 0,0 .byte 0,0 .dbsym s SCSIDATA_Sense _SCSIDATA_Sense A[48:48]c .area data(ram, con, rel) .dbfile G:\source/scsi_data.h _BulkPhase:: .blkb 1 .area idata .byte 0 .area data(ram, con, rel) .dbfile G:\source/scsi_data.h .dbfile G:\source\Scsi.c .dbsym s BulkPhase _BulkPhase c _WritePageBuff:: .blkw 1 .area idata .word L4 .area data(ram, con, rel) .dbfile G:\source\Scsi.c .dbsym s WritePageBuff _WritePageBuff pc _WritePageBuffLen:: .blkb 2 .area idata .word 0 .area data(ram, con, rel) .dbfile G:\source\Scsi.c .dbsym s WritePageBuffLen _WritePageBuffLen i .area text(rom, con, rel) .dbfile G:\source\Scsi.c .dbfunc s Bulk_Out_Packet _Bulk_Out_Packet fI ; p -> R12,R13 ; Buff -> y+0 ; j -> R10 ; i -> R22 ; len -> R20 .even _Bulk_Out_Packet:: rcall push_gset4 mov R20,R16 sbiw R28,63 sbiw R28,1 ; offset = 64 .dbline -1 .dbline 58 ; /*++ ; ; Module Name: ; ; Scsi.c ; ; Abstract: ; ; Header file related to D12 module ; ; Environment: ; ; ICCAVR 6.29 ; ; Revision History: ; ; 04/23/2004 chenchi created ; ; --*/ ; /******************************************************************/ ; ; #include; #include "d12.h" ; #include "scsi.h" ; #include "scsi_data.h" ; #include "nflash32.h" ; ; unsigned char BulkPhase = 0; ; unsigned char BulkStausPhase; ; unsigned int dCBWDaTrLen; ; unsigned char * WritePageBuff = ""; ; unsigned int WritePageBuffLen = 0; ; ; CSW_STRUCT Usb_Csw; ; CBW_STRUCT Usb_Cbw; ; ; /************************************************************ ; **工程名称:U盘固件程序开发 ; **编译器类型及版本:ICCAVR 6.26C ; **日期:2004.4.30 ; **创建人:陈驰 ; **所属单位:湖南大学计算机与通信学院 ; ; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0 ; **时钟频率:8MHZ ; ; **函数功能:处理PC发送的批量传输包 ; **函数输入参数及说明:接收数据长度 ; ; **函数返回值:无 ; **在本函数以外定义的变量: ; **调用的函数说明:无 ; ; **修改人:陈驰 ; **修改日期:2004.4.30 ; **修改说明:创建 ; *************************************************************/ ; void Bulk_Out_Packet(unsigned char len){ .dbline 61 ; unsigned char i,j,*p; ; unsigned char Buff[64]; ; if(BulkPhase == CommandPhase){ lds R2,_BulkPhase tst R2 brne L6 .dbline 61 .dbline 62 ; j = D12_DATA; lds R10,31744 .dbline 63 ; csram; sts 0xfc01,R22 .dbline 63 .dbline 64 ; p = XmtBuff.b; ldi R24,<_XmtBuff ldi R25,>_XmtBuff mov R12,R24 mov R13,R25 .dbline 65 ; *(p++) = j; mov R2,R12 mov R3,R13 mov R24,R2 mov R25,R3 adiw R24,1 mov R12,R24 mov R13,R25 mov R30,R2 mov R31,R3 std z+0,R10 .dbline 66 ; for(i=0;i L53 mov R16,R20 mov R17,R21 subi R16,35 sbci R17,0 lsl R16 rol R17 add R16,R24 adc R17,R25 rcall lpm16 mov R30,R16 mov R31,R17 ijmp L52: cpi R20,90 ldi R30,0 cpc R21,R30 brne X10 rjmp L46 X10: rjmp L32 X1: .dbline 126 L36: .dbline 128 ; case 0x00: ; SCSICMD_TestUnitReady(); rcall _SCSICMD_TestUnitReady .dbline 129 ; BulkStausPhase = InCSWPhase; ldi R24,8 sts _BulkStausPhase,R24 .dbline 130 ; break; rjmp L33 L37: .dbline 132 ; case 0x03: ; SCSICMD_RequestSense(); rcall _SCSICMD_RequestSense .dbline 133 ; BulkStausPhase=InCSWPhase; ldi R24,8 sts _BulkStausPhase,R24 .dbline 134 ; break; rjmp L33 L38: .dbline 136 ; case 0x12: ; SCSICMD_Inquiry(); rcall _SCSICMD_Inquiry .dbline 137 ; BulkStausPhase = InCSWPhase; ldi R24,8 sts _BulkStausPhase,R24 .dbline 138 ; break; rjmp L33 L39: .dbline 140 ; case 0x1a: ; SCSICMD_ModeSense06(); rcall _SCSICMD_ModeSense06 .dbline 141 ; BulkStausPhase=InCSWPhase; ldi R24,8 sts _BulkStausPhase,R24 .dbline 142 ; break; rjmp L33 L40: .dbline 144 ; case 0x1e: ; SCSICMD_PreventAllowMediumRemoval(); rcall _SCSICMD_PreventAllowMediumRemoval .dbline 145 ; BulkStausPhase=InCSWPhase; ldi R24,8 sts _BulkStausPhase,R24 .dbline 146 ; break; rjmp L33 L41: .dbline 148 ; case 0x23: ; SCSICMD_ReadFormatCapacities(); rcall _SCSICMD_ReadFormatCapacities .dbline 149 ; BulkStausPhase = InCSWPhase; ldi R24,8 sts _BulkStausPhase,R24 .dbline 150 ; break; rjmp L33 L42: .dbline 152 ; case 0x25: ; SCSICMD_ReadCapacity(); rcall _SCSICMD_ReadCapacity .dbline 153 ; BulkStausPhase=InCSWPhase; ldi R24,8 sts _BulkStausPhase,R24 .dbline 154 ; break; rjmp L33 L43: .dbline 156 ; case 0x28: ; SCSICMD_Read10(); rcall _SCSICMD_Read10 .dbline 157 ; BulkStausPhase=InCSWPhase; ldi R24,8 sts _BulkStausPhase,R24 .dbline 158 ; break; rjmp L33 L44: .dbline 160 ; case 0x2a: ; SCSICMD_Write10(); rcall _SCSICMD_Write10 .dbline 161 ; BulkPhase =OutDataPhase; ldi R24,1 sts _BulkPhase,R24 .dbline 162 ; break; rjmp L33 L45: .dbline 164 ; case 0x2f: ; SCSICMD_Verify10(); rcall _SCSICMD_Verify10 .dbline 165 ; BulkStausPhase=InCSWPhase; ldi R24,8 sts _BulkStausPhase,R24 .dbline 166 ; break; rjmp L33 L46: .dbline 168 ; case 0x5a: ; SCSICMD_ModeSense10(); rcall _SCSICMD_ModeSense10 .dbline 169 ; BulkStausPhase=InCSWPhase; ldi R24,8 sts _BulkStausPhase,R24 .dbline 170 ; break; rjmp L33 L32: .dbline 172 ldi R24,8 sts _BulkStausPhase,R24 .dbline 173 L33: .dbline -2 .dbline 175 ; default: ; BulkStausPhase=InCSWPhase; ; break; ; } ; } L24: rcall pop_gset1 .dbline 0 ; func end ret .dbfunc s Usb_BoBulkInData _Usb_BoBulkInData fI .even _Usb_BoBulkInData:: .dbline -1 .dbline 197 .dbline 198 lds R17,_WritePageBuff+1 lds R16,_WritePageBuff rcall _flashWrite .dbline 199 lds R3,_WriteResidueVal+1 lds R2,_WriteResidueVal tst R2 brne L55 tst R3 brne L55 .dbline 199 .dbline 200 clr R2 sts _BulkPhase,R2 .dbline 201 L55: .dbline -2 .dbline 202 ; /************************************************************ ; **工程名称:U盘固件程序开发 ; **编译器类型及版本:ICCAVR 6.26C ; **日期:2004.4.30 ; **创建人:陈驰 ; **所属单位:湖南大学计算机与通信学院 ; ; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0 ; **时钟频率:8MHZ ; ; **函数功能:PC输入数据处理 ; **函数输入参数及说明:无 ; ; **函数返回值:无 ; **在本函数以外定义的变量: ; **调用的函数说明:无 ; ; **修改人:陈驰 ; **修改日期:2004.4.30 ; **修改说明:创建 ; *************************************************************/ ; void Usb_BoBulkInData(void){ ; flashWrite(WritePageBuff); ; if(WriteResidueVal == 0){ ; BulkPhase = CommandPhase; ; } ; } L54: .dbline 0 ; func end ret .dbfunc s Bulk_In_Packet _Bulk_In_Packet fI .even _Bulk_In_Packet:: .dbline -1 .dbline 224 ; /************************************************************ ; **工程名称:U盘固件程序开发 ; **编译器类型及版本:ICCAVR 6.26C ; **日期:2004.4.30 ; **创建人:陈驰 ; **所属单位:湖南大学计算机与通信学院 ; ; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0 ; **时钟频率:8MHZ ; ; **函数功能:回应批量传输包 ; **函数输入参数及说明:无 ; ; **函数返回值:无 ; **在本函数以外定义的变量: ; **调用的函数说明:无 ; ; **修改人:陈驰 ; **修改日期:2004.4.30 ; **修改说明:创建 ; *************************************************************/ ; void Bulk_In_Packet(void){ .dbline 225 ; if(XmtBuff.wrLength != 0) lds R3,_XmtBuff+64+1 lds R2,_XmtBuff+64 tst R2 brne X11 tst R3 breq L58 X11: .dbline 226 ; BULK_submit(); rcall _BULK_submit rjmp L59 L58: .dbline 227 ; else if(ReadResidueVal != 0) ldi R16, L63 rcall lpm32 lds R5,_ReadResidueVal+2+1 lds R4,_ReadResidueVal+2 lds R3,_ReadResidueVal+1 lds R2,_ReadResidueVal cp R2,R16 cpc R3,R17 cpc R4,R18 cpc R5,R19 breq L61 .dbline 228 ; flashRead(); rcall _flashRead rjmp L62 L61: .dbline 229 ; else if(BulkStausPhase == InCSWPhase){ lds R24,_BulkStausPhase cpi R24,8 brne L64 .dbline 229 .dbline 230 ; XmtBuff.p_p=0; clr R2 sts _XmtBuff+70,R2 .dbline 231 ; XmtBuff.p = (unsigned char *)&Usb_Csw; ldi R24,<_Usb_Csw ldi R25,>_Usb_Csw sts _XmtBuff+68+1,R25 sts _XmtBuff+68,R24 .dbline 232 ; XmtBuff.wrLength = 13; ldi R24,13 ldi R25,0 sts _XmtBuff+64+1,R25 sts _XmtBuff+64,R24 .dbline 233 ; BULK_submit(); rcall _BULK_submit .dbline 234 ; } L64: L62: L59: .dbline -2 .dbline 235 ; } L57: .dbline 0 ; func end ret .dbfunc s SCSICMD_Inquiry _SCSICMD_Inquiry fI .even _SCSICMD_Inquiry:: .dbline -1 .dbline 257 ; /************************************************************ ; **工程名称:U盘固件程序开发 ; **编译器类型及版本:ICCAVR 6.26C ; **日期:2004.4.30 ; **创建人:陈驰 ; **所属单位:湖南大学计算机与通信学院 ; ; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0 ; **时钟频率:8MHZ ; ; **函数功能:SCSI命令 ; **函数输入参数及说明:无 ; ; **函数返回值:无 ; **在本函数以外定义的变量: ; **调用的函数说明:无 ; ; **修改人:陈驰 ; **修改日期:2004.4.30 ; **修改说明:创建 ; *************************************************************/ ; void SCSICMD_Inquiry(void){ .dbline 258 ; Usb_Set_Csw(); rcall _Usb_Set_Csw .dbline 259 ; Usb_Csw.dCSWDataResidue[1] = 0; clr R2 sts _Usb_Csw+8+1,R2 .dbline 260 ; Usb_Csw.dCSWDataResidue[2] = 0; sts _Usb_Csw+8+2,R2 .dbline 261 ; Usb_Csw.dCSWDataResidue[3] = 0; sts _Usb_Csw+8+3,R2 .dbline 262 ; Usb_Csw.dCSWDataResidue[4] = 0; sts _Usb_Csw+8+4,R2 .dbline 263 ; XmtBuff.pp = SCSI_INQUIRY; ldi R24,<_SCSI_INQUIRY ldi R25,>_SCSI_INQUIRY sts _XmtBuff+66+1,R25 sts _XmtBuff+66,R24 .dbline 264 ; XmtBuff.wrLength = 36; ldi R24,36 ldi R25,0 sts _XmtBuff+64+1,R25 sts _XmtBuff+64,R24 .dbline 265 ; BULK_submit(); rcall _BULK_submit .dbline -2 .dbline 266 ; } L69: .dbline 0 ; func end ret .dbfunc s Usb_Set_Csw _Usb_Set_Csw fI .even _Usb_Set_Csw:: .dbline -1 .dbline 288 ; /************************************************************ ; **工程名称:U盘固件程序开发 ; **编译器类型及版本:ICCAVR 6.26C ; **日期:2004.4.30 ; **创建人:陈驰 ; **所属单位:湖南大学计算机与通信学院 ; ; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0 ; **时钟频率:8MHZ ; ; **函数功能:创建CSW数据块 ; **函数输入参数及说明:无 ; ; **函数返回值:无 ; **在本函数以外定义的变量: ; **调用的函数说明:无 ; ; **修改人:陈驰 ; **修改日期:2004.4.30 ; **修改说明:创建 ; *************************************************************/ ; void Usb_Set_Csw(void){ .dbline 289 ; Usb_Csw.dCSWSignature[0] = 0x55; ldi R24,85 sts _Usb_Csw,R24 .dbline 290 ; Usb_Csw.dCSWSignature[1] = 0x53; ldi R24,83 sts _Usb_Csw+1,R24 .dbline 291 ; Usb_Csw.dCSWSignature[2] = 0x42; ldi R24,66 sts _Usb_Csw+2,R24 .dbline 292 ; Usb_Csw.dCSWSignature[3] = 0x53; ldi R24,83 sts _Usb_Csw+3,R24 .dbline 293 ; Usb_Csw.dCSWTag[0] = XmtBuff.b[4]; lds R2,_XmtBuff+4 sts _Usb_Csw+4,R2 .dbline 294 ; Usb_Csw.dCSWTag[1] = XmtBuff.b[5]; lds R2,_XmtBuff+5 sts _Usb_Csw+4+1,R2 .dbline 295 ; Usb_Csw.dCSWTag[2] = XmtBuff.b[6]; lds R2,_XmtBuff+6 sts _Usb_Csw+4+2,R2 .dbline 296 ; Usb_Csw.dCSWTag[3] = XmtBuff.b[7]; lds R2,_XmtBuff+7 sts _Usb_Csw+4+3,R2 .dbline 297 ; Usb_Csw.bCSWStatus = 0; clr R2 sts _Usb_Csw+12,R2 .dbline -2 .dbline 298 ; } L80: .dbline 0 ; func end ret .dbfunc s SCSICMD_ReadFormatCapacities _SCSICMD_ReadFormatCapacities fI .even _SCSICMD_ReadFormatCapacities:: .dbline -1 .dbline 320 ; /************************************************************ ; **工程名称:U盘固件程序开发 ; **编译器类型及版本:ICCAVR 6.26C ; **日期:2004.4.30 ; **创建人:陈驰 ; **所属单位:湖南大学计算机与通信学院 ; ; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0 ; **时钟频率:8MHZ ; ; **函数功能:SCSI命令 ; **函数输入参数及说明:无 ; ; **函数返回值:无 ; **在本函数以外定义的变量: ; **调用的函数说明:无 ; ; **修改人:陈驰 ; **修改日期:2004.4.30 ; **修改说明:创建 ; *************************************************************/ ; void SCSICMD_ReadFormatCapacities(void){ .dbline 321 ; Usb_Set_Csw(); rcall _Usb_Set_Csw .dbline 322 ; Usb_Csw.dCSWDataResidue[0]=(unsigned char)(dCBWDaTrLen-0x0c); lds R25,_dCBWDaTrLen+1 lds R24,_dCBWDaTrLen sbiw R24,12 sts _Usb_Csw+8,R24 .dbline 323 ; Usb_Csw.dCSWDataResidue[1]=0; clr R2 sts _Usb_Csw+8+1,R2 .dbline 324 ; Usb_Csw.dCSWDataResidue[2]=0; sts _Usb_Csw+8+2,R2 .dbline 325 ; Usb_Csw.dCSWDataResidue[3]=0; sts _Usb_Csw+8+3,R2 .dbline 326 ; XmtBuff.pp = SCSIDATA_ReadFormatCapacities; ldi R24,<_SCSIDATA_ReadFormatCapacities ldi R25,>_SCSIDATA_ReadFormatCapacities sts _XmtBuff+66+1,R25 sts _XmtBuff+66,R24 .dbline 327 ; XmtBuff.wrLength = 12; ldi R24,12 ldi R25,0 sts _XmtBuff+64+1,R25 sts _XmtBuff+64,R24 .dbline 328 ; BULK_submit(); rcall _BULK_submit .dbline -2 .dbline 329 ; } L96: .dbline 0 ; func end ret .dbfunc s SCSICMD_ReadCapacity _SCSICMD_ReadCapacity fI .even _SCSICMD_ReadCapacity:: .dbline -1 .dbline 351 ; /************************************************************ ; **工程名称:U盘固件程序开发 ; **编译器类型及版本:ICCAVR 6.26C ; **日期:2004.4.30 ; **创建人:陈驰 ; **所属单位:湖南大学计算机与通信学院 ; ; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0 ; **时钟频率:8MHZ ; ; **函数功能:SCSI命令 ; **函数输入参数及说明:无 ; ; **函数返回值:无 ; **在本函数以外定义的变量: ; **调用的函数说明:无 ; ; **修改人:陈驰 ; **修改日期:2004.4.30 ; **修改说明:创建 ; *************************************************************/ ; void SCSICMD_ReadCapacity(void){ .dbline 352 ; Usb_Set_Csw(); rcall _Usb_Set_Csw .dbline 353 ; Usb_Csw.dCSWDataResidue[1] = 0; clr R2 sts _Usb_Csw+8+1,R2 .dbline 354 ; Usb_Csw.dCSWDataResidue[2] = 0; sts _Usb_Csw+8+2,R2 .dbline 355 ; Usb_Csw.dCSWDataResidue[3] = 0; sts _Usb_Csw+8+3,R2 .dbline 356 ; Usb_Csw.dCSWDataResidue[4] = 0; sts _Usb_Csw+8+4,R2 .dbline 357 ; XmtBuff.pp = SCSIDATA_ReadCapacity; ldi R24,<_SCSIDATA_ReadCapacity ldi R25,>_SCSIDATA_ReadCapacity sts _XmtBuff+66+1,R25 sts _XmtBuff+66,R24 .dbline 358 ; XmtBuff.wrLength = 8; ldi R24,8 ldi R25,0 sts _XmtBuff+64+1,R25 sts _XmtBuff+64,R24 .dbline 359 ; BULK_submit(); rcall _BULK_submit .dbline -2 .dbline 360 ; } L106: .dbline 0 ; func end ret .dbfunc s SCSICMD_Read10 _SCSICMD_Read10 fI .even _SCSICMD_Read10:: .dbline -1 .dbline 382 ; /************************************************************ ; **工程名称:U盘固件程序开发 ; **编译器类型及版本:ICCAVR 6.26C ; **日期:2004.4.30 ; **创建人:陈驰 ; **所属单位:湖南大学计算机与通信学院 ; ; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0 ; **时钟频率:8MHZ ; ; **函数功能:SCSI命令 ; **函数输入参数及说明:无 ; ; **函数返回值:无 ; **在本函数以外定义的变量: ; **调用的函数说明:无 ; ; **修改人:陈驰 ; **修改日期:2004.4.30 ; **修改说明:创建 ; *************************************************************/ ; void SCSICMD_Read10(void){ .dbline 383 ; Usb_Set_Csw(); rcall _Usb_Set_Csw .dbline 384 ; Usb_Csw.dCSWDataResidue[0]=0; clr R2 sts _Usb_Csw+8,R2 .dbline 385 ; Usb_Csw.dCSWDataResidue[1]=0; sts _Usb_Csw+8+1,R2 .dbline 386 ; Usb_Csw.dCSWDataResidue[2]=0; sts _Usb_Csw+8+2,R2 .dbline 387 ; Usb_Csw.dCSWDataResidue[3]=0; sts _Usb_Csw+8+3,R2 .dbline 388 ; flashReadcmd(); rcall _flashReadcmd .dbline 389 ; flashRead(); rcall _flashRead .dbline -2 .dbline 390 ; } L117: .dbline 0 ; func end ret .dbfunc s SCSICMD_TestUnitReady _SCSICMD_TestUnitReady fI .even _SCSICMD_TestUnitReady:: .dbline -1 .dbline 412 ; /************************************************************ ; **工程名称:U盘固件程序开发 ; **编译器类型及版本:ICCAVR 6.26C ; **日期:2004.4.30 ; **创建人:陈驰 ; **所属单位:湖南大学计算机与通信学院 ; ; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0 ; **时钟频率:8MHZ ; ; **函数功能:SCSI命令 ; **函数输入参数及说明:无 ; ; **函数返回值:无 ; **在本函数以外定义的变量: ; **调用的函数说明:无 ; ; **修改人:陈驰 ; **修改日期:2004.4.30 ; **修改说明:创建 ; *************************************************************/ ; void SCSICMD_TestUnitReady(void){ .dbline 413 ; Usb_Set_Csw(); rcall _Usb_Set_Csw .dbline 414 ; Usb_Csw.dCSWDataResidue[1] = 0; clr R2 sts _Usb_Csw+8+1,R2 .dbline 415 ; Usb_Csw.dCSWDataResidue[2] = 0; sts _Usb_Csw+8+2,R2 .dbline 416 ; Usb_Csw.dCSWDataResidue[3] = 0; sts _Usb_Csw+8+3,R2 .dbline 417 ; Usb_Csw.dCSWDataResidue[4] = 0; sts _Usb_Csw+8+4,R2 .dbline 418 ; XmtBuff.p_p=0; sts _XmtBuff+70,R2 .dbline 419 ; XmtBuff.p = (unsigned char *)&Usb_Csw; ldi R24,<_Usb_Csw ldi R25,>_Usb_Csw sts _XmtBuff+68+1,R25 sts _XmtBuff+68,R24 .dbline 420 ; XmtBuff.wrLength = 13; ldi R24,13 ldi R25,0 sts _XmtBuff+64+1,R25 sts _XmtBuff+64,R24 .dbline 421 ; BULK_submit(); rcall _BULK_submit .dbline -2 .dbline 422 ; } L125: .dbline 0 ; func end ret .dbfunc s SCSICMD_RequestSense _SCSICMD_RequestSense fI .even _SCSICMD_RequestSense:: .dbline -1 .dbline 444 ; /************************************************************ ; **工程名称:U盘固件程序开发 ; **编译器类型及版本:ICCAVR 6.26C ; **日期:2004.4.30 ; **创建人:陈驰 ; **所属单位:湖南大学计算机与通信学院 ; ; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0 ; **时钟频率:8MHZ ; ; **函数功能:SCSI命令 ; **函数输入参数及说明:无 ; ; **函数返回值:无 ; **在本函数以外定义的变量: ; **调用的函数说明:无 ; ; **修改人:陈驰 ; **修改日期:2004.4.30 ; **修改说明:创建 ; *************************************************************/ ; void SCSICMD_RequestSense(void){ .dbline 445 ; Usb_Set_Csw(); rcall _Usb_Set_Csw .dbline 446 ; Usb_Csw.dCSWDataResidue[1] = 0; clr R2 sts _Usb_Csw+8+1,R2 .dbline 447 ; Usb_Csw.dCSWDataResidue[2] = 0; sts _Usb_Csw+8+2,R2 .dbline 448 ; Usb_Csw.dCSWDataResidue[3] = 0; sts _Usb_Csw+8+3,R2 .dbline 449 ; Usb_Csw.dCSWDataResidue[4] = 0; sts _Usb_Csw+8+4,R2 .dbline 450 ; XmtBuff.pp = SCSIDATA_RequestSense; ldi R24,<_SCSIDATA_RequestSense ldi R25,>_SCSIDATA_RequestSense sts _XmtBuff+66+1,R25 sts _XmtBuff+66,R24 .dbline 451 ; XmtBuff.wrLength = 18; ldi R24,18 ldi R25,0 sts _XmtBuff+64+1,R25 sts _XmtBuff+64,R24 .dbline 452 ; BULK_submit(); rcall _BULK_submit .dbline -2 .dbline 453 ; } L137: .dbline 0 ; func end ret .dbfunc s SCSICMD_ModeSense06 _SCSICMD_ModeSense06 fI .even _SCSICMD_ModeSense06:: .dbline -1 .dbline 475 ; /************************************************************ ; **工程名称:U盘固件程序开发 ; **编译器类型及版本:ICCAVR 6.26C ; **日期:2004.4.30 ; **创建人:陈驰 ; **所属单位:湖南大学计算机与通信学院 ; ; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0 ; **时钟频率:8MHZ ; ; **函数功能:SCSI命令 ; **函数输入参数及说明:无 ; ; **函数返回值:无 ; **在本函数以外定义的变量: ; **调用的函数说明:无 ; ; **修改人:陈驰 ; **修改日期:2004.4.30 ; **修改说明:创建 ; *************************************************************/ ; void SCSICMD_ModeSense06(void){ .dbline 476 ; Usb_Set_Csw(); rcall _Usb_Set_Csw .dbline 477 ; Usb_Csw.dCSWDataResidue[1]=(unsigned char)(dCBWDaTrLen-0x04); lds R25,_dCBWDaTrLen+1 lds R24,_dCBWDaTrLen sbiw R24,4 sts _Usb_Csw+8+1,R24 .dbline 478 ; Usb_Csw.dCSWDataResidue[2] = 0; clr R2 sts _Usb_Csw+8+2,R2 .dbline 479 ; Usb_Csw.dCSWDataResidue[3] = 0; sts _Usb_Csw+8+3,R2 .dbline 480 ; Usb_Csw.dCSWDataResidue[4] = 0; sts _Usb_Csw+8+4,R2 .dbline 481 ; XmtBuff.pp = SCSIDATA_Sense; ldi R24,<_SCSIDATA_Sense ldi R25,>_SCSIDATA_Sense sts _XmtBuff+66+1,R25 sts _XmtBuff+66,R24 .dbline 482 ; XmtBuff.wrLength = 4; ldi R24,4 ldi R25,0 sts _XmtBuff+64+1,R25 sts _XmtBuff+64,R24 .dbline 483 ; BULK_submit(); rcall _BULK_submit .dbline -2 .dbline 484 ; } L148: .dbline 0 ; func end ret .dbfunc s SCSICMD_PreventAllowMediumRemoval _SCSICMD_PreventAllowMediumRemoval fI .even _SCSICMD_PreventAllowMediumRemoval:: .dbline -1 .dbline 506 ; /************************************************************ ; **工程名称:U盘固件程序开发 ; **编译器类型及版本:ICCAVR 6.26C ; **日期:2004.4.30 ; **创建人:陈驰 ; **所属单位:湖南大学计算机与通信学院 ; ; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0 ; **时钟频率:8MHZ ; ; **函数功能:SCSI命令 ; **函数输入参数及说明:无 ; ; **函数返回值:无 ; **在本函数以外定义的变量: ; **调用的函数说明:无 ; ; **修改人:陈驰 ; **修改日期:2004.4.30 ; **修改说明:创建 ; *************************************************************/ ; void SCSICMD_PreventAllowMediumRemoval(void){ .dbline 507 ; Usb_Set_Csw(); rcall _Usb_Set_Csw .dbline 508 ; Usb_Csw.dCSWDataResidue[1] = 0; clr R2 sts _Usb_Csw+8+1,R2 .dbline 509 ; Usb_Csw.dCSWDataResidue[2] = 0; sts _Usb_Csw+8+2,R2 .dbline 510 ; Usb_Csw.dCSWDataResidue[3] = 0; sts _Usb_Csw+8+3,R2 .dbline 511 ; Usb_Csw.dCSWDataResidue[4] = 0; sts _Usb_Csw+8+4,R2 .dbline 512 ; XmtBuff.p_p=0; sts _XmtBuff+70,R2 .dbline 513 ; XmtBuff.p = (unsigned char *)&Usb_Csw; ldi R24,<_Usb_Csw ldi R25,>_Usb_Csw sts _XmtBuff+68+1,R25 sts _XmtBuff+68,R24 .dbline 514 ; XmtBuff.wrLength = 13; ldi R24,13 ldi R25,0 sts _XmtBuff+64+1,R25 sts _XmtBuff+64,R24 .dbline 515 ; BULK_submit(); rcall _BULK_submit .dbline -2 .dbline 516 ; } L159: .dbline 0 ; func end ret .dbfunc s SCSICMD_Write10 _SCSICMD_Write10 fI .even _SCSICMD_Write10:: .dbline -1 .dbline 538 ; /************************************************************ ; **工程名称:U盘固件程序开发 ; **编译器类型及版本:ICCAVR 6.26C ; **日期:2004.4.30 ; **创建人:陈驰 ; **所属单位:湖南大学计算机与通信学院 ; ; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0 ; **时钟频率:8MHZ ; ; **函数功能:SCSI命令 ; **函数输入参数及说明:无 ; ; **函数返回值:无 ; **在本函数以外定义的变量: ; **调用的函数说明:无 ; ; **修改人:陈驰 ; **修改日期:2004.4.30 ; **修改说明:创建 ; *************************************************************/ ; void SCSICMD_Write10(void){ .dbline 539 ; Usb_Set_Csw(); rcall _Usb_Set_Csw .dbline 540 ; Usb_Csw.dCSWDataResidue[1] = 0; clr R2 sts _Usb_Csw+8+1,R2 .dbline 541 ; Usb_Csw.dCSWDataResidue[2] = 0; sts _Usb_Csw+8+2,R2 .dbline 542 ; Usb_Csw.dCSWDataResidue[3] = 0; sts _Usb_Csw+8+3,R2 .dbline 543 ; Usb_Csw.dCSWDataResidue[4] = 0; sts _Usb_Csw+8+4,R2 .dbline 544 ; flashWritecmd(); rcall _flashWritecmd .dbline 545 ; XmtBuff.p_p=0; clr R2 sts _XmtBuff+70,R2 .dbline 546 ; XmtBuff.p = (unsigned char *)&Usb_Csw; ldi R24,<_Usb_Csw ldi R25,>_Usb_Csw sts _XmtBuff+68+1,R25 sts _XmtBuff+68,R24 .dbline 547 ; XmtBuff.wrLength = 13; ldi R24,13 ldi R25,0 sts _XmtBuff+64+1,R25 sts _XmtBuff+64,R24 .dbline 548 ; BULK_submit(); rcall _BULK_submit .dbline -2 .dbline 549 ; } L171: .dbline 0 ; func end ret .dbfunc s SCSICMD_Verify10 _SCSICMD_Verify10 fI .even _SCSICMD_Verify10:: .dbline -1 .dbline 571 ; /************************************************************ ; **工程名称:U盘固件程序开发 ; **编译器类型及版本:ICCAVR 6.26C ; **日期:2004.4.30 ; **创建人:陈驰 ; **所属单位:湖南大学计算机与通信学院 ; ; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0 ; **时钟频率:8MHZ ; ; **函数功能:SCSI命令 ; **函数输入参数及说明:无 ; ; **函数返回值:无 ; **在本函数以外定义的变量: ; **调用的函数说明:无 ; ; **修改人:陈驰 ; **修改日期:2004.4.30 ; **修改说明:创建 ; *************************************************************/ ; void SCSICMD_Verify10(void){ .dbline 572 ; Usb_Set_Csw(); rcall _Usb_Set_Csw .dbline 573 ; Usb_Csw.dCSWDataResidue[1] = 0; clr R2 sts _Usb_Csw+8+1,R2 .dbline 574 ; Usb_Csw.dCSWDataResidue[2] = 0; sts _Usb_Csw+8+2,R2 .dbline 575 ; Usb_Csw.dCSWDataResidue[3] = 0; sts _Usb_Csw+8+3,R2 .dbline 576 ; Usb_Csw.dCSWDataResidue[4] = 0; sts _Usb_Csw+8+4,R2 .dbline 577 ; XmtBuff.p_p=0; sts _XmtBuff+70,R2 .dbline 578 ; XmtBuff.p = (unsigned char *)&Usb_Csw; ldi R24,<_Usb_Csw ldi R25,>_Usb_Csw sts _XmtBuff+68+1,R25 sts _XmtBuff+68,R24 .dbline 579 ; XmtBuff.wrLength = 13; ldi R24,13 ldi R25,0 sts _XmtBuff+64+1,R25 sts _XmtBuff+64,R24 .dbline 580 ; BULK_submit(); rcall _BULK_submit .dbline -2 .dbline 581 ; } L183: .dbline 0 ; func end ret .dbfunc s SCSICMD_ModeSense10 _SCSICMD_ModeSense10 fI .even _SCSICMD_ModeSense10:: .dbline -1 .dbline 603 ; /************************************************************ ; **工程名称:U盘固件程序开发 ; **编译器类型及版本:ICCAVR 6.26C ; **日期:2004.4.30 ; **创建人:陈驰 ; **所属单位:湖南大学计算机与通信学院 ; ; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0 ; **时钟频率:8MHZ ; ; **函数功能:SCSI命令 ; **函数输入参数及说明:无 ; ; **函数返回值:无 ; **在本函数以外定义的变量: ; **调用的函数说明:无 ; ; **修改人:陈驰 ; **修改日期:2004.4.30 ; **修改说明:创建 ; *************************************************************/ ; void SCSICMD_ModeSense10(void){ .dbline 604 ; Usb_Set_Csw(); rcall _Usb_Set_Csw .dbline 605 ; Usb_Csw.dCSWDataResidue[1] = 0; clr R2 sts _Usb_Csw+8+1,R2 .dbline 606 ; Usb_Csw.dCSWDataResidue[2] = 0; sts _Usb_Csw+8+2,R2 .dbline 607 ; Usb_Csw.dCSWDataResidue[3] = 0; sts _Usb_Csw+8+3,R2 .dbline 608 ; Usb_Csw.dCSWDataResidue[4] = 0; sts _Usb_Csw+8+4,R2 .dbline 609 ; XmtBuff.p_p=0; sts _XmtBuff+70,R2 .dbline 610 ; XmtBuff.p = (unsigned char *)&Usb_Csw; ldi R24,<_Usb_Csw ldi R25,>_Usb_Csw sts _XmtBuff+68+1,R25 sts _XmtBuff+68,R24 .dbline 611 ; XmtBuff.wrLength = 13; ldi R24,13 ldi R25,0 sts _XmtBuff+64+1,R25 sts _XmtBuff+64,R24 .dbline 612 ; BULK_submit(); rcall _BULK_submit .dbline -2 .dbline 613 ; } L195: .dbline 0 ; func end ret .area bss(ram, con, rel) .dbfile G:\source\Scsi.c _Usb_Cbw:: .blkb 31 .dbsym s Usb_Cbw _Usb_Cbw X _Usb_Csw:: .blkb 13 .dbsym s Usb_Csw _Usb_Csw X _dCBWDaTrLen:: .blkb 2 .dbsym s dCBWDaTrLen _dCBWDaTrLen i _BulkStausPhase:: .blkb 1 .dbsym s BulkStausPhase _BulkStausPhase c .area lit(rom, con, rel) L63: .word 0,0 .area data(ram, con, rel) .dbfile G:\source\Scsi.c L4: .blkb 1 .area idata .byte 0 .area data(ram, con, rel) .dbfile G:\source\Scsi.c