summaryrefslogtreecommitdiff
path: root/src/lpc/ao_usb_lpc.c
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2013-06-24 14:23:53 -0700
committerKeith Packard <keithp@keithp.com>2013-06-24 14:30:22 -0700
commit0dd148e388944d8d265da51d62806c4a00b2c13d (patch)
treee1212b3cbc0d5a77d0fe1d676e07f86fef91a52f /src/lpc/ao_usb_lpc.c
parent2568b36ae9d38ae1607ec08b84b06e0fe84bd3ba (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.c27
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
}