X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=src%2Flpc%2Fao_usb_lpc.c;h=044699168bae42aac3858a8d2f6105ff4035de45;hp=c50e752883faca07f5d92b0965c203d2db160eaf;hb=HEAD;hpb=e76d543a203f210683cb77df2b9bbff1a9f4b381 diff --git a/src/lpc/ao_usb_lpc.c b/src/lpc/ao_usb_lpc.c index c50e7528..04469916 100644 --- a/src/lpc/ao_usb_lpc.c +++ b/src/lpc/ao_usb_lpc.c @@ -89,8 +89,6 @@ static uint8_t *ao_usb_out_rx_buffer[2]; static uint8_t ao_usb_out_rx_cur; static uint8_t ao_usb_rx_count, ao_usb_rx_pos; -extern struct lpc_usb_endpoint lpc_usb_endpoint; - /* Marks when we don't need to send an IN packet. * This happens only when the last IN packet is not full, * otherwise the host will expect to keep seeing packets. @@ -131,11 +129,11 @@ static inline uint32_t set_toggle(uint32_t current_value, * Set current device address and mark the * interface as active */ -void +static void ao_usb_set_address(uint8_t address) { debug("ao_usb_set_address %02x\n", address); - lpc_usb.devcmdstat = ((address << LPC_USB_DEVCMDSTAT_DEV_ADDR) | + lpc_usb.devcmdstat = (((uint32_t) address << LPC_USB_DEVCMDSTAT_DEV_ADDR) | (1 << LPC_USB_DEVCMDSTAT_DEV_EN) | (0 << LPC_USB_DEVCMDSTAT_SETUP) | (0 << LPC_USB_DEVCMDSTAT_PLL_ON) | @@ -198,14 +196,14 @@ ao_usb_sram_offset(uint8_t *addr) static void ao_usb_set_ep(vuint32_t *ep, uint8_t *addr, uint16_t nbytes) { - *ep = ((ao_usb_sram_offset(addr) << LPC_USB_EP_OFFSET) | - (nbytes << LPC_USB_EP_NBYTES) | + *ep = (((uint32_t) ao_usb_sram_offset(addr) << LPC_USB_EP_OFFSET) | + ((uint32_t) nbytes << LPC_USB_EP_NBYTES) | (0 << LPC_USB_EP_ENDPOINT_ISO) | (0 << LPC_USB_EP_RATE_FEEDBACK) | (0 << LPC_USB_EP_TOGGLE_RESET) | (0 << LPC_USB_EP_STALL) | (0 << LPC_USB_EP_DISABLED) | - (1 << LPC_USB_EP_ACTIVE)); + (1UL << LPC_USB_EP_ACTIVE)); } static inline uint16_t @@ -328,7 +326,7 @@ ao_usb_reset(void) static void ao_usb_set_ep0(void) { - int e; + uint8_t e; /* Everything is single buffered for now */ lpc_usb.epbufcfg = 0; @@ -427,7 +425,7 @@ ao_usb_ep0_fill(void) if (len > ao_usb_ep0_out_len) len = ao_usb_ep0_out_len; - ao_usb_ep0_out_len -= len; + ao_usb_ep0_out_len -= (uint8_t) len; debug_data ("Fill EP0 len %d:", len); memcpy(ao_usb_ep0_out_data, rx_buffer, len); @@ -473,7 +471,7 @@ ao_usb_ep0_in_start(uint16_t max) ao_usb_ep0_in_max = max; /* Don't send more than asked for */ if (ao_usb_ep0_in_len > max) - ao_usb_ep0_in_len = max; + ao_usb_ep0_in_len = (uint8_t) max; ao_usb_ep0_flush(); } @@ -485,8 +483,8 @@ static void ao_usb_get_descriptor(uint16_t value, uint16_t length) { const uint8_t *descriptor; - uint8_t type = value >> 8; - uint8_t index = value; + uint8_t type = (uint8_t) (value >> 8); + uint8_t index = (uint8_t) value; descriptor = ao_usb_descriptors; while (descriptor[0] != 0) { @@ -497,7 +495,7 @@ ao_usb_get_descriptor(uint16_t value, uint16_t length) else len = descriptor[0]; if (len > length) - len = length; + len = (uint8_t) length; ao_usb_ep0_in_set(descriptor, len); break; } @@ -537,7 +535,7 @@ ao_usb_ep0_setup(void) break; case AO_USB_REQ_SET_ADDRESS: debug ("set address %d\n", ao_usb_setup.value); - ao_usb_address = ao_usb_setup.value; + ao_usb_address = (uint8_t) ao_usb_setup.value; ao_usb_address_pending = 1; break; case AO_USB_REQ_GET_DESCRIPTOR: @@ -549,7 +547,7 @@ ao_usb_ep0_setup(void) ao_usb_ep0_in_queue_byte(ao_usb_configuration); break; case AO_USB_REQ_SET_CONFIGURATION: - ao_usb_configuration = ao_usb_setup.value; + ao_usb_configuration = (uint8_t) ao_usb_setup.value; debug ("set configuration %d\n", ao_usb_configuration); ao_usb_set_configuration(); break; @@ -706,7 +704,7 @@ lpc_usb_irq_isr(void) } /* Check for reset */ - if (intstat & (1 << LPC_USB_INT_DEV)) { + if (intstat & (1UL << LPC_USB_INT_DEV)) { if (lpc_usb.devcmdstat & (1 << LPC_USB_DEVCMDSTAT_DRES_C)) { lpc_usb.devcmdstat |= (1 << LPC_USB_DEVCMDSTAT_DRES_C); @@ -801,7 +799,7 @@ _ao_usb_out_recv(void) _rx_dbg0("out_recv top"); ao_usb_out_avail = 0; - ao_usb_rx_count = AO_USB_OUT_SIZE - ao_usb_epn_out_count(AO_USB_OUT_EP); + ao_usb_rx_count = (uint8_t) (AO_USB_OUT_SIZE - ao_usb_epn_out_count(AO_USB_OUT_EP)); _rx_dbg1("out_recv count", ao_usb_rx_count); debug ("recv %d\n", ao_usb_rx_count); @@ -813,7 +811,7 @@ _ao_usb_out_recv(void) ao_usb_set_epn_out(AO_USB_OUT_EP, ao_usb_out_rx_buffer[1-ao_usb_out_rx_cur], AO_USB_OUT_SIZE); } -int +static int _ao_usb_pollchar(void) { uint8_t c; @@ -848,7 +846,7 @@ ao_usb_getchar(void) while ((c = _ao_usb_pollchar()) == AO_READ_AGAIN) ao_sleep(AO_USB_OUT_SLEEP_ADDR); ao_arch_release_interrupts(); - return c; + return (char) c; } void @@ -857,7 +855,7 @@ 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); + ao_gpio_set(AO_USB_PULLUP_PORT, AO_USB_PULLUP_PIN, 0); #endif /* Disable interrupts */ lpc_usb.inten = 0; @@ -875,8 +873,8 @@ ao_usb_disable(void) (1 << LPC_SCB_PDRUNCFG_USBPLL_PD)); /* Disable USB registers and RAM */ - lpc_scb.sysahbclkctrl &= ~((1 << LPC_SCB_SYSAHBCLKCTRL_USB) | - (1 << LPC_SCB_SYSAHBCLKCTRL_USBRAM)); + lpc_scb.sysahbclkctrl &= ~((1UL << LPC_SCB_SYSAHBCLKCTRL_USB) | + (1UL << LPC_SCB_SYSAHBCLKCTRL_USBRAM)); ao_arch_release_interrupts(); } @@ -908,10 +906,10 @@ ao_usb_enable(void) (1 << LPC_SCB_SYSAHBCLKCTRL_USBRAM)); /* Enable USB PHY */ - lpc_scb.pdruncfg &= ~(1 << LPC_SCB_PDRUNCFG_USBPAD_PD); + lpc_scb.pdruncfg &= ~(1UL << LPC_SCB_PDRUNCFG_USBPAD_PD); /* Turn on USB PLL */ - lpc_scb.pdruncfg &= ~(1 << LPC_SCB_PDRUNCFG_USBPLL_PD); + lpc_scb.pdruncfg &= ~(1UL << LPC_SCB_PDRUNCFG_USBPLL_PD); lpc_scb.usbpllclksel = (LPC_SCB_SYSPLLCLKSEL_SEL_SYSOSC << LPC_SCB_SYSPLLCLKSEL_SEL); lpc_scb.usbpllclkuen = (0 << LPC_SCB_USBPLLCLKUEN_ENA); @@ -948,12 +946,12 @@ ao_usb_enable(void) debug ("ao_usb_enable\n"); /* Enable interrupts */ - lpc_usb.inten = ((1 << LPC_USB_INT_EPOUT(0)) | - (1 << LPC_USB_INT_EPIN(0)) | - (1 << LPC_USB_INT_EPIN(AO_USB_INT_EP)) | - (1 << LPC_USB_INT_EPOUT(AO_USB_OUT_EP)) | - (1 << LPC_USB_INT_EPIN(AO_USB_IN_EP)) | - (1 << LPC_USB_INT_DEV)); + lpc_usb.inten = ((1UL << LPC_USB_INT_EPOUT(0)) | + (1UL << LPC_USB_INT_EPIN(0)) | + (1UL << LPC_USB_INT_EPIN(AO_USB_INT_EP)) | + (1UL << LPC_USB_INT_EPOUT(AO_USB_OUT_EP)) | + (1UL << LPC_USB_INT_EPIN(AO_USB_IN_EP)) | + (1UL << LPC_USB_INT_DEV)); ao_arch_release_interrupts(); @@ -975,7 +973,7 @@ ao_usb_enable(void) ao_usb_set_ep0(); #if HAS_USB_PULLUP - ao_gpio_set(AO_USB_PULLUP_PORT, AO_USB_PULLUP_PIN, AO_USB_PULLUP, 1); + ao_gpio_set(AO_USB_PULLUP_PORT, AO_USB_PULLUP_PIN, 1); #endif } @@ -1003,7 +1001,7 @@ ao_usb_irq(void) control_count, out_count, in_count, int_count, reset_count); } -__code struct ao_cmds ao_usb_cmds[] = { +const struct ao_cmds ao_usb_cmds[] = { { ao_usb_irq, "I\0Show USB interrupt counts" }, { 0, NULL } }; @@ -1013,7 +1011,11 @@ void ao_usb_init(void) { #if HAS_USB_PULLUP - ao_enable_output(AO_USB_PULLUP_PORT, AO_USB_PULLUP_PIN, AO_USB_PULLUP, 0); + int i; + ao_enable_output(AO_USB_PULLUP_PORT, AO_USB_PULLUP_PIN, 0); + + for (i = 0; i < 40000; i++) + ao_arch_nop(); #endif ao_usb_enable();