📄 scsi.s
字号:
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
ldi R17,>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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -