📄 mainloop.lst
字号:
217 1 }
218
219
220 void DeviceRequest_Handler(void)
221 {
222 1 UCHAR type, req;
223 1
224 1 type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK;
225 1 req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK;
226 1
227 1 if (bD13flags.bits.verbose==1)
228 1 printf("type = 0x%02x, req = 0x%02x\n", type, req);
229 1
230 1 help_devreq(type, req); /* print out device request */
231 1
232 1 if ((type == USB_STANDARD_REQUEST) && (req < MAX_STANDARD_REQUEST))
233 1 {
234 2 (*StandardDeviceRequest[req])();
235 2 }
236 1 else if ((type == USB_CLASS_REQUEST) && (req < MAX_CLASS_REQUEST))
237 1 (*ClassDeviceRequest[req])();
238 1 else if ((type == USB_VENDOR_REQUEST) && (req < MAX_VENDOR_REQUEST))
239 1 (*VendorDeviceRequest[req])();
C51 COMPILER V7.06 MAINLOOP 08/18/2005 15:30:30 PAGE 5
240 1 else{
241 2 Chap9_StallEP0();
242 2 }
243 1 }
244
245 void help_devreq(UCHAR type, UCHAR req)
246 {
247 1 UCHAR typ = type;
248 1 typ >>= 5;
249 1
250 1 if(type == USB_STANDARD_REQUEST)
251 1 {
252 2 printf("Request Type = %s, Request = %s.\n", _NAME_USB_REQUEST_TYPE[typ],
253 2 _NAME_USB_STANDARD_REQUEST[req]);
254 2 }
255 1 else if(type == USB_CLASS_REQUEST)
256 1 {
257 2 printf("Request Type = %s, Request = %s.\n", _NAME_USB_REQUEST_TYPE[typ],
258 2 _NAME_USB_CLASS_REQUEST[req]);
259 2 }
260 1 else
261 1 {
262 2 if(bD13flags.bits.verbose)
263 2 printf("Request Type = %s, bRequest = 0x%x.\n", _NAME_USB_REQUEST_TYPE[typ],
264 2 req);
265 2 }
266 1 }
267
268 void disconnect_USB(void)
269 {
270 1
271 1 Hal4D13_SetDevConfig(D13REG_DEVCNFG_NOLAZYCLOCK
272 1 |D13REG_DEVCNFG_PWROFF
273 1 |D13REG_DEVCNFG_CLOCKRUNNING
274 1 );
275 1 Hal4D13_SetMode(D13REG_MODE_INT_EN);
276 1
277 1 }
278
279 void connect_USB(void)
280 {
281 1
282 1 // RaiseIRQL();
283 1
284 1 bD13flags.value = 0; /* reset event flags*/
285 1 bD13flags.bits.DCP_state = USBFSM4DCP_IDLE;
286 1 config_endpoint();
287 1
288 1 // LowerIRQL();
289 1
290 1 Hal4D13_SetMode(D13REG_MODE_SOFTCONNECT
291 1 |D13REG_MODE_DMA16
292 1 );
293 1
294 1 }
295
296
297 void config_endpoint(void)
298 {
299 1 /*Control Endpoint*/
300 1 Hal4D13_SetEndpointConfig(D13REG_EPCNFG_FIFO_EN|D13REG_EPCNFG_NONISOSZ_64,EPINDEX4EP0_CONTROL_OUT);
301 1 Hal4D13_SetEndpointConfig(D13REG_EPCNFG_FIFO_EN|D13REG_EPCNFG_IN_EN|D13REG_EPCNFG_NONISOSZ_64,EPINDEX4EP0
C51 COMPILER V7.06 MAINLOOP 08/18/2005 15:30:30 PAGE 6
-_CONTROL_IN);
302 1 /*Control Endpoint*/
303 1
304 1 /*DISABLED*/
305 1 Hal4D13_SetEndpointConfig(/*D13REG_EPCNFG_FIFO_EN|*/D13REG_EPCNFG_NONISOSZ_8,EPINDEX4EP01);
306 1 Hal4D13_SetEndpointConfig(/*D13REG_EPCNFG_FIFO_EN|*/D13REG_EPCNFG_IN_EN|D13REG_EPCNFG_NONISOSZ_8,EPINDEX4
-EP02);
307 1 /*DISABLED*/
308 1
309 1 /*Bulk Enpoints Double Buffered*/
310 1 Hal4D13_SetEndpointConfig(D13REG_EPCNFG_FIFO_EN|D13REG_EPCNFG_DBLBUF_EN|D13REG_EPCNFG_NONISOSZ_64,EPINDEX
-4EP03);
311 1 Hal4D13_SetEndpointConfig(D13REG_EPCNFG_FIFO_EN|D13REG_EPCNFG_DBLBUF_EN|D13REG_EPCNFG_IN_EN|D13REG_EPCNFG
-_NONISOSZ_64,EPINDEX4EP04);
312 1 /*Bulk Enpoints Double Buffered*/
313 1
314 1 /*Isochronous Endpoints*/
315 1 Hal4D13_SetEndpointConfig(D13REG_EPCNFG_FIFO_EN|D13REG_EPCNFG_DBLBUF_EN|D13REG_EPCNFG_ISOSZ_512|D13REG_EP
-CNFG_ISO_EN,EPINDEX4EP05);
316 1 Hal4D13_SetEndpointConfig(D13REG_EPCNFG_FIFO_EN|D13REG_EPCNFG_DBLBUF_EN|D13REG_EPCNFG_ISOSZ_512|D13REG_EP
-CNFG_ISO_EN|D13REG_EPCNFG_IN_EN,EPINDEX4EP06);
317 1 /*Isochronous Endpoints*/
318 1
319 1 /*DISABLED*/
320 1 Hal4D13_SetEndpointConfig(/*D13REG_EPCNFG_FIFO_EN|*/D13REG_EPCNFG_DBLBUF_EN|D13REG_EPCNFG_ISOSZ_16|D13REG
-_EPCNFG_ISO_EN,EPINDEX4EP07);
321 1 Hal4D13_SetEndpointConfig(/*D13REG_EPCNFG_FIFO_EN|*/D13REG_EPCNFG_IN_EN|D13REG_EPCNFG_DBLBUF_EN|D13REG_EP
-CNFG_ISOSZ_16|D13REG_EPCNFG_ISO_EN,EPINDEX4EP08);
322 1 Hal4D13_SetEndpointConfig(/*D13REG_EPCNFG_FIFO_EN|*/D13REG_EPCNFG_DBLBUF_EN|D13REG_EPCNFG_ISOSZ_16|D13REG
-_EPCNFG_ISO_EN,EPINDEX4EP09);
323 1 Hal4D13_SetEndpointConfig(/*D13REG_EPCNFG_FIFO_EN|*/D13REG_EPCNFG_IN_EN|D13REG_EPCNFG_DBLBUF_EN|D13REG_EP
-CNFG_ISOSZ_16|D13REG_EPCNFG_ISO_EN,EPINDEX4EP0A);
324 1 Hal4D13_SetEndpointConfig(/*D13REG_EPCNFG_FIFO_EN|*/D13REG_EPCNFG_DBLBUF_EN|D13REG_EPCNFG_ISOSZ_64|D13REG
-_EPCNFG_ISO_EN,EPINDEX4EP0B);
325 1 Hal4D13_SetEndpointConfig(/*D13REG_EPCNFG_FIFO_EN|*/D13REG_EPCNFG_IN_EN|D13REG_EPCNFG_DBLBUF_EN|D13REG_EP
-CNFG_ISOSZ_64|D13REG_EPCNFG_ISO_EN,EPINDEX4EP0C);
326 1 Hal4D13_SetEndpointConfig(/*D13REG_EPCNFG_FIFO_EN|*/D13REG_EPCNFG_DBLBUF_EN|D13REG_EPCNFG_ISOSZ_64|D13REG
-_EPCNFG_ISO_EN,EPINDEX4EP0D);
327 1 Hal4D13_SetEndpointConfig(/*D13REG_EPCNFG_FIFO_EN|*/D13REG_EPCNFG_IN_EN|D13REG_EPCNFG_DBLBUF_EN|D13REG_EP
-CNFG_ISOSZ_64|D13REG_EPCNFG_ISO_EN,EPINDEX4EP0E);
328 1 /*DISABLED*/
329 1
330 1
331 1 /*Set interrupt configuration*/
332 1 Hal4D13_SetIntEnable(D13REG_INTSRC_EP0OUT
333 1 |D13REG_INTSRC_EP0IN
334 1 |D13REG_INTSRC_EP03
335 1 |D13REG_INTSRC_EP04
336 1 |D13REG_INTSRC_EP05
337 1 |D13REG_INTSRC_EP06
338 1 |D13REG_INTSRC_SUSPEND
339 1 |D13REG_INTSRC_RESUME
340 1 |D13REG_INTSRC_BUSRESET
341 1 );
342 1
343 1 /*Set Hardware Configuration*/
344 1 Hal4D13_SetDevConfig(D13REG_DEVCNFG_NOLAZYCLOCK
345 1 |D13REG_DEVCNFG_CLOCKDIV_120M
346 1 |D13REG_DEVCNFG_DMARQPOL
347 1 // |D13REG_DEVCNFG_EXPULLUP
348 1 );
349 1
C51 COMPILER V7.06 MAINLOOP 08/18/2005 15:30:30 PAGE 7
350 1 }
351
352 void reconnect_USB(void)
353 {
354 1 disconnect_USB();
355 1 connect_USB();
356 1 }
357
358
359
360 void suspend_change(void)
361 {
362 1 printf("SUSPEND CHANGE\n");
363 1 // Suspend_Device_Controller();
364 1 }
365
366 void ML_AcknowledgeSETUP(void)
367 {
368 1
369 1 if( Hal4D13_IsSetupPktInvalid() || ControlData.Abort)
370 1 {
371 2 return;
372 2 }
373 1
374 1 Hal4D13_AcknowledgeSETUP();
375 1 Hal4D13_ClearBuffer(EPINDEX4EP0_CONTROL_OUT);
376 1 }
377
378
379
380 void ML_Reserved(void)
381 {
382 1 Hal4D13_ClearBuffer(EPINDEX4EP0_CONTROL_OUT);
383 1 }
384
385
386
387 unsigned short CHECK_CHIP_ID(void)
388 {
389 1 unsigned short CHIP_ID;
390 1 unsigned char LOW_ID, HIGH_ID;
391 1
392 1 CHIP_ID= Hal4D13_ReadChipID();
393 1 LOW_ID = (unsigned char)CHIP_ID;
394 1 HIGH_ID = (unsigned char)(CHIP_ID >> 8) ;
395 1
396 1 switch(HIGH_ID)
397 1 {
398 2 case 0x61 : {
399 3
400 3 printf(" CHIP ID =0x%04x\n\n",CHIP_ID);
401 3 CHIP_ID =0x1161;
402 3 return CHIP_ID;
403 3 break;
404 3 }
405 2
406 2 case 0x36 : {
407 3 printf(" CHIP ID =0x%04x\n\n",CHIP_ID);
408 3 CHIP_ID = 0x1362;
409 3 return CHIP_ID;
410 3 break;
411 3 }
C51 COMPILER V7.06 MAINLOOP 08/18/2005 15:30:30 PAGE 8
412 2
413 2 default : {
414 3 printf(" UNKNOWN CHIP ID =0x%04x\n\n",CHIP_ID);
415 3 return CHIP_ID;
416 3 break;
417 3 }
418 2
419 2
420 2 }
421 1
422 1
423 1 }
C51 COMPILATION COMPLETE. 0 WARNING(S), 1 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -