Gecko3 - CCC Event Weblog
Gecko3 - CCC Event Weblog
Gecko3 - CCC Event Weblog
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
E. Quellcode<br />
// The 4K demo t o o l s l o c a t e a l l code s e c t i o n s in e x t e r n a l memory .<br />
// The d e s c r i p t o r t a b l e i s r e l o c a t e d by t h e frameworks ONLY i f i t i s found<br />
// to be l o c a t e d in e x t e r n a l memory .<br />
pDeviceDscr = (WORD)&DeviceDscr ;<br />
131 pDeviceQualDscr = (WORD)&DeviceQualDscr ;<br />
pHighSpeedConfigDscr = (WORD)&HighSpeedConfigDscr ;<br />
pFullSpeedConfigDscr = (WORD)&FullSpeedConfigDscr ;<br />
pStringDscr = (WORD)&S t r i n g D s c r ;<br />
136 i f (EZUSB HIGHSPEED( ) )<br />
{<br />
pConfigDscr = pHighSpeedConfigDscr ;<br />
pOtherConfigDscr = pFullSpeedConfigDscr ;<br />
}<br />
141 else<br />
{<br />
pConfigDscr = pFullSpeedConfigDscr ;<br />
pOtherConfigDscr = pHighSpeedConfigDscr ;<br />
}<br />
146<br />
i f ( (WORD)&DeviceDscr & 0 xe000 )<br />
{<br />
IntDescrAddr = INTERNAL DSCR ADDR;<br />
ExtDescrAddr = (WORD)&DeviceDscr ;<br />
151 DevDescrLen = (WORD)&UserDscr − (WORD)&DeviceDscr + 2 ;<br />
for ( i = 0 ; i < DevDescrLen ; i ++)<br />
∗ ( (BYTE xdata ∗) IntDescrAddr+i ) = 0xCD;<br />
for ( i = 0 ; i < DevDescrLen ; i ++)<br />
∗ ( (BYTE xdata ∗) IntDescrAddr+i ) = ∗ ( (BYTE xdata ∗) ExtDescrAddr+i ) ;<br />
156 pDeviceDscr = IntDescrAddr ;<br />
o f f s e t = (WORD)&DeviceDscr − INTERNAL DSCR ADDR;<br />
pDeviceQualDscr −= o f f s e t ;<br />
pConfigDscr −= o f f s e t ;<br />
pOtherConfigDscr −= o f f s e t ;<br />
161 pHighSpeedConfigDscr −= o f f s e t ;<br />
pFullSpeedConfigDscr −= o f f s e t ;<br />
pStringDscr −= o f f s e t ;<br />
}<br />
166 EZUSB IRQ ENABLE( ) ; // Enable USB i n t e r r u p t (INT2)<br />
EZUSB ENABLE RSMIRQ( ) ; // Wake−up i n t e r r u p t<br />
INTSETUP |= (bmAV2EN | bmAV4EN) ; // Enable INT 2 & 4 a u t o v e c t o r i n g<br />
171 USBIE |= bmSUDAV | bmSUTOK | bmSUSP | bmURES | bmHSGRANT; // Enable s e l e c t e d<br />
i n t e r r u p t s<br />
EA = 1 ; // Enable 8051 i n t e r r u p t s<br />
#ifndef NO RENUM<br />
// Renumerate i f n e c e s s a r y . Do t h i s by c h e c k i n g t h e renum b i t . I f i t<br />
176 // i s a l r e a d y set , t h e r e i s no need to renumerate . The renum b i t w i l l<br />
// a l r e a d y be s e t i f t h i s firmware was loaded from an eeprom .<br />
i f ( ! ( USBCS & bmRENUM) )<br />
{<br />
EZUSB Discon (TRUE) ; // renumerate<br />
181 }<br />
#endif<br />
// u n c o n d i t i o n a l l y re−connect . I f we loaded from eeprom we are<br />
// d i s c o n n e c t e d and need to connect . I f we j u s t renumerated t h i s<br />
186 // i s not n e c e s s a r y but doesn ’ t hurt anything<br />
USBCS &=˜bmDISCON;<br />
CKCON = (CKCON&(˜bmSTRETCH) ) | FW STRETCH VALUE; // Set s t r e t c h to 0 ( a f t e r<br />
renumeration )<br />
60 Matthias Zurbrügg, Christoph Zimmermann