?? bulk_only.lst
字號:
C51 COMPILER V6.12 BULK_ONLY 08/20/2006 19:41:23 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE BULK_ONLY
OBJECT MODULE PLACED IN Bulk_Only.OBJ
COMPILER INVOKED BY: C:\keil\C51\BIN\c51.exe Bulk_Only.c DB OE
stmt level source
*** WARNING C500 IN LINE 1 OF BULK_ONLY.C: MISSING DEVICE (SECURITY KEY NOT FOUND)
1 #include "c8051F320.h"
2 #include "stdio.h"
3 #include "intrins.h"
4 /////////////////////////////
5 #include "Usb_FunDec.h"
6 #include "Usb_Parameter.h"
7 #include "Usb_Register.h"
8 #include "Usb_Request.h"
9 #include "Usb_SCSI_Descreptor.h"
10 ///////////////////////////////////////////////////////////////////////////////////////////
11 sbit LED = P0^0; //LED控制腳
12 // Bulk傳輸處理函數
13 void Interpret_CBW(void); // 解釋CBW命令
14 void TransDataGoOn(void); // 繼續傳輸
15 void TransCSW(void); // 發送CSW
16 void Bulk_Receive_Data(void); // 接收數據
17 void Copy(unsigned char *PEnd,unsigned char *PSource,unsigned int num); // 在Bulk_Out過程中將Bulk_Buffer中
-的數據拷貝到Bulk_PACKET中
18 // 外部函數調用
19 extern void Flash_Read_Page(unsigned int BLockNum,unsigned char BlockPageNum,unsigned char *P,unsigned
-int Data_Length);
20 extern unsigned char Flash_Write_Page(unsigned int BLockNum,unsigned char BlockPageNum,unsigned char *P,u
-nsigned int Data_Length);
21 extern unsigned char Flash_Erase_Block(unsigned int BlockNum);
22 // 外部變量
23 extern unsigned char Ep_Status[3];
24 // BUlk傳輸變量
25 unsigned char Bulk_Status = BULK_IDLE; // Bulk傳輸狀態
26 unsigned char Bulk_CSW[13]={0x55,0x53,0x42,0x53,};
27 xdata struct CBW
28 {
29 unsigned char dCBWstagnature[4];
30 unsigned char dCBWTag[4];
31 unsigned char dCBWDataTransLength[4];
32 unsigned char bmCBWFlags;
33 unsigned char dCBWLun;
34 unsigned char dCBWCBLength;
35 unsigned char CBWCB[16];
36 }Bulk_CBW;
37 xdata unsigned char Bulk_PACKET[512]; // 讀寫FLASH時的數據緩沖區
38 xdata unsigned char Bulk_Buffer[64]; // FIFO緩沖區
39 unsigned int LBA=0; // LBA
40 unsigned int Transfer_Length=0; // 要傳輸的長度,單位為扇區
41 unsigned int nCurrentBlock=0; // 當前的Block地址
42 unsigned int nCurrentPage=0; // 當前的Page地址
43 unsigned char *pCurrentBuf; // Bulk傳輸中的指針
44 unsigned int nBufCount=0; // FIFO讀寫過程中傳輸的數據量
45 unsigned int nBegainPage=0; // Bulk_Out傳輸中的開始Page地址
46 /////////////////////////////////////////////////////////////////////////////////////////////
47 void Handle_In1()
48 {
49 1 unsigned char ControlReg;
50 1 UWrite_Byte(INDEX, 1);
51 1 URead_Byte(EINCSRL, ControlReg);
C51 COMPILER V6.12 BULK_ONLY 08/20/2006 19:41:23 PAGE 2
52 1 if (Ep_Status[1] == EP_HALT)
53 1 {
54 2 UWrite_Byte(EINCSRL, rbInSDSTL);
55 2 }
56 1 else
57 1 {
58 2 if (ControlReg & rbInSTSTL)
59 2 {
60 3 UWrite_Byte(EINCSRL, rbInCLRDT);//清除SDSTL和STSTL,并將CLRDT寫1使toggle復位為0
61 3 }
62 2 if (ControlReg & rbInUNDRUN)
63 2 {
64 3 UWrite_Byte(EINCSRL, 0x00); // 清除UNDRUN,注意toggle位不復位
65 3 }
66 2 if(!(ControlReg & rbInINPRDY))
67 2 {
68 3 switch(Bulk_Status)
69 3 {
70 4 case BULK_DATA_TRANS: TransDataGoOn(); break;
71 4 case BULK_DATA_END: TransCSW(); break;
72 4 default: break;
73 4 }
74 3 }
75 2 }
76 1 }
77 /////////////////////////////////////////////////////////////////////////////////////////////
78 // Handle_Out2
79 void Handle_Out2()
80 {
81 1 unsigned int Count=0;
82 1 unsigned char ControlReg;
83 1 UWrite_Byte(INDEX, 2); // Set index to endpoint 2 registers
84 1 URead_Byte(EOUTCSRL, ControlReg);
85 1 if (Ep_Status[2] == EP_HALT) // If endpoint is halted, send a stall
86 1 {
87 2 UWrite_Byte(EOUTCSRL, rbOutSDSTL);
88 2
89 2 }
90 1 else
91 1 {
92 2 if (ControlReg & rbOutSTSTL)
93 2 {
94 3 UWrite_Byte(EOUTCSRL, rbOutCLRDT); //清除SDSTL和STSTL,并將CLRDT寫1使toggle復位為0
95 3 }
96 2 ////////////////////////////////////////////////////////////////
97 2 if(ControlReg & rbOutOPRDY)
98 2 {
99 3 UWrite_Byte(INDEX, 2);
100 3 URead_Byte(EOUTCNTL, Count);
101 3 Fifo_Read(FIFO_EP2, Count, Bulk_Buffer);
102 3 UWrite_Byte(INDEX, 2);
103 3 UWrite_Byte(EOUTCSRL, 0); // Clear Out Packet ready bit
104 3 if((Bulk_Status !=BULK_DATA_RECIEVE) && (Bulk_Buffer[0]==0x55))
105 3 {
106 4 Interpret_CBW();
107 4 }
108 3 else
109 3 {
110 4 Bulk_Receive_Data();
111 4 }
112 3 }
113 2 }
C51 COMPILER V6.12 BULK_ONLY 08/20/2006 19:41:23 PAGE 3
114 1 }
115 ///////////////////////////////////////////////////////////////////////////////////////////////////
116 void Interpret_CBW()
117 {
118 1 unsigned char i=0;
119 1 Bulk_CSW[4] = Bulk_Buffer[4];
120 1 Bulk_CSW[5] = Bulk_Buffer[5];
121 1 Bulk_CSW[6] = Bulk_Buffer[6];
122 1 Bulk_CSW[7] = Bulk_Buffer[7];
123 1 for(i=0;i<12;i++) //提取SCSI命令字
124 1 {
125 2 Bulk_CBW.CBWCB[i] = Bulk_Buffer[15+i];
126 2 }
127 1 switch(Bulk_CBW.CBWCB[0])
128 1 {
129 2 case INQUIRY: SCSI_Inquiry(); break;
130 2 case MODE_SENSE: SCSI_Mode_Sense(); break;
131 2 case READ10: SCSI_Read10(); break;
132 2 case READ_CAPACITY: SCSI_Read_Capacity(); break;
133 2 case TEST_UNIT_READY: SCSI_Test_Unit_Ready(); break;
134 2 case VERIFY: SCSI_Verify(); break;
135 2 case WRITE10: SCSI_Write10(); break;
136 2 case MEDIUM_REMOVAL: SCSI_Medium_Removal(); break;
137 2
138 2 case Vender_Order: SCSI_Vender_Order(); break;
139 2 default: SCSI_Reserved(); break;
140 2 }
141 1 }
142 ///////////////////////////////////////////////////////////////////////////////////////////////////
143 void SCSI_Inquiry(void)
144 {
145 1 if(Bulk_CBW.CBWCB[4]!=0)
146 1 {
147 2 Bulk_Status=BULK_DATA_END;
148 2 Fifo_Write(FIFO_EP1,sizeof(Device_InquiryData),Device_InquiryData);
149 2 UWrite_Byte(INDEX, 1);
150 2 UWrite_Byte(EINCSRL, rbInINPRDY);
151 2 }
152 1 else
153 1 {}
154 1 }
155 void SCSI_Mode_Sense(void)
156 {
157 1 Bulk_Status=BULK_DATA_END;
158 1 Fifo_Write(FIFO_EP1,sizeof(Device_ModeSense),Device_ModeSense);
159 1 UWrite_Byte(INDEX, 1);
160 1 UWrite_Byte(EINCSRL, rbInINPRDY);
161 1 }
162 void SCSI_Read_Capacity(void)
163 {
164 1 Bulk_Status=BULK_DATA_END;
165 1 Fifo_Write(FIFO_EP1,sizeof(Device_Capacity),Device_Capacity);
166 1 UWrite_Byte(INDEX, 1);
167 1 UWrite_Byte(EINCSRL, rbInINPRDY);
168 1 }
169 void SCSI_Vender_Order()
170 {
171 1 Bulk_Status=BULK_DATA_END;
172 1 Fifo_Write(FIFO_EP1,sizeof(Vender_Order),Vender_Order);
*** WARNING C196 IN LINE 172 OF BULK_ONLY.C: mspace probably invalid
173 1 UWrite_Byte(INDEX, 1);
174 1 UWrite_Byte(EINCSRL, rbInINPRDY);
C51 COMPILER V6.12 BULK_ONLY 08/20/2006 19:41:23 PAGE 4
175 1 }
176 void SCSI_Test_Unit_Ready(void)
177 {
178 1 TransCSW();
179 1 }
180 void SCSI_Medium_Removal(void)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -