From 113f63e33f8a1ebd0e5d8689ee4183f1d3b2ba47 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Sun, 30 Oct 2011 07:45:46 +0000 Subject: git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@3455 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/hal/platforms/STM32/USBv1/stm32_usb.h | 16 ++++++++++++---- os/hal/platforms/STM32/USBv1/usb_lld.c | 14 +++++++------- 2 files changed, 19 insertions(+), 11 deletions(-) (limited to 'os/hal') diff --git a/os/hal/platforms/STM32/USBv1/stm32_usb.h b/os/hal/platforms/STM32/USBv1/stm32_usb.h index 7ba03350a..d5701c192 100644 --- a/os/hal/platforms/STM32/USBv1/stm32_usb.h +++ b/os/hal/platforms/STM32/USBv1/stm32_usb.h @@ -80,17 +80,25 @@ typedef struct { */ volatile uint32_t TXADDR; /** - * @brief TX counter register. + * @brief TX counter register 0. */ - volatile uint32_t TXCOUNT; + volatile uint16_t TXCOUNT0; + /** + * @brief TX counter register 1. + */ + volatile uint16_t TXCOUNT1; /** * @brief RX buffer offset register. */ volatile uint32_t RXADDR; /** - * @brief RX counter register. + * @brief RX counter register 0. + */ + volatile uint16_t RXCOUNT0; + /** + * @brief RX counter register 1. */ - volatile uint32_t RXCOUNT; + volatile uint16_t RXCOUNT1; } stm32_usb_descriptor_t; /** diff --git a/os/hal/platforms/STM32/USBv1/usb_lld.c b/os/hal/platforms/STM32/USBv1/usb_lld.c index 253f45197..b81766f6d 100644 --- a/os/hal/platforms/STM32/USBv1/usb_lld.c +++ b/os/hal/platforms/STM32/USBv1/usb_lld.c @@ -195,7 +195,7 @@ CH_IRQ_HANDLER(Vector90) { } else { /* Transaction mode.*/ - n = USB_GET_DESCRIPTOR(ep)->TXCOUNT; + n = (size_t)USB_GET_DESCRIPTOR(ep)->TXCOUNT0; epcp->in_state->txbuf += n; epcp->in_state->txcnt += n; epcp->in_state->txsize -= n; @@ -419,10 +419,10 @@ void usb_lld_init_endpoint(USBDriver *usbp, usbep_t ep) { else nblocks = ((((epcp->out_maxsize - 1) | 1) + 1) / 2) << 10; dp = USB_GET_DESCRIPTOR(ep); - dp->TXCOUNT = 0; - dp->RXCOUNT = nblocks; - dp->TXADDR = pm_alloc(usbp, epcp->in_maxsize); - dp->RXADDR = pm_alloc(usbp, epcp->out_maxsize); + dp->TXCOUNT0 = 0; + dp->RXCOUNT0 = nblocks; + dp->TXADDR = pm_alloc(usbp, epcp->in_maxsize); + dp->RXADDR = pm_alloc(usbp, epcp->out_maxsize); } /** @@ -549,7 +549,7 @@ size_t usb_lld_read_packet_buffer(USBDriver *usbp, usbep_t ep, (void)usbp; udp = USB_GET_DESCRIPTOR(ep); pmap = USB_ADDR2PTR(udp->RXADDR); - count = udp->RXCOUNT & RXCOUNT_COUNT_MASK; + count = (size_t)udp->RXCOUNT0 & RXCOUNT_COUNT_MASK; if (n > count) n = count; n = (n + 1) / 2; @@ -583,7 +583,7 @@ void usb_lld_write_packet_buffer(USBDriver *usbp, usbep_t ep, (void)usbp; udp = USB_GET_DESCRIPTOR(ep); pmap = USB_ADDR2PTR(udp->TXADDR); - udp->TXCOUNT = n; + udp->TXCOUNT0 = (uint16_t)n; n = (n + 1) / 2; while (n > 0) { *pmap++ = *(uint16_t *)buf; -- cgit v1.2.3