📄 usbtest.lst
字号:
C51 COMPILER V7.01 USBTEST 06/30/2007 11:42:51 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE USBTEST
OBJECT MODULE PLACED IN USBTest.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE USBTest.c LARGE BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*-----------------------------------------------------------------------
2
3 Copyright (C) 2006 Beijing Jiaotong University, Computer Science
4
5 Creator: xiaoqiang
6
7 File: usbtest.c
8
9 Description:
10 test usb device
11
12 History:
13 2006-10-16 xiaoqiang created
14
15 ------------------------------------------------------------------------*/
16 #include "system.h"
17 #include "typedef.h"
18 #include "usbtest.h"
19 #include "d12interface.h"
20 #include <string.h>
21 #include "lcd.h"
22 #include "usb.h"
23 #include "mmc.h"
24
25 extern EPPFLAGS bEppflags;
26
27 extern char Found; //在目录中找到的文件或目录个数
28 extern FILESTRUCT File[];//保存查找到的文件或目录信息
29 extern FILESTRUCT CurF; //存放当前目录
30 extern MMCDataBuf[512];
31 extern MMCUSBBuf[513];
32 extern char PATH[40];
33 extern char DEPTH;
34
35 //定时器3计数值,20ms
36 #define T3L_VAL 0x00
37 #define T3H_VAL 0x70
38
39 bool bTruncated = false; //set it true if command was truncated
40 //CMD_HEADER CmdHeader;
41 u16 wCount = 0;
42
43 USBTEST1_DATA usbtest1={0, 0, 0, 1, 1, 0, 0, 0, AUTOECHO_OFF,
44 TRANSMODE_CONTROL, 0, 0};
45 bool bNeedRefresh = false; //dynamic refresh
46 bool bTimerRefresh = false;
47
48 extern void SetUSBTest1Data(USBTEST1_DATA *pData);
49 extern void reserved();
50
51 u8 bTestNo = 0;
52
53 static CMD_HEADER xdata *g_pCmd = (CMD_HEADER*)Ep2Buf;
54 static u8 xdata *g_pData = Ep2Buf+sizeof(CMD_HEADER);
55
C51 COMPILER V7.01 USBTEST 06/30/2007 11:42:51 PAGE 2
56
57 void Timer3_INIT() //16位自动重装模式,产成10ms中断
58 {
59 1 SFRPAGE = TMR3_PAGE;
60 1
61 1 TMR3L=T3L_VAL; //赋值
62 1 TMR3H=T3H_VAL;
63 1 RCAP3L=T3L_VAL;
64 1 RCAP3H=T3H_VAL;
65 1 TMR3CF |=0x01; //SYSCLK/12作为T3输入,向上计数
66 1 TMR3CN =0x04; //T3工作模式: 自动重装,计时器,忽略T2EX信号
67 1 EIE2 |=0x1;
68 1 }
69
70 u8 count = 0;
71
72 //timer2 happen interval 1 second
73 void Timer3_Handler() interrupt 14 //T3 20ms中断,用于控制时钟
74 {
75 1 // TMR3CN&=0X7F; //清中断标志位
76 1 TF3=0;
77 1 count++;
78 1 if (count < 50)
79 1 return;
80 1
81 1 count = 0;
82 1 usbtest1.bSecond++;
83 1 bTimerRefresh = true;
84 1 if(usbtest1.bSecond>59)
85 1 {
86 2 usbtest1.bSecond = 0;
87 2 usbtest1.bMinute++;
88 2 if (usbtest1.bMinute >59)
89 2 {
90 3 usbtest1.bMinute = 0;
91 3 usbtest1.bHour++;
92 3 }
93 2 if (usbtest1.bHour > 23)
94 2 {
95 3 usbtest1.bHour = 0;
96 3 usbtest1.bDay++;
97 3 }
98 2 switch(usbtest1.bMonth)
99 2 {
100 3 case 1:
101 3 case 3:
102 3 case 5:
103 3 case 7:
104 3 case 8:
105 3 case 10:
106 3 case 12:
107 3 if (usbtest1.bDay>31)
108 3 {
109 4 usbtest1.bDay=1;
110 4 usbtest1.bMonth++;
111 4 }
112 3 break;
113 3 case 4:
114 3 case 6:
115 3 case 9:
116 3 case 11:
117 3 if (usbtest1.bDay > 30)
C51 COMPILER V7.01 USBTEST 06/30/2007 11:42:51 PAGE 3
118 3 {
119 4 usbtest1.bDay = 1;
120 4 usbtest1.bMonth++;
121 4 }
122 3 break;
123 3 case 2:
124 3 if (usbtest1.bYear%4==0&&usbtest1.bDay>29)
125 3 {
126 4 usbtest1.bDay = 1;
127 4 usbtest1.bMonth++;
128 4 }
129 3 else if (usbtest1.bDay>28)
130 3 {
131 4 usbtest1.bDay = 1;
132 4 usbtest1.bMonth++;
133 4 }
134 3 break;
135 3 }
136 2 if (usbtest1.bMonth > 12)
137 2 {
138 3 usbtest1.bMonth = 1;
139 3 usbtest1.bYear++;
140 3 }
141 2 if (usbtest1.bYear > 99)
142 2 usbtest1.bYear = 0;
143 2 }
144 1 }
145
146 void display_err(u8 bErr)
147 {
148 1 g_pCmd->wTag = USBCMD_BEGIN;
149 1 g_pCmd->bCmd = USBCMD_ERROR;
150 1 g_pCmd->bLen = 1;
151 1
152 1 *(g_pData) = bErr;
153 1 D12_WriteEndpointBuffer(D12_EP2IN, Ep2Buf, 64);
154 1 }
155
156 void _set_reg()
157 {
158 1 //check the test no
159 1 if (bTestNo != 1)
160 1 {
161 2 display_err(USBERR_WRONGTEST);
162 2 return;
163 2 }
164 1
165 1 memcpy(&usbtest1, g_pData, 8);
166 1 usbtest1.wRecvCount += 8;
167 1
168 1 bNeedRefresh = true;
169 1 }
170
171 void _get_reg()
172 {
173 1 g_pCmd->wTag = USBCMD_BEGIN;
174 1 g_pCmd->bCmd = USBCMD_GETREG;
175 1 g_pCmd->bLen = 8;
176 1 memcpy(g_pData, &usbtest1, 8);
177 1 usbtest1.wSendCount += 8;
178 1
179 1 D12_WriteEndpointBuffer(D12_EP2IN, Ep2Buf, 64);
C51 COMPILER V7.01 USBTEST 06/30/2007 11:42:51 PAGE 4
180 1
181 1 // bNeedRefresh = true;
182 1 }
183
184 void _connect_mmc()
185 {
186 1 u8 i;
187 1
188 1 //check the test no
189 1 if (bTestNo != 2)
190 1 {
191 2 display_err(USBERR_WRONGTEST);
192 2 return;
193 2 }
194 1
195 1 //open root
196 1 CurF.firstcluster=0; //首先打开根目录(firstcluster=0判断为根目录)
197 1 CurF.attribute=0; //首先打开根目录(firstcluster=0判断为根目录)
198 1 OpenDir(&CurF);
199 1
200 1 //send file struct to pc
201 1 g_pCmd->wTag = USBCMD_BEGIN;
202 1 g_pCmd->bCmd = USBCMD_CONNECTMMC;
203 1 g_pCmd->bLen = sizeof(FILESTRUCT);
204 1 for (i=0;i<Found;i++)
205 1 {
206 2 memcpy(g_pData, &File[i], sizeof(FILESTRUCT));
207 2 D12_WriteEndpointBuffer(D12_EP2IN, Ep2Buf, 64);
208 2 }
209 1 }
210
211 void _change_dir()
212 {
213 1 u8 i;
214 1 //check the test no
215 1 if (bTestNo != 2)
216 1 {
217 2 display_err(USBERR_WRONGTEST);
218 2 return;
219 2 }
220 1
221 1 if (g_pCmd->bCmd == USBCMD_CHANGEDIR)
222 1 OpenDir(&File[*g_pData]);
223 1 else if (g_pCmd->bCmd == USBCMD_REFRESH)
224 1 OpenDir(&CurF);
225 1
226 1 //send file struct to pc
227 1 g_pCmd->wTag = USBCMD_BEGIN;
228 1 g_pCmd->bCmd = USBCMD_CHANGEDIR;
229 1 g_pCmd->bLen = sizeof(FILESTRUCT);
230 1 for (i=0;i<Found;i++)
231 1 {
232 2 memcpy(g_pData, &File[i], sizeof(FILESTRUCT));
233 2 D12_WriteEndpointBuffer(D12_EP2IN, Ep2Buf, 64);
234 2 }
235 1 }
236
237 void _read_file()
238 {
239 1 u32 u32Offset = 0;
240 1 u8 u8FileNo = *g_pData;
241 1 //check the test no
C51 COMPILER V7.01 USBTEST 06/30/2007 11:42:51 PAGE 5
242 1 if (bTestNo != 2)
243 1 {
244 2 display_err(USBERR_WRONGTEST);
245 2 return;
246 2 }
247 1
248 1 g_pCmd->wTag = USBCMD_BEGIN;
249 1 g_pCmd->bCmd = USBCMD_READFILE;
250 1 ///////////////////////
251 1 //read file & SEND data to pc
252 1 while (u32Offset<File[u8FileNo].size)
253 1 {
254 2 if (File[u8FileNo].size-u32Offset > EP2_PACKET_SIZE-sizeof(CMD_HEADER))
255 2 {
256 3 mmc_fread(g_pData, EP2_PACKET_SIZE-sizeof(CMD_HEADER));
257 3 g_pCmd->bLen = EP2_PACKET_SIZE-sizeof(CMD_HEADER);
258 3 }
259 2 else
260 2 {
261 3 mmc_fread(g_pData, File[u8FileNo].size-u32Offset);
262 3 g_pCmd->bLen = File[u8FileNo].size-u32Offset;
263 3 }
264 2 u32Offset += g_pCmd->bLen;
265 2 D12_WriteEndpointBuffer(D12_EP2IN, Ep2Buf, 64);
266 2 }
267 1 //////////////////////////////
268 1
269 1 //file read over
270 1 g_pCmd->bCmd = USBCMD_READOVER;
271 1 g_pCmd->bLen = 0;
272 1 D12_WriteEndpointBuffer(D12_EP2IN, Ep2Buf, 64);
273 1 }
274
275 void _write_file()
276 {
277 1 u8 u8FileNo = *g_pData;
278 1 //check the test no
279 1 if (bTestNo != 2)
280 1 {
281 2 display_err(USBERR_WRONGTEST);
282 2 return;
283 2 }
284 1
285 1 mmc_fwrite(g_pData, g_pCmd->bLen);
286 1
287 1 //data write over
288 1 g_pCmd->wTag = USBCMD_BEGIN;
289 1 g_pCmd->bCmd = USBCMD_WRITEOVER;
290 1 g_pCmd->bLen = 0;//64-sizeof(CMD_HEADER);
291 1 // memset(pData, 'y', g_pCmd->bLen);
292 1 D12_WriteEndpointBuffer(D12_EP2IN, Ep2Buf, 64);
293 1
294 1 }
295
296 void _delete_file()
297 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -