?? storage.lst
字號:
C51 COMPILER V7.02b STORAGE 02/01/2007 10:35:43 PAGE 1
C51 COMPILER V7.02b, COMPILATION OF MODULE STORAGE
OBJECT MODULE PLACED IN .\Output\Storage.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Storage.c OPTIMIZE(9,SPEED) BROWSE INCDIR(Include) DEFINE(READER) DEBUG OBJ
-ECTEXTEND PRINT(.\Output\Storage.lst) OBJECT(.\Output\Storage.obj)
stmt level source
1 /*
2 **********************************************************************************************
3 * Project: TK7821
4 * File: Storage.c
5 * Contents:
6 * The storage access wrapper
7 *
8 * $Date: 02/25/05 Jason v0.1
9 * 05/12/05 Mingo v0.2 www.fameg.com
10 *
11 * Copyright (c) 2005 Fameg, Inc. All rights reserved
12 ***********************************************************************************************
13 */
14
15 #include <reg51.h>
16 #include <string.h>
17 #include "Device.h"
18 #include "UsbDisk.h"
19 #include "Storage.h"
20 #include "ScsiCmd.h"
21 #include "FlashDisk.h"
22
23 bit AccessStatus; // ??? what for ???
24 bit AccessWritable = false;// ??? what for ???
25 BYTE AccessDevice; // ??? what for ???
26 BYTE CmdTimer;
27
28 BYTE LastDevice;
29 idata BYTE DeviceType[MAX_DEVICE_NUM];
30
31 UINT16 CopyBuffer = DMA_BUFFER2; // Address of temporary block copy buffer
32 UINT16 CurrentBuffer;
33 bit Authenticated = false;
34 xdata TDeviceInfo DeviceInfo;
35 xdata TConfigData ConfigData;
36 idata STATUS SdMediaStatus = STATUS_NO_MEDIA;
37
38 //----------------------------------------------------------------------------
39 // Description:
40 // Initiate the storage interfaces
41 //----------------------------------------------------------------------------
42 void StorageInit()
43 {
44 1 LastDevice = 0;
45 1 CurrentBuffer = DMA_BUFFER0;
46 1
47 1 // Init Parameters.
48 1 memset((BYTE xdata *)ConfigData.ReadOnly, 0, MAX_DEVICE_NUM); //不可去除此條語句,否則會導致SD卡成寫保護
-模式,只能讀不能寫也不能刪除文件
49 1
50 1 SdInit();
51 1 DeviceType[LastDevice] = DEVICE_SD;
52 1 }
53
C51 COMPILER V7.02b STORAGE 02/01/2007 10:35:43 PAGE 2
54 //--------------------------------------------------------------------
55 // Make the storage devices into suspend mode
56 //--------------------------------------------------------------------
57 void StorageSuspend()
58 {
59 1 SdSuspend();
60 1 }
61
62 //--------------------------------------------------------------------
63 // Make the storage devices resume
64 //--------------------------------------------------------------------
65 void StorageResume()
66 {
67 1 SdResume(); // Resume SD first or CF will fail
68 1 }
69
70 //----------------------------------------------------------------------------
71 // Description:
72 // Get the next buffer address
73 //----------------------------------------------------------------------------
74 UINT16 GetNextBuffer(UINT16 Buffer)
75 {
76 1 if (((TDataCast *)&Buffer)->ucByte[0] == (DMA_BUFFER0 >> 8))
77 1 return DMA_BUFFER1;
78 1 else
79 1 return DMA_BUFFER0;
80 1 }
81
82 //---------------------------------------------------------------------------
83 // Used to change device STATUS when StartStopUint "Start" cmd issued
84 //---------------------------------------------------------------------------
85 void StorageStart()
86 {
87 1 SdStart();
88 1 }
89
90 //---------------------------------------------------------------------------
91 // Used to change device STATUS when StartStopUint "Stop" cmd issued
92 //---------------------------------------------------------------------------
93 void StorageEject()
94 {
95 1 SdEject();
96 1 }
97
98 //----------------------------------------------------------------------------
99 // Query one storage device for status
100 //----------------------------------------------------------------------------
101 STATUS QueryDevice()
102 {
103 1 xdata BYTE Status;
104 1
105 1 switch (DeviceType[ScsiLun])
106 1 {
107 2 case DEVICE_SD: Status = SdQueryDevice(); break;
108 2 default:
109 2 return STATUS_PARAM_ERROR;
110 2 }
111 1
112 1 if(ConfigData.ReadOnly[ScsiLun])
113 1 DeviceInfo.WriteProtect = true;
114 1
115 1 return Status;
C51 COMPILER V7.02b STORAGE 02/01/2007 10:35:43 PAGE 3
116 1 }
117
118 //----------------------------------------------------------------------------
119 // Storage sector read routine
120 //----------------------------------------------------------------------------
121 STATUS ReadSector()
122 {
123 1 BYTE Status;
124 1
125 1 AccessStatus = true;
126 1 AccessDevice = ScsiLun;
127 1 CurrentBuffer = GetNextBuffer(CurrentBuffer);
128 1
129 1 switch (DeviceType[ScsiLun])
130 1 {
131 2 case DEVICE_SD: Status = SdReadSector(); break;
132 2 default:
133 2 return STATUS_PARAM_ERROR;
134 2 }
135 1 return Status;
136 1 }
137
138 //----------------------------------------------------------------------------
139 // Storage next sector read routine
140 //----------------------------------------------------------------------------
141 STATUS ReadNextSector()
142 {
143 1 BYTE Status;
144 1
145 1 CurrentBuffer = GetNextBuffer(CurrentBuffer);
146 1
147 1 switch (DeviceType[ScsiLun])
148 1 {
149 2 case DEVICE_SD: Status = SdReadNextSector(); break;
150 2 default:
151 2 return STATUS_PARAM_ERROR;
152 2 }
153 1 return Status;
154 1 }
155
156 //----------------------------------------------------------------------------
157 // Storage sector write routine
158 //----------------------------------------------------------------------------
159 STATUS WriteSector()
160 {
161 1 BYTE Status;
162 1
163 1 AccessStatus = true;
164 1 AccessDevice = ScsiLun;
165 1
166 1 switch (DeviceType[ScsiLun])
167 1 {
168 2 case DEVICE_SD: Status = SdWriteSector(); break;
169 2 default:
170 2 Status = STATUS_PARAM_ERROR;
171 2 }
172 1 return Status;
173 1 }
174
175 //----------------------------------------------------------------------------
176 // Storage next sector write routine
177 //----------------------------------------------------------------------------
C51 COMPILER V7.02b STORAGE 02/01/2007 10:35:43 PAGE 4
178 STATUS WriteNextSector()
179 {
180 1 BYTE Status;
181 1
182 1 switch (DeviceType[ScsiLun])
183 1 {
184 2 case DEVICE_SD: Status = SdWriteNextSector(); break;
185 2 default:
186 2 Status = STATUS_PARAM_ERROR;
187 2 }
188 1 return Status;
189 1 }
190
191
192 UINT32 ConvertEndian32(UINT32 Src)
193 {
194 1 UINT32 Des;
195 1 PBYTE pSrc = (PBYTE)(&Src);
196 1 PBYTE pDesc = (PBYTE)(&Des);
197 1
198 1 pDesc[0] = pSrc[3];
199 1 pDesc[1] = pSrc[2];
200 1 pDesc[2] = pSrc[1];
201 1 pDesc[3] = pSrc[0];
202 1
203 1 return Des;
204 1 }
205
206 //----------------------------------------------------------------------------
207 // Convert Big/Little endian to Little/Big endian, UINT16 applyed.
208 // (Due to Keil simulation result,system was Big Endian)
209 //----------------------------------------------------------------------------
210 UINT16 ConvertEndian16(UINT16 Src)
211 {
212 1 UINT16 Des;
213 1 PBYTE pSrc = (PBYTE)(&Src);
214 1 PBYTE pDesc = (PBYTE)(&Des);
215 1
216 1 pDesc[0] = pSrc[1];
217 1 pDesc[1] = pSrc[0];
218 1
219 1 return Des;
220 1 }
221
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 389 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 32 1
PDATA SIZE = ---- ----
DATA SIZE = 7 30
IDATA SIZE = 2 ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -