aboutsummaryrefslogtreecommitdiffstats
path: root/os/hal/platforms
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2011-10-30 07:45:46 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2011-10-30 07:45:46 +0000
commit113f63e33f8a1ebd0e5d8689ee4183f1d3b2ba47 (patch)
tree8405dbc14249060b55f84119ee346f55bc4f8438 /os/hal/platforms
parent71ff7f78d21d33ad39ecbbe356adca26d86de87b (diff)
downloadChibiOS-113f63e33f8a1ebd0e5d8689ee4183f1d3b2ba47.tar.gz
ChibiOS-113f63e33f8a1ebd0e5d8689ee4183f1d3b2ba47.tar.bz2
ChibiOS-113f63e33f8a1ebd0e5d8689ee4183f1d3b2ba47.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@3455 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/hal/platforms')
-rw-r--r--os/hal/platforms/STM32/USBv1/stm32_usb.h16
-rw-r--r--os/hal/platforms/STM32/USBv1/usb_lld.c14
2 files changed, 19 insertions, 11 deletions
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;