void main_init() { REVCTL = 0x03; SYNCDELAY(); SETIF48MHZ(); SYNCDELAY(); // Configure port PORTACFG = 0x00; SYNCDELAY(); PORTCCFG = 0x00; SYNCDELAY(); PORTECFG = 0x00; SYNCDELAY(); // set IFCONFIG EP1INCFG &= ~bmVALID; SYNCDELAY(); EP1OUTCFG &= ~bmVALID; SYNCDELAY(); EP2CFG = (bmVALID | bmBULK | bmBUF4X /*| bmBUF1024*/ | bmDIR); SYNCDELAY(); EP4CFG &= ~bmVALID; /* = (bmVALID | bmISO | bmBUF2X | bmDIR);*/ SYNCDELAY(); EP6CFG = (bmVALID | bmBULK | bmBUF2X | bmDIR); SYNCDELAY(); EP8CFG &= ~bmVALID; SYNCDELAY(); reset(); #ifndef SIMULATION configure_fifo(); #endif }
void main() { REVCTL=0; // not using advanced endpoint controls d2off(); on=0; lcount=0; got_sud=FALSE; icount=0; gotbuf=FALSE; bytes=0; // renumerate RENUMERATE_UNCOND(); SETCPUFREQ(CLK_48M); SETIF48MHZ(); sio0_init(57600); USE_USB_INTS(); ENABLE_SUDAV(); ENABLE_SOF(); ENABLE_HISPEED(); ENABLE_USBRESET(); // only valid endpoints are 2/6 EP2CFG = 0xA2; // 10100010 SYNCDELAY; EP6CFG = 0xE2; // 11100010 SYNCDELAY; EP1INCFG &= ~bmVALID; SYNCDELAY; EP1OUTCFG &= ~bmVALID; SYNCDELAY; EP4CFG &= ~bmVALID; SYNCDELAY; EP8CFG &= ~bmVALID; SYNCDELAY; // arm ep2 EP2BCL = 0x80; // write once SYNCDELAY; EP2BCL = 0x80; // do it again // make it so we enumberate EA=1; // global interrupt enable printf ( "Done initializing stuff\n" ); d3off(); while(TRUE) { if ( got_sud ) { printf ( "Handle setupdata\n" ); handle_setupdata(); got_sud=FALSE; } if ( !(EP2468STAT & bmEP2EMPTY) ) { printf ( "ep2 out received data\n" ); if ( !(EP2468STAT & bmEP6FULL) ) { // wait for at least one empty in buffer WORD i; printf ( "Sending data to ep6 in\n"); bytes = MAKEWORD(EP2BCH,EP2BCL); for (i=0;i<bytes;++i) EP6FIFOBUF[i] = EP2FIFOBUF[i]; // can copy whole string w/ autoptr instead. // or copy directly from one buf to another // ARM ep6 out EP6BCH=MSB(bytes); SYNCDELAY; EP6BCL=LSB(bytes); REARM(); // ep2 //printf ( "Re-Armed ep2\n" ); } } } }