州周立功单片机发展有限公司Te:(020)3873097638730977Fax:38730925htpr/w unsigned short D12 ReadInterruptRegister( void) outport(DI2 COMMAND, OxF4); bl= inport(D 12 DATA), inport(DI2 DATA); 8 j+=bl; return ]; unsigned char Di2 SelectEndpoint( unsigned char bEndp if(bEPPflags bits in isr==0) DISABLE: outport(D12 COMMAND, bEndp): b(DI2 DAtA f(bEPPflags bits in isr==0) ENABLE eturn c unsigned char D12 Read TransactionStatus(unsigned char bEndp outport(D12 COMMAND, 0x40+ bEndp) return inport(DI2 DATA) unsigned char D12_ ReadEndpointStatus(unsigned char bEndp) unsigned char c: DISABLE 6
广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 6 unsigned short D12_ReadInterruptRegister(void) { unsigned char b1; unsigned int j; outportb(D12_COMMAND, 0xF4); b1 = inportb(D12_DATA); j = inportb(D12_DATA); j <<= 8; j += b1; return j; } unsigned char D12_SelectEndpoint(unsigned char bEndp) { unsigned char c; if(bEPPflags.bits.in_isr == 0) DISABLE; outportb(D12_COMMAND, bEndp); c = inportb(D12_DATA); if(bEPPflags.bits.in_isr == 0) ENABLE; return c; } unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp) { outportb(D12_COMMAND, 0x40 + bEndp); return inportb(D12_DATA); } unsigned char D12_ReadEndpointStatus(unsigned char bEndp) { unsigned char c; if(bEPPflags.bits.in_isr == 0) DISABLE;
州周立功单片机发展有限公司Te:(020)3873097638730977Fax:38730925htpr/w outport(DI2 COMMAND, 0x80 bEnd) C=inport(DI2 DATA); if(bEPPflags bits in isr=0) ENABLE return c void D12 Set EndpointStatus( unsigned char bEndp, unsigned char bStalled) if(bEPPflags bits in isr==0) DISABLE: outport (DI2 COMMAND, 0x40+ bEnd); portb(D12 DATA, stalled) f(bEPPflags bits ENABLE void D12 SendResume( void) orb(DI2 COMMAND, OxF6) unsigned short D12 Read Current FrameNumbe f(bEPPflags bits in isr==0) DISABLE: outport(D12 COMMAND, OxF5); F= inport(D12 DATA); inport(DI2 DATA i+=(<<8) f(bEPPflags bits in isr==0 ENABLE 7
广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 7 outportb(D12_COMMAND, 0x80 + bEndp); c = inportb(D12_DATA); if(bEPPflags.bits.in_isr == 0) ENABLE; return c; } void D12_SetEndpointStatus(unsigned char bEndp, unsigned char bStalled) { if(bEPPflags.bits.in_isr == 0) DISABLE; outportb(D12_COMMAND, 0x40 + bEndp); outportb(D12_DATA, bStalled); if(bEPPflags.bits.in_isr == 0) ENABLE; } void D12_SendResume(void) { outportb(D12_COMMAND, 0xF6); } unsigned short D12_ReadCurrentFrameNumber(void) { unsigned short i,j; if(bEPPflags.bits.in_isr == 0) DISABLE; outportb(D12_COMMAND, 0xF5); i= inportb(D12_DATA); j = inportb(D12_DATA); i += (j<<8); if(bEPPflags.bits.in_isr == 0) ENABLE; return i; }
州周立功单片机发展有限公司Te:(020)3873097638730977Fax:38730925htpr/w unsigned short D12 Read ChiplD(void) ansI if(bEPPflags bits in isr=0) DISABLE: outport(portbase+ D12 COMMAND, OxFD); rebase+D12 DATA) inport(portbase+DI2 DATA), (<<8) if(bEPPflags bits in isr=0) ENABLE unsigned char Di2 Read Endpoint( unsigned char endp, unsigned char* buf, unsigned char len) unsigned char i, if(bEPPflags bits in isr==0) DISABLE outport(D12 COMMAND, endp); if( (inportb(D12 DATA)& DI2 FULLEMPTY=0)t f(bEPPflags bits in isr=0) return 0 outport(DI2 COMMAND, OxFO); j=inport(D12 DATA j=inport(DI2 DATA) j>len) j=len *(buf+i)=inport (D12 DATA); outport(D12 COMMAND, OxF2) 8
广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 8 unsigned short D12_ReadChipID(void) { unsigned short i,j; if(bEPPflags.bits.in_isr == 0) DISABLE; outportb(portbase+D12_COMMAND, 0xFD); i=inportb(portbase+D12_DATA); j=inportb(portbase+D12_DATA); i += (j<<8); if(bEPPflags.bits.in_isr == 0) ENABLE; return i; } unsigned char D12_ReadEndpoint(unsigned char endp, unsigned char * buf, unsigned char len) { unsigned char i, j; if(bEPPflags.bits.in_isr == 0) DISABLE; outportb(D12_COMMAND, endp); if((inportb(D12_DATA) & D12_FULLEMPTY) == 0) { if(bEPPflags.bits.in_isr == 0) ENABLE; return 0; } outportb(D12_COMMAND, 0xF0); j = inportb(D12_DATA); j = inportb(D12_DATA); if(j > len) j = len; for(i=0; i<j; i++) *(buf+i) = inportb(D12_DATA); outportb(D12_COMMAND, 0xF2);
州周立功单片机发展有限公司Te:(020)3873097638730977Fax:38730925htpr/w if(bEPPflags bi ENABLE: return ]; //D12_ ReadMain EndpointO added by V2.2 to support double-buffering // Caller should assume maxium 128 bytes of returned data. unsigned char DI2 ReadMain Endpoint(unsigned char* buf) unsigned char i,j,k=0, bDblBuf= 1 if(bEPPflags bits in isr=0) DISABLE: outport(D12 COMMAND, 0x84); if(( inport(D12 DATA)& 0x60)=0x60 bDblBuf= 2. while(bDblBuf)i outport(DI2 COMMAND, 4); if(inport(D12 DATA)& D12 FULLEMPTY==0) outport(D12 COMMAND, OxFO); j=inport(D12 DATA); for(=0,ij,++) *(buf+i+k)=inport(D12 DATA), k+=j, utportb(D12_ COMMAND, OxF2); bDblBuf f(bEPPflags bits in isr ENABLE return k
广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 9 if(bEPPflags.bits.in_isr == 0) ENABLE; return j; } // D12_ReadMainEndpoint() added by V2.2 to support double-buffering. // Caller should assume maxium 128 bytes of returned data. unsigned char D12_ReadMainEndpoint(unsigned char * buf) { unsigned char i, j, k = 0, bDblBuf = 1; if(bEPPflags.bits.in_isr == 0) DISABLE; outportb(D12_COMMAND, 0x84); if( (inportb(D12_DATA) & 0x60) == 0x60) bDblBuf = 2; while(bDblBuf) { outportb(D12_COMMAND, 4); if((inportb(D12_DATA) & D12_FULLEMPTY) == 0) break; outportb(D12_COMMAND, 0xF0); j = inportb(D12_DATA); j = inportb(D12_DATA); for(i=0; i<j; i++) *(buf+i+k) = inportb(D12_DATA); k += j; outportb(D12_COMMAND, 0xF2); bDblBuf --; } if(bEPPflags.bits.in_isr == 0) ENABLE; return k; }
州周立功单片机发展有限公司Te:(020)3873097638730977Fax:38730925htpr/w unsigned char D12 Write Endpoint(unsigned char endp, unsigned char*buf, unsigned char len) unsigned char 1; if(bEPPflags bits in isr=0) DISABLE: outport(D12 COMMAND, endp); inport(DI2 DATA); outport(D12 COMMAND, OxFO); outport(D12 DATA, 0); 12 DAT r(i=0,i<len;++) outport(D2DATA’bu+i) outport(D12 COMMAND, OxFA); if(bEPPflags bits in isr=0) ENAB void DI2 Acknowledge Endpoint(unsigned char endp outport(D12COMMAND, endp); outport(DI2 COMMAND, OxFI); outport(D12 COMMAND, OxF2) unsigned char D12Eval inport( void) eturn inport(D12 EVAL PORT D); void DI2Eval outport(unsigned char val, unsigned char mask) static unsigned char last val=0; al=(val mask)I (last val &(-mask));
广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 http://www.zlgmcu.com 10 unsigned char D12_WriteEndpoint(unsigned char endp, unsigned char * buf, unsigned char len) { unsigned char i; if(bEPPflags.bits.in_isr == 0) DISABLE; outportb(D12_COMMAND, endp); inportb(D12_DATA); outportb(D12_COMMAND, 0xF0); outportb(D12_DATA, 0); outportb(D12_DATA, len); for(i=0; i<len; i++) outportb(D12_DATA, *(buf+i)); outportb(D12_COMMAND, 0xFA); if(bEPPflags.bits.in_isr == 0) ENABLE; return len; } void D12_AcknowledgeEndpoint(unsigned char endp) { outportb(D12_COMMAND, endp); outportb(D12_COMMAND, 0xF1); if(endp == 0) outportb(D12_COMMAND, 0xF2); } #ifndef __C51__ unsigned char D12Eval_inportb(void) { return inportb(D12_EVAL_PORT_I); } void D12Eval_outportb(unsigned char val, unsigned char mask) { static unsigned char last_val = 0; val = (val & mask) | (last_val & (~mask));