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;
/**
* @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 uint32_t RXCOUNT;
volatile uint16_t RXCOUNT0;
/**
* @brief RX counter register 1.
*/
volatile uint16_t RXCOUNT1;
} stm32_usb_descriptor_t;
/**

View File

@ -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;