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

📄 bulkonly.s

📁 采用Atmeag162单片机来制作的U盘程序源码
💻 S
字号:
	.module BulkOnly.C
	.area text(rom, con, rel)
	.dbfile D:\AvrUSB\BulkOnly.C
	.dbfunc e Bulk_CBWHandler _Bulk_CBWHandler fV
	.even
_Bulk_CBWHandler::
	sbiw R28,2
	.dbline -1
	.dbline 23
; #include <iom162v.h>
; #include <macros.h>
; 
; #include "BulkOnly.H"
; #include "D12CI.H"
; #include "MAIN.H" 
; 
; 
; extern CONTROL_XFER ControlData;
; extern EPPFLAGS bEPPflags;
; BULK_STRUCT  Bulk_Block;
; 
; extern BULK_CONTROL  Bulk_Control_r;
; extern BULK_CONTROL  Bulk_Control_w;
; extern unsigned char PageBuf[512];
; 
; #define Bulk_CBW  Bulk_Block.cbw
; #define Bulk_CSW  Bulk_Block.csw
; #define CBW_bCBWCBLength Bulk_Block.cbw.dCBWDataTransferLength
; #define CSW_dCSWDataResidue Bulk_Block.csw.dCSWDataResidue
; 
; void Bulk_CBWHandler( void )
; {   
	.dbline 24
;     if(sizeof(CBW)==D12_ReadEndpoint(4,EP2_PACKET_SIZE,(unsigned char*)&Bulk_CBW))
	ldi R24,<_Bulk_Block
	ldi R25,>_Bulk_Block
	std y+1,R25
	std y+0,R24
	ldi R18,64
	ldi R16,4
	xcall _D12_ReadEndpoint
	cpi R16,31
	brne L2
	.dbline 25
;     {
	.dbline 26
; 	    if(IsCBWValid())
	xcall _IsCBWValid
	tst R16
	breq L4
	.dbline 27
; 	    {		      
	.dbline 28
; 		    RBC_Hander();
	xcall _RBC_Hander
	.dbline 29
; 			return;
	xjmp L1
L4:
	.dbline 31
; 	    }
; 	}
L2:
	.dbline 32
; 	Bulk_ErrorHandler(CSW_PHASE_ERROR,0);
	clr R18
	clr R19
	ldi R16,2
	xcall _Bulk_ErrorHandler
	.dbline 33
; 	Bulk_CSWHandler();		
	xcall _Bulk_CSWHandler
	.dbline -2
	.dbline 34
; }
L1:
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Bulk_CSWHandler _Bulk_CSWHandler fV
	.even
_Bulk_CSWHandler::
	sbiw R28,2
	.dbline -1
	.dbline 36
; void Bulk_CSWHandler( void )
; {
	.dbline 37
;    D12_WriteEndpoint(5,sizeof(CSW),(unsigned char *)&Bulk_CSW);  
	ldi R24,<_Bulk_Block
	ldi R25,>_Bulk_Block
	std y+1,R25
	std y+0,R24
	ldi R18,13
	ldi R16,5
	xcall _D12_WriteEndpoint
	.dbline 38
;    bEPPflags.bits.bulk_state=BULK_IDLE;  
	lds R24,_bEPPflags+2
	andi R24,248
	sts _bEPPflags+2,R24
	.dbline -2
	.dbline 39
; }
L6:
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Bulk_code_transmit _Bulk_code_transmit fV
;            len -> R12,R13
;       pRomData -> R10,R11
	.even
_Bulk_code_transmit::
	xcall push_gset4
	movw R12,R18
	movw R10,R16
	sbiw R28,2
	.dbline -1
	.dbline 41
; void Bulk_code_transmit(const unsigned char * pRomData,unsigned short len)
; {
	.dbline 42
;   ControlData.wCount=0; 
	clr R2
	clr R3
	sts _ControlData+10+1,R3
	sts _ControlData+10,R2
	.dbline 43
;   ControlData.pCData=pRomData;
	sts _ControlData+14+1,R11
	sts _ControlData+14,R10
	.dbline 44
;   ControlData.wLength=len;
	sts _ControlData+8+1,R13
	sts _ControlData+8,R12
	.dbline 45
;   if(ControlData.wLength>=CBW_bCBWCBLength)
	lds R4,_Bulk_Block+8+2
	lds R5,_Bulk_Block+8+2+1
	lds R2,_Bulk_Block+8
	lds R3,_Bulk_Block+8+1
	movw R6,R12
	clr R8
	clr R9
	cp R6,R2
	cpc R7,R3
	cpc R8,R4
	cpc R9,R5
	brlo L12
	.dbline 46
;         ControlData.wLength=CBW_bCBWCBLength; 
	sts _ControlData+8+1,R3
	sts _ControlData+8,R2
L12:
	.dbline 47
;   Bulk_ErrorHandler(CSW_GOOD,ControlData.wLength);		  
	lds R18,_ControlData+8
	lds R19,_ControlData+8+1
	clr R16
	xcall _Bulk_ErrorHandler
	.dbline 48
;   if(ControlData.wLength>=EP2_PACKET_SIZE)
	lds R24,_ControlData+8
	lds R25,_ControlData+8+1
	cpi R24,64
	ldi R30,0
	cpc R25,R30
	brlo L19
	.dbline 49
;   {
	.dbline 50
;      D12_CWriteEndpoint(5,EP2_PACKET_SIZE,ControlData.pCData);
	lds R2,_ControlData+14
	lds R3,_ControlData+14+1
	std y+1,R3
	std y+0,R2
	ldi R18,64
	ldi R19,0
	ldi R16,5
	ldi R17,0
	xcall _D12_CWriteEndpoint
	.dbline 51
;      ControlData.wCount+=EP2_PACKET_SIZE;
	lds R24,_ControlData+10
	lds R25,_ControlData+10+1
	subi R24,192  ; offset = 64
	sbci R25,255
	sts _ControlData+10+1,R25
	sts _ControlData+10,R24
	.dbline 52
;      bEPPflags.bits.bulk_state=BULK_REQEST_TRANS;    
	lds R24,_bEPPflags+2
	andi R24,248
	ori R24,3
	sts _bEPPflags+2,R24
	.dbline 53
;   }
	xjmp L20
L19:
	.dbline 55
	.dbline 56
	std y+1,R11
	std y+0,R10
	lds R18,_ControlData+8
	lds R19,_ControlData+8+1
	ldi R16,5
	ldi R17,0
	xcall _D12_CWriteEndpoint
	.dbline 57
	lds R2,_ControlData+8
	lds R3,_ControlData+8+1
	lds R4,_ControlData+10
	lds R5,_ControlData+10+1
	add R4,R2
	adc R5,R3
	sts _ControlData+10+1,R5
	sts _ControlData+10,R4
	.dbline 58
	lds R24,_bEPPflags+2
	andi R24,248
	ori R24,2
	sts _bEPPflags+2,R24
	.dbline 59
L20:
	.dbline -2
	.dbline 60
;   else
;   {     
;      D12_CWriteEndpoint(5,ControlData.wLength,pRomData);
;      ControlData.wCount+=ControlData.wLength;
;      bEPPflags.bits.bulk_state=BULK_DATA_END;
;   }
; }
L8:
	adiw R28,2
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r len 12 s
	.dbsym r pRomData 10 pkc
	.dbend
	.dbfunc e IsCBWValid _IsCBWValid fc
	.even
_IsCBWValid::
	xcall push_gset2
	.dbline -1
	.dbline 62
; BOOLEAN IsCBWValid(void)
; {
	.dbline 63
;   if((Bulk_CBW.dCBWSignature==CBW_SIGNATURE)&&
	ldi R20,85
	ldi R21,83
	ldi R22,66
	ldi R23,67
	lds R4,_Bulk_Block+2
	lds R5,_Bulk_Block+2+1
	lds R2,_Bulk_Block
	lds R3,_Bulk_Block+1
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brne L30
	ldi R24,1
	lds R2,_Bulk_Block+13
	cp R24,R2
	brlo L30
	ldi R24,16
	lds R2,_Bulk_Block+14
	cp R24,R2
	brlo L30
	.dbline 66
;                        (Bulk_CBW.bCBWLUN<=1)&&
;    	     (Bulk_CBW.bCBWCBLength<=MAX_CDBLEN))
; 		return TRUE;
	ldi R16,1
	xjmp L29
L30:
	.dbline 68
; 	else
; 		return FALSE;
	clr R16
	.dbline -2
L29:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Bulk_ErrorHandler _Bulk_ErrorHandler fV
;     wByteCount -> R18,R19
;      CSWStatus -> R16
	.even
_Bulk_ErrorHandler::
	xcall push_gset2
	.dbline -1
	.dbline 71
; }
; void Bulk_ErrorHandler(unsigned char CSWStatus,unsigned int wByteCount)
; {
	.dbline 72
;   Bulk_CSW.dCSWDataResidue=Bulk_CBW.dCBWDataTransferLength-wByteCount;
	movw R2,R18
	clr R4
	clr R5
	lds R8,_Bulk_Block+8+2
	lds R9,_Bulk_Block+8+2+1
	lds R6,_Bulk_Block+8
	lds R7,_Bulk_Block+8+1
	sub R6,R2
	sbc R7,R3
	sbc R8,R4
	sbc R9,R5
	sts _Bulk_Block+8+1,R7
	sts _Bulk_Block+8,R6
	sts _Bulk_Block+8+2+1,R9
	sts _Bulk_Block+8+2,R8
	.dbline 73
;   Bulk_CSW.dCSWSignature=CSW_SIGNATURE;
	ldi R20,85
	ldi R21,83
	ldi R22,66
	ldi R23,83
	sts _Bulk_Block+1,R21
	sts _Bulk_Block,R20
	sts _Bulk_Block+2+1,R23
	sts _Bulk_Block+2,R22
	.dbline 74
;   Bulk_CSW.bCSWStatus=CSWStatus;	
	sts _Bulk_Block+12,R16
	.dbline -2
	.dbline 75
; }
L34:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r wByteCount 18 i
	.dbsym r CSWStatus 16 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile D:\AvrUSB\BulkOnly.C
_Bulk_Block::
	.blkb 31
	.dbsym e Bulk_Block _Bulk_Block X

⌨️ 快捷键说明

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