⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scsi.s

📁 USB通信程序开发(附源码 精品)包括详细论文说明
💻 S
📖 第 1 页 / 共 3 页
字号:
	.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 <macros.h>
; #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<len;i++)
	clr R22
	rjmp L11
L8:
	.dbline 67
	.dbline 68
	lds R10,31744
	.dbline 69
	sts 0xfc01,R22
	.dbline 69
	.dbline 70
	st Z+,R10
	.dbline 71
L9:
	.dbline 66
	inc R22
L11:
	.dbline 66
	cp R22,R20
	brlo L8
	.dbline 72
; 		{
; 	  		j = D12_DATA;
; 	   		csram;
; 	   		asm("st Z+,%j");
; 		}
; 		Usb_BoCommand();
	rcall _Usb_BoCommand
	.dbline 73
; 	}
	rjmp L7
L6:
	.dbline 74
; 	else if(BulkPhase == OutDataPhase){
	lds R24,_BulkPhase
	cpi R24,1
	breq X0
	rjmp L12
X0:
	.dbline 74
	.dbline 75
; 		j = D12_DATA;
	lds R10,31744
	.dbline 76
; 		csram;
	sts 0xfc01,R22
	.dbline 76
	.dbline 77
; 		p = Buff;
	mov R24,R28
	mov R25,R29
	mov R12,R24
	mov R13,R25
	.dbline 78
; 		*(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 79
; 		for(i=0;i<len;i++)
	clr R22
	rjmp L17
L14:
	.dbline 80
	.dbline 81
	lds R10,31744
	.dbline 82
	sts 0xfc01,R22
	.dbline 82
	.dbline 83
	st Z+,R10
	.dbline 84
L15:
	.dbline 79
	inc R22
L17:
	.dbline 79
	cp R22,R20
	brlo L14
	.dbline 85
	clr R22
	rjmp L21
L18:
	.dbline 85
	.dbline 86
	mov R2,R22
	clr R3
	lds R31,_WritePageBuffLen+1
	lds R30,_WritePageBuffLen
	add R30,R2
	adc R31,R3
	lds R3,_WritePageBuff+1
	lds R2,_WritePageBuff
	add R30,R2
	adc R31,R3
	mov R24,R28
	mov R25,R29
	mov R26,R22
	clr R27
	add R26,R24
	adc R27,R25
	ld R2,x
	std z+0,R2
	.dbline 87
L19:
	.dbline 85
	inc R22
L21:
	.dbline 85
; 		{
; 	  		j = D12_DATA;
; 	   		csram;
; 	   		asm("st Z+,%j");
; 		}
; 		for(i=0;i<len;i++){
	cp R22,R20
	brlo L18
	.dbline 88
; 			WritePageBuff[WritePageBuffLen+i] = Buff[i];
; 		}
; 		WritePageBuffLen += len;
	mov R2,R20
	clr R3
	lds R5,_WritePageBuffLen+1
	lds R4,_WritePageBuffLen
	add R4,R2
	adc R5,R3
	sts _WritePageBuffLen+1,R5
	sts _WritePageBuffLen,R4
	.dbline 89
; 		if(WritePageBuffLen == 512){
	mov R24,R4
	mov R25,R5
	cpi R24,0
	ldi R30,2
	cpc R25,R30
	brne L22
	.dbline 89
	.dbline 90
; 			Usb_BoBulkInData();
	rcall _Usb_BoBulkInData
	.dbline 91
; 			WritePageBuffLen = 0;
	clr R2
	clr R3
	sts _WritePageBuffLen+1,R3
	sts _WritePageBuffLen,R2
	.dbline 92
; 		}
L22:
	.dbline 93
; 	}
L12:
L7:
	.dbline 94
; 	D12_COMMAND = 0x04;//选择端点(指针指向0位置)
	ldi R24,4
	sts 31745,R24
	.dbline 95
; 	cwait;
	nop
	.dbline 96
; 	D12_COMMAND = 0xf1;
	ldi R24,241
	sts 31745,R24
	.dbline 97
; 	cwait;
	nop
	.dbline 98
; 	D12_COMMAND = 0xf2;//清端点缓冲区
	ldi R24,242
	sts 31745,R24
	.dbline -2
	.dbline 99
; }
L5:
	adiw R28,63
	adiw R28,1  ; offset = 64
	rcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r p 12 pc
	.dbsym l Buff 0 A[64:64]c
	.dbsym r j 10 c
	.dbsym r i 22 c
	.dbsym r len 20 c
	.dbfunc s Usb_BoCommand _Usb_BoCommand fI
	.area func_lit(rom, con, rel)
L53:
	.word `L41
	.word `L32
	.word `L42
	.word `L32
	.word `L32
	.word `L43
	.word `L32
	.word `L44
	.area text(rom, con, rel)
	.dbfile G:\source\Scsi.c
	.even
_Usb_BoCommand::
	rcall push_gset1
	.dbline -1
	.dbline 121
; /************************************************************
; **工程名称:U盘固件程序开发
; **编译器类型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **创建人:陈驰
; **所属单位:湖南大学计算机与通信学院
; 
; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **时钟频率:8MHZ
; 
; **函数功能:SCSI命令处理
; **函数输入参数及说明:无
; 
; **函数返回值:无
; **在本函数以外定义的变量:
; **调用的函数说明:无
; 
; **修改人:陈驰
; **修改日期:2004.4.30
; **修改说明:创建
; *************************************************************/
; void Usb_BoCommand(void){	
	.dbline 122
; 	XmtBuff.p_p=1;
	ldi R24,1
	sts _XmtBuff+70,R24
	.dbline 123
; 	dCBWDaTrLen=((XmtBuff.b[11]<<8)+(XmtBuff.b[10]))<<15;
	lds R2,_XmtBuff+10
	clr R3
	lds R16,_XmtBuff+11
	clr R17
	mov R17,R16
	clr R16
	add R16,R2
	adc R17,R3
	ldi R18,15
	ldi R19,0
	rcall lsl16
	sts _dCBWDaTrLen+1,R17
	sts _dCBWDaTrLen,R16
	.dbline 124
;         dCBWDaTrLen=(dCBWDaTrLen<<1)+((XmtBuff.b[9]<<8)+(XmtBuff.b[8])) ;
	lds R2,_XmtBuff+8
	clr R3
	lds R4,_XmtBuff+9
	clr R5
	mov R5,R4
	clr R4
	add R4,R2
	adc R5,R3
	mov R2,R16
	mov R3,R17
	lsl R2
	rol R3
	add R2,R4
	adc R3,R5
	sts _dCBWDaTrLen+1,R3
	sts _dCBWDaTrLen,R2
	.dbline 125
; 	Usb_Cbw.CBWCB[0] = XmtBuff.b[15];
	lds R2,_XmtBuff+15
	sts _Usb_Cbw+15,R2
	.dbline 126
; 	switch(Usb_Cbw.CBWCB[0]){
	mov R20,R2
	clr R21
	cpi R20,30
	ldi R30,0
	cpc R21,R30
	brne X2
	rjmp L40
X2:
	ldi R24,30
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L48
L47:
	cpi R20,18
	ldi R30,0
	cpc R21,R30
	brne X3
	rjmp L38
X3:
	ldi R24,18
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L50
L49:
	cpi R20,0
	cpc R20,R21
	brne X4
	rjmp L36
X4:
	cpi R20,3
	ldi R30,0
	cpc R21,R30
	brne X5
	rjmp L37
X5:
	rjmp L32
L50:
	cpi R20,26
	ldi R30,0
	cpc R21,R30
	brne X6
	rjmp L39
X6:
	rjmp L32
L48:
	cpi R20,47
	ldi R30,0
	cpc R21,R30
	brne X7
	rjmp L45
X7:
	ldi R24,47
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L52
L51:
	cpi R20,35
	ldi R30,0
	cpc R21,R30
	brge X8
	rjmp L32
X8:
	ldi R24,42
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brge X9
	rjmp L32
X9:
	ldi R24,<L53
	ldi R25,>L53
	mov R16,R20
	mov R17,R21
	subi R16,35
	sbci R17,0
	lsl R16
	rol R17
	add R16,R24
	adc R17,R25

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -