git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@3455 35acf78f-673a-0410-8e92-d51de3d6d3f4

This commit is contained in:
gdisirio 2011-10-30 07:45:46 +00:00
parent 71ff7f78d2
commit 113f63e33f
2 changed files with 19 additions and 11 deletions

View File

@ -80,17 +80,25 @@ typedef struct {
*/ */
volatile uint32_t TXADDR; 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. * @brief RX buffer offset register.
*/ */
volatile uint32_t RXADDR; volatile uint32_t RXADDR;
/** /**
* @brief RX counter register. * @brief RX counter register 0.
*/ */
volatile uint32_t RXCOUNT; volatile uint16_t RXCOUNT0;
/**
* @brief RX counter register 1.
*/
volatile uint16_t RXCOUNT1;
} stm32_usb_descriptor_t; } stm32_usb_descriptor_t;
/** /**

View File

@ -195,7 +195,7 @@ CH_IRQ_HANDLER(Vector90) {
} }
else { else {
/* Transaction mode.*/ /* Transaction mode.*/
n = USB_GET_DESCRIPTOR(ep)->TXCOUNT; n = (size_t)USB_GET_DESCRIPTOR(ep)->TXCOUNT0;
epcp->in_state->txbuf += n; epcp->in_state->txbuf += n;
epcp->in_state->txcnt += n; epcp->in_state->txcnt += n;
epcp->in_state->txsize -= n; epcp->in_state->txsize -= n;
@ -419,10 +419,10 @@ void usb_lld_init_endpoint(USBDriver *usbp, usbep_t ep) {
else else
nblocks = ((((epcp->out_maxsize - 1) | 1) + 1) / 2) << 10; nblocks = ((((epcp->out_maxsize - 1) | 1) + 1) / 2) << 10;
dp = USB_GET_DESCRIPTOR(ep); dp = USB_GET_DESCRIPTOR(ep);
dp->TXCOUNT = 0; dp->TXCOUNT0 = 0;
dp->RXCOUNT = nblocks; dp->RXCOUNT0 = nblocks;
dp->TXADDR = pm_alloc(usbp, epcp->in_maxsize); dp->TXADDR = pm_alloc(usbp, epcp->in_maxsize);
dp->RXADDR = pm_alloc(usbp, epcp->out_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; (void)usbp;
udp = USB_GET_DESCRIPTOR(ep); udp = USB_GET_DESCRIPTOR(ep);
pmap = USB_ADDR2PTR(udp->RXADDR); pmap = USB_ADDR2PTR(udp->RXADDR);
count = udp->RXCOUNT & RXCOUNT_COUNT_MASK; count = (size_t)udp->RXCOUNT0 & RXCOUNT_COUNT_MASK;
if (n > count) if (n > count)
n = count; n = count;
n = (n + 1) / 2; n = (n + 1) / 2;
@ -583,7 +583,7 @@ void usb_lld_write_packet_buffer(USBDriver *usbp, usbep_t ep,
(void)usbp; (void)usbp;
udp = USB_GET_DESCRIPTOR(ep); udp = USB_GET_DESCRIPTOR(ep);
pmap = USB_ADDR2PTR(udp->TXADDR); pmap = USB_ADDR2PTR(udp->TXADDR);
udp->TXCOUNT = n; udp->TXCOUNT0 = (uint16_t)n;
n = (n + 1) / 2; n = (n + 1) / 2;
while (n > 0) { while (n > 0) {
*pmap++ = *(uint16_t *)buf; *pmap++ = *(uint16_t *)buf;