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

📄 kmain.lst

📁 飞利浦D12的AT89C52固件
💻 LST
📖 第 1 页 / 共 5 页
字号:
 102   1      	ET0 = 1;     		     /* IE.1*/
 103   1      	TR0 = 1;                     /* TCON.4 start timer  */
 104   1      	PT0 = 1;
 105   1      
 106   1      	//EA = 1;
 107   1      }
 108          
 109          
 110          void init_port()
 111          {
 112   1      	P0 = 0xFF;
 113   1      	P1 = 0xFF;
 114   1      	P2 = 0xFF;
 115   1      	P3 = 0xFF;
 116   1      	MCU_D12CS = 0x0;	//D12 Select
 117   1      	D12SUSPD = 0;		//D12 not in Suspend
 118   1      }
 119          
 120          /*Serial Port */
 121          /*Mode            = 1  /8-bit UART
 122            Serial Port Interrupt    = Disabled         */
 123          /*Receive         = Enabled   */
 124          /*Auto Addressing    = Disabled   */
 125          void init_serial(void)
C51 COMPILER V6.20c  KMAIN                                                                 10/31/2002 21:55:46 PAGE 16  

 126          {
 127   1      	SCON = 0X52;		/* SCON: SM0|SM1|SM2|REN|TB8|RB8|TI|RI		*/
 128   1      	PCON = 0X80 | PCON;	/* PCON: SMOD | - | - | - | GF1|GF0|PD |IDL|    */
 129   1      	TMOD = 0X20;		/* TMOD: GATE|C/T|M1|M0|GATE|C/T|M1|M0 */
 130   1      	TCON = 0x69;    	/* TCON: TF1|TR1|TF0|TR0|IE1|IT1|IE0|IT0 */
 131   1      	TH1 = 0xF3;		/*TH1=0xF3: */
 132   1      }
 133          //----------------------------
 134          /*
 135          void help_devreq(unsigned char typ, unsigned char req)
 136          {
 137          	typ >>= 5;
 138          
 139          	if(typ == USB_STANDARD_REQUEST) {
 140          	}
 141          	else {
 142          		if(bEPPflags.bits.verbose)
 143          			printf("Request Type = %s, bRequest = 0x%bx.\n", _NAME_USB_REQUEST_TYPE[typ],
 144          				req);
 145          	}
 146          }
 147          */
 148          
 149          //=================================================================
 150          void disconnect_USB(void)
 151          {
 152   1      	// Initialize D12 configuration
 153   1      	D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
 154   1      }
 155          
 156          void connect_USB(void)
 157          {
 158   1      	// reset event flags
 159   1      
 160   1      	DISABLE;
 161   1      	bEPPflags.value = 0;
 162   1      	ENABLE;
 163   1      
 164   1      	// V2.1 enable normal+sof interrupt
 165   1      	D12_SetDMA(D12_ENDP4INTENABLE | D12_ENDP5INTENABLE);
 166   1      
 167   1      	// Initialize D12 configuration
 168   1      
 169   1      	//D12_SetMode(D12_NOLAZYCLOCK ,D12_SETTOONE | D12_CLOCK_12M );
 170   1      	D12_SetMode(D12_NOLAZYCLOCK | D12_SOFTCONNECT,D12_SETTOONE | D12_CLOCK_12M );
 171   1      
 172   1      }
 173          
 174          
 175          void reconnect_USB(void)
 176          {
 177   1      	unsigned long clk_cnt;
 178   1      
 179   1      	MCU_LED0 = 0;
 180   1      	MCU_LED1 = 0;
 181   1      
 182   1      	// Pull-down D12's SUSPEND pin
 183   1      	// Disable 74HCT123 pulse generation before disconnect
 184   1      	// Release D12's SUSPEND pin after receiving bus reset from host
 185   1      	D12SUSPD = 0;
 186   1      	disconnect_USB();
 187   1      
C51 COMPILER V6.20c  KMAIN                                                                 10/31/2002 21:55:46 PAGE 17  

 188   1      	//printf("Wait for 1 second ...\n");
 189   1      
 190   1      	clk_cnt = ClockTicks;
 191   1      	while(ClockTicks < clk_cnt + 20)
 192   1      		;
 193   1      
 194   1      	connect_USB();
 195   1      
 196   1      	MCU_LED0 = 1;
 197   1      	MCU_LED1 = 1;
 198   1      
 199   1      }
 200          //------------------------------
 201          void stall_ep0(void)
 202          {
 203   1      	D12_SetEndpointStatus(0, 1);
 204   1      	D12_SetEndpointStatus(1, 1);
 205   1      }
 206          
 207          //---------------
 208          void on_exit(void)
 209          {
 210   1       
 211   1      }
 212          //----------------------------------
 213          void check_key_LED(void)
 214          {
 215   1      	static unsigned char c, last_key = 0xf;
 216   1      
 217   1      	c = MCU_SWM0 & MCU_SWM1;
 218   1      	c &= 0x0f;
 219   1      	if (c != last_key) {
 220   2      		D12_WriteEndpoint(3, 1, &c);
 221   2      	}
 222   1      
 223   1      	last_key = c;
 224   1      
 225   1      	if(bEPPflags.bits.ep1_rxdone) {
 226   2      		DISABLE;
 227   2      		bEPPflags.bits.ep1_rxdone = 0;
 228   2      		ENABLE;
 229   2      		MCU_LED0 = !(GenEpBuf[3] & 0x1);
 230   2      		MCU_LED1 = !(GenEpBuf[3] & 0x2);
 231   2      	}
 232   1      }
 233          //--------------------------
 234          void init_unconfig(void)
 235          {
 236   1      	//unsigned char i;
 237   1      
 238   1      	D12_SetEndpointEnable(0);	/* Disable all endpoints but EPP0. */
 239   1      }
 240          
 241          void init_config(void)
 242          {
 243   1      	D12_SetEndpointEnable(1);	/* Enable  generic/iso endpoints. */
 244   1      }
 245          //--------------------------
 246          
 247          void single_transmit(unsigned char * buf, unsigned char len)
 248          {
 249   1      	if( len <= EP0_PACKET_SIZE) {
C51 COMPILER V6.20c  KMAIN                                                                 10/31/2002 21:55:46 PAGE 18  

 250   2      		D12_WriteEndpoint(1, len, buf);
 251   2      	}
 252   1      }
 253          
 254          void code_transmit(unsigned char code * pRomData, unsigned short len)
 255          {
 256   1      	ControlData.wCount = 0;
 257   1      	if(ControlData.wLength > len)
 258   1      		ControlData.wLength = len;
 259   1      
 260   1      	ControlData.pData = pRomData;
 261   1      	if( ControlData.wLength >= EP0_PACKET_SIZE) {	// 如果发送代码大于包长度
 262   2      		D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData);
 263   2      		ControlData.wCount += EP0_PACKET_SIZE;
 264   2      
 265   2      		DISABLE;
 266   2      		bEPPflags.bits.control_state = USB_TRANSMIT;
 267   2      		ENABLE;
 268   2      	}
 269   1      	else {						//发送代码小于包长度
 270   2      		D12_WriteEndpoint(1, ControlData.wLength, pRomData);
 271   2      		ControlData.wCount += ControlData.wLength;
 272   2      		DISABLE;
 273   2      		bEPPflags.bits.control_state = USB_IDLE;
 274   2      		ENABLE;
 275   2      	}
 276   1      }
 277          
 278          //---------------------------
 279          void setup_dma()
 280          {
 281   1      	ioSize = ioRequest.uSize;
 282   1      	ioCount = 0;
 283   1      
 284   1      	DISABLE;
 285   1      	bEPPflags.bits.dma_state = DMA_RUNNING;
 286   1      	ENABLE;
 287   1      
 288   1      	single_transmit(0, 0);
 289   1      
 290   1      	if(ioRequest.bCommand & 0x1) {
 291   2      		if(ioSize > 64 || ioSize == 0) {
 292   3      			//if(bNoRAM)
 293   3      				D12_WriteEndpoint(5, 64, EpBuf);
 294   3      			//else
 295   3      			//	D12_WriteEndpoint(5, 64, MainEpBuf);
 296   3      			ioCount += 64;
 297   3      		}
 298   2      		else {
 299   3      			//if(bNoRAM)
 300   3      				D12_WriteEndpoint(5, ioSize, EpBuf);
 301   3      			//else
 302   3      			//	D12_WriteEndpoint(5, ioSize, MainEpBuf);
 303   3      			ioCount += ioSize;
 304   3      		}
 305   2      	}
 306   1      }
 307          
 308          //------------------------------
 309          void control_handler()
 310          {
 311   1      	unsigned char type, req;
C51 COMPILER V6.20c  KMAIN                                                                 10/31/2002 21:55:46 PAGE 19  

 312   1      	
 313   1      	type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK;	//0x60
 314   1      	req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK;		//0x0F
 315   1      
 316   1      	//help_devreq(type, req); // print out device request
 317   1      
 318   1      	if (type == USB_STANDARD_REQUEST)
 319   1      		(*StandardDeviceRequest[req])();
 320   1      	else if (type == USB_VENDOR_REQUEST)
 321   1      		(*VendorDeviceRequest[req])();
 322   1      	else
 323   1      		stall_ep0();
 324   1      	
 325   1      }
 326          
 327          
 328          //-------------------------------------------
 329          
 330          //-----------xugy------begin-------------
 331          
 332          //-----------xugy------end---------------
 333          
 334          
 335          //-------------------------------------------
 336          
 337          void main()
 338          {
 339   1      //	unsigned char key, i;
 340   1      	//bNoRam=1;
 341   1      	
 342   1      	init_port();
 343   1      	init_serial();
 344   1      	init_timer0(); 
 345   1      	EA = 1; 
 346   1      	//for test
 347   1      	MCU_LED0=0;
 348   1      	MCU_LED1=0;
 349   1      	MCU_LED0=1;
 350   1      	MCU_LED1=1;
 351   1      	//--------------
 352   1      	printf("Re-connect PDIUSBD12 evaluation board to USB.\n");
 353   1      	IE0=0;
 354   1      	IT0=0;
 355   1      	EX0=1;
 356   1      	//--------------------------
 357   1      //	MCU_D12RST = 0;
 358   1      //	MCU_D12RST = 1;
 359   1      	//--------------------
 360   1      	
 361   1      	MCU_D12CS = 0x1;
 362   1      
 363   1      		bNoRAM = TRUE;
 364   1      
 365   1      	MCU_D12CS = 0x0;
 366   1      
 367   1      		reconnect_USB();
 368   1      
 369   1      	while( TRUE ){
 370   2      	   SBUF= 0xAA;
 371   2      		if (bEPPflags.bits.timer){
 372   3      			DISABLE;
 373   3      			bEPPflags.bits.timer = 0;
C51 COMPILER V6.20c  KMAIN                                                                 10/31/2002 21:55:46 PAGE 20  

 374   3      			ENABLE;
 375   3      
 376   3      			if(bEPPflags.bits.configuration)
 377   3      				check_key_LED();
 378   3      		}
 379   2      
 380   2      		if (bEPPflags.bits.bus_reset) {
 381   3      			DISABLE;
 382   3      			bEPPflags.bits.bus_reset = 0;
 383   3      			ENABLE;
 384   3      			// Release D12's SUSPEND pin after bus reset
 385   3      			// Enable 74HCT123 pulse generation before disconnect
 386   3      			///D12SUSPD = 1;
 387   3      			D12SUSPD=0;
 388   3      		} // if bus reset
 389   2      
 390   2      		if (bEPPflags.bits.suspend) {
 391   3      			DISABLE;
 392   3      			bEPPflags.bits.suspend= 0;
 393   3      			ENABLE;
 394   3      
 395   3      			if(D12SUSPD == 1) {
 396   4      				D12SUSPD = 0;
 397   4      				P0 = 0xFF;
 398   4      				P1 = 0xFF;
 399   4      				P2 = 0xFF;
 400   4      				P3 = 0xFF;
 401   4      				D12_SetDMA(0xC3);
 402   4      				D12SUSPD = 1;
 403   4      				PCON |= 0x02;

⌨️ 快捷键说明

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