📄 main.lst
字号:
237 3 LowerIRQL();
C51 COMPILER V7.06 MAIN 09/09/2005 13:57:30 PAGE 5
238 3 } /* if setup_packet for DeviceRequest*/
239 2 if (bZBoardFlags.bits.setup_dma == 1 && (bZBoardFlags.bits.dma_state == DMA_IDLE))
240 2 {
241 3 RaiseIRQL();
242 3 bZBoardFlags.bits.setup_dma = 0;
243 3 // UARTSEND(0X55);
244 3 // setup_dma(); //7.25
245 3 LowerIRQL();
246 3 } // if setup_dma
247 2 if (bZBoardFlags.bits.DCP_state == USBFSM4DCP_CONTROLOUTDONE)
248 2 {
249 3 Chap9_ControlWriteHandshake();
250 3 }
251 2
252 2 if (bZBoardFlags.bits.ISO_CONFIG)
253 2 {
254 3 bZBoardFlags.bits.ISO_CONFIG = 0;
255 3 // ISO_CONFIG();
256 3 }
257 2
258 2 } // Main Loop
259 1
260 1 }
261
262
263 /////////////////////////////////////////////////
264
265 void ISP1581_Initiate(void)
266 {
267 1 //adress reg: 0x00
268 1 ISP1581_SetAddressEnable(0x0, 0x01); // set address to 0 and enable it.
269 1 ISP1581_SetTestMode(0); // clear test mode
270 1
271 1 ISP1581_SetMode(/* mode_clkaon*/mode_glintena|mode_softct);
272 1 // |mode_wkupcs
273 1 // |mode_pwroff
274 1 // |mode_softct
275 1 // |mode_clkaon
276 1 // );
277 1 ISP1581_SetIntConfig(0x0
278 1 |intcfg_cdbgmod_as // control interrupt on ack and stall
279 1 |intcfg_ddbgmodin_a // IN data interrupt on ack only
280 1 |intcfg_ddbgmodout_asy // OUT data on ack and stall and nyet intertupt
281 1 //|intcfg_polh); // level interrupt and active high
282 1 // |intcfg_edgetrig
283 1 );
284 1 ISP1581_SetIntEnableLow(int_busreset|int_susp|int_resume
285 1 |int_hs_stat|int_dma|int_ep0set
286 1 |int_ep0rx|int_ep0tx
287 1 |int_ep1rx|int_ep1tx
288 1 |int_ep2rx|int_ep2tx);
289 1 ISP1581_SetIntEnableHigh(int_ep3rx|int_ep3tx
290 1 |int_ep4rx|int_ep4tx
291 1 |int_ep5rx|int_ep5tx
292 1 |int_ep6rx|int_ep6tx
293 1 |int_ep7rx|int_ep7tx);
294 1 ISP1581_ConfigEndpoint(); // default config as a full speed device
295 1 //-------------xxg-----------------
296 1 // dma config: 0x38
297 1 ISP1581_SetDMAConfig(dmacfg_width16|dmacfg_modediorw/*|dmacfg_modediorack*/|dmacfg_burst0);
298 1 // dma hardware:0x3c
299 1 ISP1581_SetDMAHDCfg(dmahd_dreqpolh/*|dmahd_dackpolh*/|dmahd_eotpolh/*|dmahd_readpolh|dmahd_writepolh*/);
C51 COMPILER V7.06 MAIN 09/09/2005 13:57:30 PAGE 6
300 1
301 1 }
302
303
304 void ISP1581_ConfigEndpoint(void)
305 {
306 1
307 1 // disable all endpoint firsr;
308 1 ISP1581_SetEndpointConfig(EPINDEX4EP01OUT, 0);
309 1 ISP1581_SetEndpointConfig(EPINDEX4EP01IN, 0);
310 1 ISP1581_SetEndpointConfig(EPINDEX4EP02OUT, 0);
311 1 ISP1581_SetEndpointConfig(EPINDEX4EP02IN, 0);
312 1 ISP1581_SetEndpointConfig(EPINDEX4EP03OUT, 0);
313 1 ISP1581_SetEndpointConfig(EPINDEX4EP03IN, 0);
314 1 ISP1581_SetEndpointConfig(EPINDEX4EP04OUT, 0);
315 1 ISP1581_SetEndpointConfig(EPINDEX4EP04IN, 0);
316 1 ISP1581_SetEndpointConfig(EPINDEX4EP05OUT, 0);
317 1 ISP1581_SetEndpointConfig(EPINDEX4EP05IN, 0);
318 1 ISP1581_SetEndpointConfig(EPINDEX4EP06OUT, 0);
319 1 ISP1581_SetEndpointConfig(EPINDEX4EP06IN, 0);
320 1 ISP1581_SetEndpointConfig(EPINDEX4EP07OUT, 0);
321 1 ISP1581_SetEndpointConfig(EPINDEX4EP07IN, 0);
322 1
323 1 switch(bZBoardFlags.bits.ConnectSpeed)
324 1 {
325 2 case FullSpeed:
326 2 {
327 3 ISP1581_SetEPMAXSize(EPINDEX4EP01OUT, EP1_PACKET_SIZE);
328 3 ISP1581_SetEPMAXSize(EPINDEX4EP01IN, EP1_PACKET_SIZE);
329 3 globe_variable.maxepsize_bulk = maxepsize_FS;
330 3 ISP1581_SetEPMAXSize(EPINDEX4EP02OUT, globe_variable.maxepsize_bulk);
331 3 ISP1581_SetEPMAXSize(EPINDEX4EP02IN, globe_variable.maxepsize_bulk);
332 3 //ISP1581_SetEPMAXSize(EPINDEX4EP03OUT, maxepsize_256);
333 3 //ISP1581_SetEPMAXSize(EPINDEX4EP03IN, maxepsize_256);
334 3 ISP1581_SetEPMAXSize(EPINDEX4EP04OUT, maxepsize_16);
335 3 ISP1581_SetEPMAXSize(EPINDEX4EP04IN, maxepsize_16);
336 3 break;
337 3 }
338 2 case HighSpeed:
339 2 {
340 3 ISP1581_SetEPMAXSize(EPINDEX4EP01OUT, maxepsize_512);
341 3 ISP1581_SetEPMAXSize(EPINDEX4EP01IN, maxepsize_512);
342 3 globe_variable.maxepsize_bulk = maxepsize_HS;
343 3 ISP1581_SetEPMAXSize(EPINDEX4EP02OUT, globe_variable.maxepsize_bulk);
344 3 ISP1581_SetEPMAXSize(EPINDEX4EP02IN, globe_variable.maxepsize_bulk);
345 3 //ISP1581_SetEPMAXSize(EPINDEX4EP03OUT, maxepsize_256);
346 3 //ISP1581_SetEPMAXSize(EPINDEX4EP03IN, maxepsize_256);
347 3 ISP1581_SetEPMAXSize(EPINDEX4EP04OUT, maxepsize_512);
348 3 ISP1581_SetEPMAXSize(EPINDEX4EP04IN, maxepsize_16);
349 3 break;
350 3 }
351 2 default:
352 2 {
353 3 globe_variable.maxepsize_bulk = maxepsize_FS;
354 3 break;
355 3 }
356 2 }
357 1
358 1 ISP1581_SetEPMAXSize(EPINDEX4EP03OUT, maxepsize_0);
359 1 ISP1581_SetEPMAXSize(EPINDEX4EP03IN, maxepsize_0);
360 1 ISP1581_SetEPMAXSize(EPINDEX4EP05OUT, maxepsize_0);
361 1 ISP1581_SetEPMAXSize(EPINDEX4EP05IN, maxepsize_0);
C51 COMPILER V7.06 MAIN 09/09/2005 13:57:30 PAGE 7
362 1 ISP1581_SetEPMAXSize(EPINDEX4EP06OUT, maxepsize_0);
363 1 ISP1581_SetEPMAXSize(EPINDEX4EP06IN, maxepsize_0);
364 1 ISP1581_SetEPMAXSize(EPINDEX4EP07OUT, maxepsize_0);
365 1 ISP1581_SetEPMAXSize(EPINDEX4EP07IN, maxepsize_0);
366 1
367 1 ISP1581_SetEndpointConfig(EPINDEX4EP01OUT, eptype_bulk|eptype_enable);
368 1 ISP1581_SetEndpointConfig(EPINDEX4EP01IN, eptype_bulk|eptype_enable);//|eptype_doublebuf);//|eptype_noemp
-kt);
369 1 ISP1581_SetEndpointConfig(EPINDEX4EP02OUT, eptype_bulk|eptype_enable|eptype_doublebuf);
370 1 ISP1581_SetEndpointConfig(EPINDEX4EP02IN, eptype_bulk|eptype_enable|eptype_doublebuf|eptype_noempkt);
371 1 ISP1581_SetEndpointConfig(EPINDEX4EP03OUT, 0);
372 1 ISP1581_SetEndpointConfig(EPINDEX4EP03IN, 0);
373 1 ISP1581_SetEndpointConfig(EPINDEX4EP04OUT, eptype_bulk|eptype_enable);
374 1 ISP1581_SetEndpointConfig(EPINDEX4EP04IN, eptype_int|eptype_enable);
375 1 ISP1581_SetEndpointConfig(EPINDEX4EP05OUT, 0);
376 1 ISP1581_SetEndpointConfig(EPINDEX4EP05IN, 0);
377 1 ISP1581_SetEndpointConfig(EPINDEX4EP06OUT, 0);
378 1 ISP1581_SetEndpointConfig(EPINDEX4EP06IN, 0);
379 1 ISP1581_SetEndpointConfig(EPINDEX4EP07OUT, 0);
380 1 ISP1581_SetEndpointConfig(EPINDEX4EP07IN, 0);
381 1 ISP1581_ClearBuffer(EPINDEX4EP01OUT);
382 1 ISP1581_ClearBuffer(EPINDEX4EP01IN);
383 1 ISP1581_ClearBuffer(EPINDEX4EP02OUT);
384 1 ISP1581_ClearBuffer(EPINDEX4EP02IN);
385 1 ISP1581_ClearBuffer(EPINDEX4EP03OUT);
386 1 ISP1581_ClearBuffer(EPINDEX4EP03IN);
387 1 ISP1581_ClearBuffer(EPINDEX4EP04OUT);
388 1 ISP1581_ClearBuffer(EPINDEX4EP04IN);
389 1
390 1 }
391
392 void Isr_BusReset(void)
393 {
394 1 bZBoardFlags.bits.DCP_state = USBFSM4DCP_IDLE;
395 1 bZBoardFlags.bits.dma_state = DMA_IDLE;
396 1 ioRequest.bAddressH = 0;
397 1 ioRequest.uAddressL = 0;
398 1 ioRequest.uSize = 0;
399 1 globe_variable.ioINSize = 0;
400 1 globe_variable.ioINCount = 0;
401 1 globe_variable.ioOUTSize = 0;
402 1 globe_variable.ioOUTCount = 0;
403 1 bZBoardFlags.bits.CONTROL_HANDLE_DONE = 0;
404 1 bZBoardFlags.bits.ISO_CONFIG = 0;
405 1 ISP1581_SetDMAInt(0xffff);//c);
406 1 ISP1581_IntClearl(0xffff);
407 1 ISP1581_IntClearh(0xffff);
408 1 ISP1581_Initiate();
409 1 }
410
411 void Device_Initiate(void)
412 {
413 1 unsigned long clk_cnt;
414 1
415 1 MCU_LED0 = 0;
416 1 MCU_LED1 = 0;
417 1
418 1 disconnect_USB();
419 1
420 1 ENABLE_INTERRUPTS;
421 1 clk_cnt = lClockTicks;
422 1 while(lClockTicks < clk_cnt + 20);
C51 COMPILER V7.06 MAIN 09/09/2005 13:57:30 PAGE 8
423 1 DISABLE_INTERRUPTS;
424 1
425 1 bZBoardFlags.bits.DCP_state = USBFSM4DCP_IDLE;
426 1 bZBoardFlags.bits.ConnectSpeed = FullSpeed;
427 1 bZBoardFlags.bits.dma_state = DMA_IDLE;
428 1 bZBoardFlags.bits.CONTROL_HANDLE_DONE = 0;
429 1 bZBoardFlags.bits.ISO_CONFIG = 0;
430 1 ISP1581_SetDMAInt(0xffff);//c);
431 1 ISP1581_IntClearl(0xffff);
432 1 ISP1581_IntClearh(0xffff);
433 1 ioRequest.bAddressH = 0;
434 1 ioRequest.uAddressL = 0;
435 1 ioRequest.uSize = 0;
436 1 globe_variable.ioINSize = 0;
437 1 globe_variable.ioINCount = 0;
438 1 globe_variable.ioOUTSize = 0;
439 1 globe_variable.ioOUTCount = 0;
440 1
441 1 globe_variable.isoINSize = 0;
442 1 globe_variable.isoINCount = 0;
443 1 globe_variable.isoOUTSize = 0;
444 1 globe_variable.isoOUTCount = 0;
445 1
446 1 MCU_LED0 = 1;
447 1 MCU_LED1 = 1;
448 1
449 1 connect_USB();
450 1 return;
451 1 }
452 void disconnect_USB(void)
453 {
454 1 ISP1581_SetTestMode(testmode_forcefs);
455 1 //You may need some delay here if MPU is very fast.
456 1 ISP1581_SetMode(/* mode_clkaon*/mode_glintena);
457 1 // |mode_wkupcs);
458 1 // |mode_softct);
459 1
460 1 }
461 void connect_USB(void)
462 {
463 1 bZBoardFlags.bits.DCP_state = USBFSM4DCP_IDLE;
464 1 ISP1581_Initiate();
465 1 }
466
467
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1000 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 27 6
IDATA SIZE = 6 ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -