⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainloop.lst

📁 PDIUSBD12 USB1.1 C51源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
 300   4      					printf(" ControlData.wCount = %x.\n", ControlData.wCount);
 301   4      					printf("Endpoint 4 (Bulk Out) Status = %bx, Endpoint 5 (Bulk In) Status = %bx.\n",
 302   4      					   D12_ReadEndpointStatus(4), D12_ReadEndpointStatus(5));
 303   4      					if(bEPPflags.bits.dma_state == DMA_IDLE)
 304   4      						printf("DMA_State = DMA_IDLE.\n");
 305   4      					else if(bEPPflags.bits.dma_state == DMA_RUNNING)
 306   4      						printf("DMA_State = DMA_RUNNING.\n");
 307   4      					else if(bEPPflags.bits.dma_state == DMA_PENDING)
 308   4      						printf("DMA_State = DMA_PENDING.\n");
 309   4      
 310   4      					printf("Last Device Request: bmRequestType = 0x%bx, bRequest= 0x%bx, wValue = 0x%x, wLength = 0x%x, w
             -Index = 0x%x.\n",
 311   4      
 312   4      						ControlData.DeviceRequest.bmRequestType,
 313   4      						ControlData.DeviceRequest.bRequest,
 314   4      						ControlData.DeviceRequest.wValue,
 315   4      						ControlData.DeviceRequest.wLength,
 316   4      						ControlData.DeviceRequest.wIndex);
 317   4      
 318   4      					printf("Data: ");
 319   4      					for(i = 0; i < ControlData.DeviceRequest.wLength; i ++)
 320   4      						printf("0x%bx, ", *((ControlData.dataBuffer)+i));
 321   4      					printf("\n");
 322   4      
C51 COMPILER V4.01,  MAINLOOP                                                              07/07/01  13:16:07  PAGE 6   

 323   4      					break;
 324   4      				case '\r':
 325   4      					reconnect_USB();
 326   4      					break;
 327   4      
 328   4      				case 'v':
 329   4      					if(bEPPflags.bits.verbose == 0) {
 330   5      						printf("Verbose Mode = ON.\n");
 331   5      						DISABLE;
 332   5      						bEPPflags.bits.verbose = 1;
 333   5      						ENABLE;
 334   5      					}
 335   4      					else {
 336   5      						printf("Verbose Mode = OFF.\n");
 337   5      						DISABLE;
 338   5      						bEPPflags.bits.verbose = 0;
 339   5      						ENABLE;
 340   5      					}
 341   4      					break;
 342   4      				default:
 343   4      					break;
 344   4      			}
 345   3      		}
 346   2      
 347   2      
 348   2      		if (bEPPflags.bits.bus_reset) {
 349   3      			DISABLE;
 350   3      			bEPPflags.bits.bus_reset = 0;
 351   3      			ENABLE;
 352   3      			// Release D12's SUSPEND pin after bus reset
 353   3      			// Enable 74HCT123 pulse generation before disconnect
 354   3      			D12SUSPD = 1;
 355   3      		} // if bus reset
 356   2      
 357   2                      if (bEPPflags.bits.suspend) {   // suspend interrups status bit set
 358   3      			DISABLE;
 359   3      			bEPPflags.bits.suspend= 0;
 360   3      			ENABLE;
 361   3      
 362   3                              if(D12SUSPD == 1) {  //  In suspend state
 363   4                                      D12SUSPD = 0;
 364   4                                      MCU_D12CS= 0;
 365   4      
 366   4                                      D12_SetDMA(Wakeup_Flag_From_Suspend); // set flag
 367   4      
 368   4      				P0 = 0xFF;
 369   4      				P1 = 0xFF;
 370   4      				P2 = 0xFF;
 371   4      				P3 = 0xFF;
 372   4      
 373   4                                      PCON |= 0x02; //Powerdown bit set
 374   4      				while (1);
 375   4      			}
 376   3      		} // if suspend change
 377   2      
 378   2      		if (bEPPflags.bits.setup_packet){
 379   3      			DISABLE;
 380   3      			bEPPflags.bits.setup_packet = 0;
 381   3      			ENABLE;
 382   3      			control_handler();
 383   3      			D12SUSPD = 1;
 384   3      		} // if setup_packet
 385   2      
 386   2      		if(bEPPflags.bits.setup_dma != 0) {
 387   3      			DISABLE;
 388   3      			bEPPflags.bits.setup_dma --;
C51 COMPILER V4.01,  MAINLOOP                                                              07/07/01  13:16:07  PAGE 7   

 389   3      			ENABLE;
 390   3      			setup_dma();
 391   3      		} // if setup_dma
 392   2      
 393   2      	} // Main Loop
 394   1      
 395   1      	on_exit();
 396   1      }
 397          
 398          void stall_ep0(void)
 399          {
 400   1      	D12_SetEndpointStatus(0, 1);
 401   1      	D12_SetEndpointStatus(1, 1);
 402   1      }
 403          
 404          void disconnect_USB(void)
 405          {
 406   1      	// Initialize D12 configuration
 407   1      	D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
 408   1      }
 409          
 410          void connect_USB(void)
 411          {
 412   1      	// reset event flags
 413   1      	DISABLE;
 414   1      	bEPPflags.value = 0;
 415   1      	ENABLE;
 416   1      
 417   1      	// V2.1 enable normal+sof interrupt
 418   1      	D12_SetDMA(D12_ENDP4INTENABLE | D12_ENDP5INTENABLE);
 419   1      
 420   1      	// Initialize D12 configuration
 421   1      	D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);
 422   1      }
 423          
 424          
 425          void reconnect_USB(void)
 426          {
 427   1      
 428   1      	MCU_LED0 = 0;
 429   1      	MCU_LED1 = 0;
 430   1      
 431   1      	// Pull-down D12's SUSPEND pin
 432   1      	// Disable 74HCT123 pulse generation before disconnect
 433   1      	// Release D12's SUSPEND pin after receiving bus reset from host
 434   1      	D12SUSPD = 0;
 435   1      	disconnect_USB();
 436   1      
 437   1      	printf("Wait for 1 second ...\n");
 438   1      
 439   1      	clk_cnt = ClockTicks;
 440   1      	while(ClockTicks < clk_cnt + 20)
 441   1      		;
 442   1      
 443   1      	connect_USB();
 444   1      
 445   1      	MCU_LED0 = 1;
 446   1      	MCU_LED1 = 1;
 447   1      }
 448          
 449          void init_unconfig(void)
 450          {
 451   1      	unsigned char i;
 452   1      
 453   1      	D12_SetEndpointEnable(0);	/* Disable all endpoints but EPP0. */
 454   1      }
C51 COMPILER V4.01,  MAINLOOP                                                              07/07/01  13:16:07  PAGE 8   

 455          
 456          void init_config(void)
 457          {
 458   1      	D12_SetEndpointEnable(1);	/* Enable  generic/iso endpoints. */
 459   1      }
 460          
 461          void single_transmit(unsigned char * buf, unsigned char len)
 462          {
 463   1      	if( len <= EP0_PACKET_SIZE) {
 464   2      		D12_WriteEndpoint(1, len, buf);
 465   2      	}
 466   1      }
 467          
 468          void code_transmit(unsigned char code * pRomData, unsigned short len)
 469          {
 470   1      	ControlData.wCount = 0;
 471   1      	if(ControlData.wLength > len)
 472   1      		ControlData.wLength = len;
 473   1      
 474   1      	ControlData.pData = pRomData;
 475   1      	if( ControlData.wLength >= EP0_PACKET_SIZE) {
 476   2      		D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData);
 477   2      		ControlData.wCount += EP0_PACKET_SIZE;
 478   2      
 479   2      		DISABLE;
 480   2      		bEPPflags.bits.control_state = USB_TRANSMIT;
 481   2      		ENABLE;
 482   2      	}
 483   1      	else {
 484   2      		D12_WriteEndpoint(1, ControlData.wLength, pRomData);
 485   2      		ControlData.wCount += ControlData.wLength;
 486   2      		DISABLE;
 487   2      		bEPPflags.bits.control_state = USB_IDLE;
 488   2      		ENABLE;
 489   2      	}
 490   1      }
 491          
 492          void check_key_LED(void)
 493          {
 494   1      	static unsigned char c, last_key = 0xf;
 495   1      
 496   1      	c = MCU_SWM0 & MCU_SWM1;
 497   1      	c &= 0x0f;
 498   1      	if (c != last_key) {
 499   2      		D12_WriteEndpoint(3, 1, &c);
 500   2      	}
 501   1      
 502   1      	last_key = c;
 503   1      
 504   1      	if(bEPPflags.bits.ep1_rxdone) {
 505   2      		DISABLE;
 506   2      		bEPPflags.bits.ep1_rxdone = 0;
 507   2      		ENABLE;
 508   2      		MCU_LED0 = !(GenEpBuf[3] & 0x1);
 509   2      		MCU_LED1 = !(GenEpBuf[3] & 0x2);
 510   2      	}
 511   1      }
 512          
 513          void setup_dma()
 514          {
 515   1      	ioSize = ioRequest.uSize;
 516   1      	ioCount = 0;
 517   1      
 518   1      	DISABLE;
 519   1      	bEPPflags.bits.dma_state = DMA_RUNNING;
 520   1      	ENABLE;
C51 COMPILER V4.01,  MAINLOOP                                                              07/07/01  13:16:07  PAGE 9   

 521   1      
 522   1      	single_transmit(0, 0);
 523   1      
 524   1      	if(ioRequest.bCommand & 0x1) {
 525   2      		if(ioSize > 64 || ioSize == 0) {
 526   3      			if(bNoRAM)
 527   3      				D12_WriteEndpoint(5, 64, EpBuf);
 528   3      			else
 529   3      				D12_WriteEndpoint(5, 64, MainEpBuf);
 530   3      			ioCount += 64;
 531   3      		}
 532   2      		else {
 533   3      			if(bNoRAM)
 534   3      				D12_WriteEndpoint(5, ioSize, EpBuf);
 535   3      			else
 536   3      				D12_WriteEndpoint(5, ioSize, MainEpBuf);
 537   3      			ioCount += ioSize;
 538   3      		}
 539   2      	}
 540   1      }
 541          
 542          
 543          void control_handler()
 544          {
 545   1      	unsigned char type, req;
 546   1      
 547   1      	type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK;
 548   1      	req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK;
 549   1      
 550   1      	help_devreq(type, req); // print out device request
 551   1      
 552   1      	if (type == USB_STANDARD_REQUEST)
 553   1      		(*StandardDeviceRequest[req])();
 554   1      	else if (type == USB_VENDOR_REQUEST)
 555   1      		(*VendorDeviceRequest[req])();
 556   1      	else
 557   1      		stall_ep0();
 558   1      }
C51 COMPILER V4.01,  MAINLOOP                                                              07/07/01  13:16:07  PAGE 10  

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION _help_devreq (BEGIN)
;---- Variable 'typ' assigned to Register 'R7' ----
;---- Variable 'req' assigned to Register 'R5' ----
                                           ; SOURCE LINE # 139
                                           ; SOURCE LINE # 140
                                           ; SOURCE LINE # 141
0000 EF            MOV     A,R7
0001 C4            SWAP    A
0002 13            RRC     A
0003 5407          ANL     A,#07H
0005 FF            MOV     R7,A
                                           ; SOURCE LINE # 143
0006 6031          JZ      ?C0004
                                           ; SOURCE LINE # 144
0008         ?C0001:
                                           ; SOURCE LINE # 145
                                           ; SOURCE LINE # 146
0008 AE00    E     MOV     R6,bEPPflags+01H
000A EE            MOV     A,R6
000B C3            CLR     C
000C 13            RRC     A
000D 30E029        JNB     ACC.0,?C0004
                                           ; SOURCE LINE # 147
0010 EF            MOV     A,R7
0011 75F003        MOV     B,#03H
0014 A4            MUL     AB
0015 2400    R     ADD     A,#LOW _NAME_USB_REQUEST_TYPE
0017 F582          MOV     DPL,A
0019 E4            CLR     A
001A 3400    R     ADDC    A,#HIGH _NAME_USB_REQUEST_TYPE
001C F583          MOV     DPH,A
001E E4            CLR     A
001F 93            MOVC    A,@A+DPTR
0020 FB            MOV     R3,A
0021 7401          MOV     A,#01H
0023 93            MOVC    A,@A+DPTR
0024 FA            MOV     R2,A
0025 7402          MOV     A,#02H
0027 93            MOVC    A,@A+DPTR
0028 8B00    E     MOV     ?_printf?BYTE+03H,R3
002A 8A00    E     MOV     ?_printf?BYTE+04H,R2
002C F500    E     MOV     ?_printf?BYTE+05H,A
002E 8D00    E     MOV     ?_printf?BYTE+06H,R5

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -