diff options
| author | Keith Packard <keithp@keithp.com> | 2013-06-24 14:23:53 -0700 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2013-06-24 14:30:22 -0700 | 
| commit | 0dd148e388944d8d265da51d62806c4a00b2c13d (patch) | |
| tree | e1212b3cbc0d5a77d0fe1d676e07f86fef91a52f /src/lpc/ao_usb_lpc.c | |
| parent | 2568b36ae9d38ae1607ec08b84b06e0fe84bd3ba (diff) | |
altos/lpc: Add boot loader
Support the USB boot loader, add USB pull-up support.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/lpc/ao_usb_lpc.c')
| -rw-r--r-- | src/lpc/ao_usb_lpc.c | 27 | 
1 files changed, 24 insertions, 3 deletions
diff --git a/src/lpc/ao_usb_lpc.c b/src/lpc/ao_usb_lpc.c index 4e6b9c66..144d1075 100644 --- a/src/lpc/ao_usb_lpc.c +++ b/src/lpc/ao_usb_lpc.c @@ -19,6 +19,16 @@  #include "ao_usb.h"  #include "ao_product.h" +#ifndef USE_USB_STDIO +#define USE_USB_STDIO	1 +#endif + +#if USE_USB_STDIO +#define AO_USB_OUT_SLEEP_ADDR	(&ao_stdin_ready) +#else +#define AO_USB_OUT_SLEEP_ADDR	(&ao_usb_out_avail) +#endif +  #define USB_DEBUG 	0  #define USB_DEBUG_DATA	0  #define USB_ECHO	0 @@ -652,7 +662,7 @@ lpc_usb_irq_isr(void)  		_rx_dbg1("RX ISR", *ao_usb_epn_out(AO_USB_OUT_EP));  		ao_usb_out_avail = 1;  		_rx_dbg0("out avail set"); -		ao_wakeup(&ao_stdin_ready); +		ao_wakeup(AO_USB_OUT_SLEEP_ADDR)  		_rx_dbg0("stdin awoken");  	} @@ -811,7 +821,7 @@ ao_usb_getchar(void)  	ao_arch_block_interrupts();  	while ((c = _ao_usb_pollchar()) == AO_READ_AGAIN) -		ao_sleep(&ao_stdin_ready); +		ao_sleep(AO_USB_OUT_SLEEP_ADDR);  	ao_arch_release_interrupts();  	return c;  } @@ -821,6 +831,9 @@ ao_usb_disable(void)  {  	ao_arch_block_interrupts(); +#if HAS_USB_PULLUP +	ao_gpio_set(AO_USB_PULLUP_PORT, AO_USB_PULLUP_PIN, AO_USB_PULLUP, 0); +#endif  	/* Disable interrupts */  	lpc_usb.inten = 0; @@ -923,6 +936,10 @@ ao_usb_enable(void)  	for (t = 0; t < 1000; t++)  		ao_arch_nop(); +#if HAS_USB_PULLUP +	ao_gpio_set(AO_USB_PULLUP_PORT, AO_USB_PULLUP_PIN, AO_USB_PULLUP, 1); +#endif +  	ao_usb_set_ep0();  } @@ -959,6 +976,10 @@ __code struct ao_cmds ao_usb_cmds[] = {  void  ao_usb_init(void)  { +#if HAS_USB_PULLUP +	ao_enable_output(AO_USB_PULLUP_PORT, AO_USB_PULLUP_PIN, AO_USB_PULLUP, 0); +#endif +  	ao_usb_enable();  	debug ("ao_usb_init\n"); @@ -968,7 +989,7 @@ ao_usb_init(void)  #if USB_DEBUG  	ao_cmd_register(&ao_usb_cmds[0]);  #endif -#if !USB_ECHO +#if USE_USB_STDIO  	ao_add_stdio(_ao_usb_pollchar, ao_usb_putchar, ao_usb_flush);  #endif  }  | 
