?? 00000005.htm
字號(hào):
{ <br /> while (I2CS & 0x40); //Wait for stop to be done <br /> I2CS = 0x80; //Set start condition <br /> I2DAT = LED_ADDR; //Write led address <br /> while (!(I2CS & 0x01)); //Wait for done <br /> I2DAT = d; //Write data <br /> while (!(I2CS & 0x01)); //Wait for done <br /> I2CS = 0x40; //Set stop bit <br />} <br />void TD_Poll(void) // Called repeatedly while the device is idle <br />{ <br /> if( !(EPIO[IN2BUF_ID].cntrl & bmEPBUSY) ) // Is the IN2BUF available, <br /> { <br /> buttons = read_buttons(); <br /> if (buttons == read_buttons()) //Debounce <br /> { <br /> buttons &= 0x0F; <br /> if ((oldbuttons - buttons) != 0) //Change in button state <br /> { <br /> if (buttons & 1) //Shift <br /> IN2BUF[0] = 0; <br /> else <br /> IN2BUF[0] = 2; <br /> if (buttons & 2) //a <br /> IN2BUF[2] = 0; <br /> else <br /> IN2BUF[2] = 4; <br /> if (buttons & 4) //b <br /> IN2BUF[3] = 0; <br /> else <br /> IN2BUF[3] = 5; <br /> if (buttons & 8) //c <br /> IN2BUF[4] = 0; <br /> else <br /> IN2BUF[4] = 6; <br /> IN2BUF[1] = 0; <br /> IN2BC = 5; <br /> } <br /> oldbuttons = buttons; <br /> } <br /> } <br /> if( !(EPIO[OUT2BUF_ID].cntrl & bmEPBUSY) ) // Is there something available <br /> { <br /> leds = 0xFF; //Turn all off <br /> if (OUT2BUF[0] & 0x02) //Caps <br /> leds &= 0xBF; <br /> if (OUT2BUF[0] & 0x01) //Scroll <br /> leds &= 0xF7; <br /> if (OUT2BUF[0] & 0x04) //Num <br /> leds &= 0xFE; <br /> write_leds (leds); <br /> OUT2BC = 0; //Rearm endpoint buffer <br /> } <br />} <br />BOOL TD_Suspend(void) // Called before the device goes into suspend mode <br />{ <br /> // Turn off breakpoint light before entering suspend <br /> USBBAV |= bmBREAK; // Clear the breakpoint <br /> return(TRUE); <br />} <br />BOOL TD_Resume(void) // Called after the device resumes <br />{ <br /> return(TRUE); <br />} <br />//-------------------------------------------------------------------------- <br />--- <br />// Device Request hooks <br />// The following hooks are called by the end point 0 device request parser. <br />//-------------------------------------------------------------------------- <br />--- <br />BOOL DR_ClassRequest(void) <br />{ <br /> return(TRUE); <br />} <br />BOOL DR_GetDescriptor(void) <br />{ <br /> BYTE length,i; <br /> pHIDDscr = (WORD)&HIDDscr; <br /> pReportDscr = (WORD)&ReportDscr; <br /> pReportDscrEnd = (WORD)&ReportDscrEnd; <br /> switch (SETUPDAT[3]) <br /> { <br /> case GD_HID: //HID Descriptor <br /> SUDPTRH = MSB(pHIDDscr); <br /> SUDPTRL = LSB(pHIDDscr); <br /> return (FALSE); <br /> case GD_REPORT: //Report Descriptor <br /> length = pReportDscrEnd - pReportDscr; <br /> while (length) <br /> { <br /> for(i=0; i<min(length,64); i++) <br /> *(IN0BUF+i) = *((BYTE xdata *)pReportDscr+i); <br /> //set length and arm Endpoint <br /> EZUSB_SET_EP_BYTES(IN0BUF_ID,min(length,64)); <br /> length -= min(length,64); <br /> // Wait for it to go out (Rev C and above) <br /> while(EP0CS & 0x04) <br /> ; <br /> } <br /> return (FALSE); <br /> default: <br /> return(TRUE); <br /> } <br />} <br />BOOL DR_SetConfiguration(void) // Called when a Set Configuration command is <br /> received <br />{ <br /> Configuration = SETUPDAT[2]; <br /> return(TRUE); // Handled by user code <br />} <br />BOOL DR_GetConfiguration(void) // Called when a Get Configuration command is <br /> received <br />{ <br /> IN0BUF[0] = Configuration; <br /> EZUSB_SET_EP_BYTES(IN0BUF_ID,1); <br /> return(TRUE); // Handled by user code <br />} <br />BOOL DR_SetInterface(void) // Called when a Set Interface command is recei <br />ved <br />{ <br /> AlternateSetting = SETUPDAT[2]; <br /> return(TRUE); // Handled by user code <br />} <br />BOOL DR_GetInterface(void) // Called when a Set Interface command is recei <br />ved <br />{ <br /> IN0BUF[0] = AlternateSetting; <br /> EZUSB_SET_EP_BYTES(IN0BUF_ID,1); <br /> return(TRUE); // Handled by user code <br />} <br />BOOL DR_GetStatus(void) <br />{ <br /> return(TRUE); <br />} <br />BOOL DR_ClearFeature(void) <br />{ <br /> return(TRUE); <br />} <br />BOOL DR_SetFeature(void) <br />{ <br /> return(TRUE); <br />} <br />BOOL DR_VendorCmnd(void) <br />{ <br /> return(TRUE); <br />} <br />//-------------------------------------------------------------------------- <br />--- <br />// USB Interrupt Handlers <br />// The following functions are called by the USB interrupt jump table. <br />//-------------------------------------------------------------------------- <br />--- <br />// Setup Data Available Interrupt Handler <br />void ISR_Sudav(void) interrupt 0 <br />{ <br /> GotSUD = TRUE; // Set flag <br /> EZUSB_IRQ_CLEAR(); <br /> USBIRQ = bmSUDAV; // Clear SUDAV IRQ <br />} <br />// Setup Token Interrupt Handler <br />void ISR_Sutok(void) interrupt 0 <br />{ <br /> EZUSB_IRQ_CLEAR(); <br /> USBIRQ = bmSUTOK; // Clear SUTOK IRQ <br />} <br />void ISR_Sof(void) interrupt 0 <br />{ <br /> EZUSB_IRQ_CLEAR(); <br /> USBIRQ = bmSOF; // Clear SOF IRQ <br />} <br />void ISR_Ures(void) interrupt 0 <br />{ <br /> EZUSB_IRQ_CLEAR(); <br /> USBIRQ = bmURES; // Clear URES IRQ <br />} <br />void ISR_IBN(void) interrupt 0 <br />{ <br /> // ISR for the IN Bulk NAK (IBN) interrupt. <br />} <br />void ISR_Susp(void) interrupt 0 <br />{ <br /> Sleep = TRUE; <br /> EZUSB_IRQ_CLEAR(); <br /> USBIRQ = bmSUSP; <br />} <br />void ISR_Ep0in(void) interrupt 0 <br />{ <br />} <br />void ISR_Ep0out(void) interrupt 0 <br />{ <br />} <br />void ISR_Ep1in(void) interrupt 0 <br />{ <br />} <br />void ISR_Ep1out(void) interrupt 0 <br />{ <br />} <br />void ISR_Ep2in(void) interrupt 0 <br />{ <br />} <br />void ISR_Ep2out(void) interrupt 0 <br />{ <br />
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -