Add register monitor debug support
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@969 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
parent
539369d52d
commit
9cc7f4e5b8
@ -82,6 +82,12 @@
|
|||||||
# define USB_FAST_INT 0
|
# define USB_FAST_INT 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Extremely detailed register debug that you would normally never want
|
||||||
|
* enabled.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#undef CONFIG_LPC214X_USBDEV_REGDEBUG
|
||||||
|
|
||||||
/* Enable reading SOF from interrupt handler vs. simply reading on demand. Probably
|
/* Enable reading SOF from interrupt handler vs. simply reading on demand. Probably
|
||||||
* a bad idea... Unless there is some issue with sampling the SOF from hardware
|
* a bad idea... Unless there is some issue with sampling the SOF from hardware
|
||||||
* asynchronously.
|
* asynchronously.
|
||||||
@ -114,7 +120,7 @@
|
|||||||
|
|
||||||
#ifndef CONFIG_USBDEV_TRACE
|
#ifndef CONFIG_USBDEV_TRACE
|
||||||
# undef usbtrace
|
# undef usbtrace
|
||||||
# define usbtrace(a,b) udbg("%04x:%04x\n", a, b)
|
# define usbtrace(a,b) ulldbg("%04x:%04x\n", a, b)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Trace error codes */
|
/* Trace error codes */
|
||||||
@ -337,6 +343,16 @@ struct lpc214x_usbdev_s
|
|||||||
* Private Function Prototypes
|
* Private Function Prototypes
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
|
/* Register operations */
|
||||||
|
|
||||||
|
#if defined(CONFIG_LPC214X_USBDEV_REGDEBUG) && defined(CONFIG_DEBUG)
|
||||||
|
static uint32 lpc214x_getreg(uint32 addr);
|
||||||
|
static void lpc214x_putreg(uint32 val, uint32 addr);
|
||||||
|
#else
|
||||||
|
# define lpc214x_getreg(addr) getreg32(addr)
|
||||||
|
# define lpc214x_putreg(val,addr) putreg32(val,addr)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Command operations */
|
/* Command operations */
|
||||||
|
|
||||||
static uint32 lpc214x_usbcmd(uint16 cmd, ubyte data);
|
static uint32 lpc214x_usbcmd(uint16 cmd, ubyte data);
|
||||||
@ -446,6 +462,39 @@ static const struct usbdev_ops_s g_devops =
|
|||||||
* Private Functions
|
* Private Functions
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Name: lpc214x_getreg
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Get the contents of an LPC214x register
|
||||||
|
*
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#if defined(CONFIG_LPC214X_USBDEV_REGDEBUG) && defined(CONFIG_DEBUG)
|
||||||
|
static uint32 lpc214x_getreg(uint32 addr)
|
||||||
|
{
|
||||||
|
uint32 val = getreg32(addr);
|
||||||
|
lldbg("%04x->%04x\n", addr, val);
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Name: lpc214x_putreg
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Set the contents of an LPC214x register to a value
|
||||||
|
*
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#if defined(CONFIG_LPC214X_USBDEV_REGDEBUG) && defined(CONFIG_DEBUG)
|
||||||
|
static void lpc214x_putreg(uint32 val, uint32 addr)
|
||||||
|
{
|
||||||
|
lldbg("%04x<-%04x\n", addr, val);
|
||||||
|
putreg32(val, addr);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Name: lpc214x_usbcmd
|
* Name: lpc214x_usbcmd
|
||||||
*
|
*
|
||||||
@ -462,19 +511,19 @@ static uint32 lpc214x_usbcmd(uint16 cmd, ubyte data)
|
|||||||
/* Disable interrupt and clear CDFULL and CCEMPTY interrupt status */
|
/* Disable interrupt and clear CDFULL and CCEMPTY interrupt status */
|
||||||
|
|
||||||
flags = irqsave();
|
flags = irqsave();
|
||||||
putreg32(USBDEV_DEVINT_CDFULL|USBDEV_DEVINT_CCEMTY, LPC214X_USBDEV_DEVINTCLR);
|
lpc214x_putreg(USBDEV_DEVINT_CDFULL|USBDEV_DEVINT_CCEMTY, LPC214X_USBDEV_DEVINTCLR);
|
||||||
|
|
||||||
/* Load commonad in USB engine */
|
/* Load commonad in USB engine */
|
||||||
|
|
||||||
putreg32(((cmd & 0xff) << 16) + CMD_USB_CMDWR, LPC214X_USBDEV_CMDCODE);
|
lpc214x_putreg(((cmd & 0xff) << 16) + CMD_USB_CMDWR, LPC214X_USBDEV_CMDCODE);
|
||||||
|
|
||||||
/* Wait until command is accepted */
|
/* Wait until command is accepted */
|
||||||
|
|
||||||
while ((getreg32(LPC214X_USBDEV_DEVINTST) & USBDEV_DEVINT_CCEMTY) == 0);
|
while ((lpc214x_getreg(LPC214X_USBDEV_DEVINTST) & USBDEV_DEVINT_CCEMTY) == 0);
|
||||||
|
|
||||||
/* Clear command register empty (CCEMPTY) interrupt */
|
/* Clear command register empty (CCEMPTY) interrupt */
|
||||||
|
|
||||||
putreg32(USBDEV_DEVINT_CCEMTY, LPC214X_USBDEV_DEVINTCLR);
|
lpc214x_putreg(USBDEV_DEVINT_CCEMTY, LPC214X_USBDEV_DEVINTCLR);
|
||||||
|
|
||||||
/* determinate next phase of the command */
|
/* determinate next phase of the command */
|
||||||
|
|
||||||
@ -484,28 +533,28 @@ static uint32 lpc214x_usbcmd(uint16 cmd, ubyte data)
|
|||||||
case CMD_USB_DEV_CONFIG:
|
case CMD_USB_DEV_CONFIG:
|
||||||
case CMD_USB_DEV_SETMODE:
|
case CMD_USB_DEV_SETMODE:
|
||||||
case CMD_USB_DEV_SETSTATUS:
|
case CMD_USB_DEV_SETSTATUS:
|
||||||
putreg32((data << 16) + CMD_USB_DATAWR, LPC214X_USBDEV_CMDCODE);
|
lpc214x_putreg((data << 16) + CMD_USB_DATAWR, LPC214X_USBDEV_CMDCODE);
|
||||||
while ((getreg32(LPC214X_USBDEV_DEVINTST) & USBDEV_DEVINT_CCEMTY) == 0);
|
while ((lpc214x_getreg(LPC214X_USBDEV_DEVINTST) & USBDEV_DEVINT_CCEMTY) == 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CMD_USB_DEV_READFRAMENO:
|
case CMD_USB_DEV_READFRAMENO:
|
||||||
case CMD_USB_DEV_READTESTREG:
|
case CMD_USB_DEV_READTESTREG:
|
||||||
putreg32((cmd << 16) + CMD_USB_DATARD, LPC214X_USBDEV_CMDCODE);
|
lpc214x_putreg((cmd << 16) + CMD_USB_DATARD, LPC214X_USBDEV_CMDCODE);
|
||||||
while ((getreg32(LPC214X_USBDEV_DEVINTST) & USBDEV_DEVINT_CDFULL) == 0);
|
while ((lpc214x_getreg(LPC214X_USBDEV_DEVINTST) & USBDEV_DEVINT_CDFULL) == 0);
|
||||||
putreg32(USBDEV_DEVINT_CDFULL, LPC214X_USBDEV_DEVINTCLR);
|
lpc214x_putreg(USBDEV_DEVINT_CDFULL, LPC214X_USBDEV_DEVINTCLR);
|
||||||
tmp = getreg32(LPC214X_USBDEV_CMDDATA);
|
tmp = lpc214x_getreg(LPC214X_USBDEV_CMDDATA);
|
||||||
putreg32((cmd << 16) + CMD_USB_DATARD, LPC214X_USBDEV_CMDCODE);
|
lpc214x_putreg((cmd << 16) + CMD_USB_DATARD, LPC214X_USBDEV_CMDCODE);
|
||||||
while ((getreg32(LPC214X_USBDEV_DEVINTST) & USBDEV_DEVINT_CDFULL) == 0);
|
while ((lpc214x_getreg(LPC214X_USBDEV_DEVINTST) & USBDEV_DEVINT_CDFULL) == 0);
|
||||||
tmp |= getreg32(LPC214X_USBDEV_CMDDATA) << 8;
|
tmp |= lpc214x_getreg(LPC214X_USBDEV_CMDDATA) << 8;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CMD_USB_DEV_GETSTATUS:
|
case CMD_USB_DEV_GETSTATUS:
|
||||||
case CMD_USB_DEV_GETERRORCODE:
|
case CMD_USB_DEV_GETERRORCODE:
|
||||||
case CMD_USB_DEV_READERRORSTATUS:
|
case CMD_USB_DEV_READERRORSTATUS:
|
||||||
case CMD_USB_EP_CLRBUFFER:
|
case CMD_USB_EP_CLRBUFFER:
|
||||||
putreg32((cmd << 16) + CMD_USB_DATARD, LPC214X_USBDEV_CMDCODE);
|
lpc214x_putreg((cmd << 16) + CMD_USB_DATARD, LPC214X_USBDEV_CMDCODE);
|
||||||
while ((getreg32(LPC214X_USBDEV_DEVINTST) & USBDEV_DEVINT_CDFULL) == 0);
|
while ((lpc214x_getreg(LPC214X_USBDEV_DEVINTST) & USBDEV_DEVINT_CDFULL) == 0);
|
||||||
tmp = getreg32(LPC214X_USBDEV_CMDDATA);
|
tmp = lpc214x_getreg(LPC214X_USBDEV_CMDDATA);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -513,14 +562,14 @@ static uint32 lpc214x_usbcmd(uint16 cmd, ubyte data)
|
|||||||
{
|
{
|
||||||
case CMD_USB_EP_SELECT:
|
case CMD_USB_EP_SELECT:
|
||||||
case CMD_USB_EP_SELECTCLEAR:
|
case CMD_USB_EP_SELECTCLEAR:
|
||||||
putreg32((cmd << 16) + CMD_USB_DATARD, LPC214X_USBDEV_CMDCODE);
|
lpc214x_putreg((cmd << 16) + CMD_USB_DATARD, LPC214X_USBDEV_CMDCODE);
|
||||||
while ((getreg32(LPC214X_USBDEV_DEVINTST) & USBDEV_DEVINT_CDFULL) == 0);
|
while ((lpc214x_getreg(LPC214X_USBDEV_DEVINTST) & USBDEV_DEVINT_CDFULL) == 0);
|
||||||
tmp = getreg32(LPC214X_USBDEV_CMDDATA);
|
tmp = lpc214x_getreg(LPC214X_USBDEV_CMDDATA);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CMD_USB_EP_SETSTATUS:
|
case CMD_USB_EP_SETSTATUS:
|
||||||
putreg32((data << 16) + CMD_USB_DATAWR, LPC214X_USBDEV_CMDCODE);
|
lpc214x_putreg((data << 16) + CMD_USB_DATAWR, LPC214X_USBDEV_CMDCODE);
|
||||||
while ((getreg32(LPC214X_USBDEV_DEVINTST) & USBDEV_DEVINT_CCEMTY) == 0);
|
while ((lpc214x_getreg(LPC214X_USBDEV_DEVINTST) & USBDEV_DEVINT_CCEMTY) == 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -544,7 +593,7 @@ static void lpc214x_epwrite(ubyte epphy, const ubyte *data, uint32 nbytes)
|
|||||||
{
|
{
|
||||||
/* Set the write enable bit for this physical EP address */
|
/* Set the write enable bit for this physical EP address */
|
||||||
|
|
||||||
putreg32(((epphy << 1) & LPC214X_USBCTRL_EPMASK) | LPC214X_USBCTRL_WREN,
|
lpc214x_putreg(((epphy << 1) & LPC214X_USBCTRL_EPMASK) | LPC214X_USBCTRL_WREN,
|
||||||
LPC214X_USBDEV_CTRL);
|
LPC214X_USBDEV_CTRL);
|
||||||
|
|
||||||
/* Set the transmit packet length (nbytes must be less than 2048) */
|
/* Set the transmit packet length (nbytes must be less than 2048) */
|
||||||
@ -559,20 +608,20 @@ static void lpc214x_epwrite(ubyte epphy, const ubyte *data, uint32 nbytes)
|
|||||||
|
|
||||||
if (nbytes)
|
if (nbytes)
|
||||||
{
|
{
|
||||||
putreg32(*data++, LPC214X_USBDEV_TXDATA);
|
lpc214x_putreg(*data++, LPC214X_USBDEV_TXDATA);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Zero length packet */
|
/* Zero length packet */
|
||||||
|
|
||||||
putreg32(0, LPC214X_USBDEV_TXDATA);
|
lpc214x_putreg(0, LPC214X_USBDEV_TXDATA);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while ((getreg32(LPC214X_USBDEV_CTRL) & LPC214X_USBCTRL_WREN) != 0);
|
while ((lpc214x_getreg(LPC214X_USBDEV_CTRL) & LPC214X_USBCTRL_WREN) != 0);
|
||||||
|
|
||||||
/* Done */
|
/* Done */
|
||||||
|
|
||||||
putreg32(0, LPC214X_USBDEV_CTRL);
|
lpc214x_putreg(0, LPC214X_USBDEV_CTRL);
|
||||||
(void)lpc214x_usbcmd(CMD_USB_EP_SELECT | epphy, 0);
|
(void)lpc214x_usbcmd(CMD_USB_EP_SELECT | epphy, 0);
|
||||||
(void)lpc214x_usbcmd(CMD_USB_EP_VALIDATEBUFFER, 0);
|
(void)lpc214x_usbcmd(CMD_USB_EP_VALIDATEBUFFER, 0);
|
||||||
}
|
}
|
||||||
@ -593,22 +642,22 @@ static int lpc214x_epread(ubyte epphy, ubyte *data, uint32 nbytes)
|
|||||||
|
|
||||||
/* Set the read enable bit for this physical EP address */
|
/* Set the read enable bit for this physical EP address */
|
||||||
|
|
||||||
putreg32(((epphy << 1) & LPC214X_USBCTRL_EPMASK) | LPC214X_USBCTRL_RDEN,
|
lpc214x_putreg(((epphy << 1) & LPC214X_USBCTRL_EPMASK) | LPC214X_USBCTRL_RDEN,
|
||||||
LPC214X_USBDEV_CTRL);
|
LPC214X_USBDEV_CTRL);
|
||||||
|
|
||||||
/* Wait for packet buffer ready for reading */
|
/* Wait for packet buffer ready for reading */
|
||||||
|
|
||||||
while ((getreg32(LPC214X_USBDEV_RXPLEN) & USBDEV_RXPLEN_PKTRDY) == 0);
|
while ((lpc214x_getreg(LPC214X_USBDEV_RXPLEN) & USBDEV_RXPLEN_PKTRDY) == 0);
|
||||||
|
|
||||||
/* Get the about of data to be read */
|
/* Get the about of data to be read */
|
||||||
|
|
||||||
pktlen = getreg32(LPC214X_USBDEV_RXPLEN) & USBDEV_RXPLEN_PKTLENGTH;
|
pktlen = lpc214x_getreg(LPC214X_USBDEV_RXPLEN) & USBDEV_RXPLEN_PKTLENGTH;
|
||||||
|
|
||||||
/* Read data from input buffer while read data is valid (DV) */
|
/* Read data from input buffer while read data is valid (DV) */
|
||||||
|
|
||||||
while ((getreg32(LPC214X_USBDEV_RXPLEN) & USBDEV_RXPLEN_DV) != 0)
|
while ((lpc214x_getreg(LPC214X_USBDEV_RXPLEN) & USBDEV_RXPLEN_DV) != 0)
|
||||||
{
|
{
|
||||||
value = getreg32(LPC214X_USBDEV_RXDATA);
|
value = lpc214x_getreg(LPC214X_USBDEV_RXDATA);
|
||||||
if (data)
|
if (data)
|
||||||
{
|
{
|
||||||
*data++ = value;
|
*data++ = value;
|
||||||
@ -617,7 +666,7 @@ static int lpc214x_epread(ubyte epphy, ubyte *data, uint32 nbytes)
|
|||||||
|
|
||||||
/* Done */
|
/* Done */
|
||||||
|
|
||||||
putreg32(0, LPC214X_USBDEV_CTRL);
|
lpc214x_putreg(0, LPC214X_USBDEV_CTRL);
|
||||||
(void)lpc214x_usbcmd(CMD_USB_EP_SELECT | epphy, 0);
|
(void)lpc214x_usbcmd(CMD_USB_EP_SELECT | epphy, 0);
|
||||||
result = lpc214x_usbcmd(CMD_USB_EP_CLRBUFFER, 0);
|
result = lpc214x_usbcmd(CMD_USB_EP_CLRBUFFER, 0);
|
||||||
|
|
||||||
@ -857,26 +906,26 @@ static void lpc214x_eprealize(struct lpc214x_ep_s *privep, boolean prio, uint32
|
|||||||
|
|
||||||
/* Clear realize interrupt bit */
|
/* Clear realize interrupt bit */
|
||||||
|
|
||||||
putreg32(USBDEV_DEVINT_EPRLZED, LPC214X_USBDEV_DEVINTCLR);
|
lpc214x_putreg(USBDEV_DEVINT_EPRLZED, LPC214X_USBDEV_DEVINTCLR);
|
||||||
|
|
||||||
/* Realize the endpoint */
|
/* Realize the endpoint */
|
||||||
|
|
||||||
reg = getreg32(LPC214X_USBDEV_REEP);
|
reg = lpc214x_getreg(LPC214X_USBDEV_REEP);
|
||||||
reg |= (1 << privep->epphy);
|
reg |= (1 << privep->epphy);
|
||||||
putreg32(reg, LPC214X_USBDEV_REEP);
|
lpc214x_putreg(reg, LPC214X_USBDEV_REEP);
|
||||||
|
|
||||||
/* Set endpoint maximum packet size */
|
/* Set endpoint maximum packet size */
|
||||||
|
|
||||||
putreg(privep->epphy, LPC214X_USBDEV_EPIND);
|
lpc214x_putreg(privep->epphy, LPC214X_USBDEV_EPIND);
|
||||||
putreg(packetsize, LPC214X_USBDEV_MAXPSIZE);
|
lpc214x_putreg(packetsize, LPC214X_USBDEV_MAXPSIZE);
|
||||||
|
|
||||||
/* Wait for Realize complete */
|
/* Wait for Realize complete */
|
||||||
|
|
||||||
while ((getreg32(LPC214X_USBDEV_DEVINTST) & USBDEV_DEVINT_EPRLZED) == 0);
|
while ((lpc214x_getreg(LPC214X_USBDEV_DEVINTST) & USBDEV_DEVINT_EPRLZED) == 0);
|
||||||
|
|
||||||
/* Clear realize interrupt bit */
|
/* Clear realize interrupt bit */
|
||||||
|
|
||||||
putreg32(USBDEV_DEVINT_EPRLZED,LPC214X_USBDEV_DEVINTCLR);
|
lpc214x_putreg(USBDEV_DEVINT_EPRLZED,LPC214X_USBDEV_DEVINTCLR);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
@ -891,15 +940,15 @@ static ubyte lpc214x_epclrinterrupt(ubyte epphy)
|
|||||||
{
|
{
|
||||||
/* Clear the endpoint interrupt */
|
/* Clear the endpoint interrupt */
|
||||||
|
|
||||||
putreg32(1 << epphy, LPC214X_USBDEV_EPINTCLR);
|
lpc214x_putreg(1 << epphy, LPC214X_USBDEV_EPINTCLR);
|
||||||
|
|
||||||
/* Wait for data in the command data register */
|
/* Wait for data in the command data register */
|
||||||
|
|
||||||
while ((getreg32(LPC214X_USBDEV_DEVINTST) & USBDEV_DEVINT_CDFULL) == 0);
|
while ((lpc214x_getreg(LPC214X_USBDEV_DEVINTST) & USBDEV_DEVINT_CDFULL) == 0);
|
||||||
|
|
||||||
/* Return the value of the command data register */
|
/* Return the value of the command data register */
|
||||||
|
|
||||||
return getreg32(LPC214X_USBDEV_CMDDATA);
|
return lpc214x_getreg(LPC214X_USBDEV_CMDDATA);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
@ -921,9 +970,9 @@ static inline void lpc214x_ep0configure(struct lpc214x_usbdev_s *priv)
|
|||||||
|
|
||||||
/* Enable EP0 interrupts (not DMA) */
|
/* Enable EP0 interrupts (not DMA) */
|
||||||
|
|
||||||
inten = getreg32(LPC214X_USBDEV_EPINTEN);
|
inten = lpc214x_getreg(LPC214X_USBDEV_EPINTEN);
|
||||||
inten |= 3; /* EP0 Rx and Tx */
|
inten |= 3; /* EP0 Rx and Tx */
|
||||||
putreg32(inten, LPC214X_USBDEV_EPINTEN);
|
lpc214x_putreg(inten, LPC214X_USBDEV_EPINTEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
@ -940,11 +989,11 @@ static inline void lpc214x_dmareset(uint32 enable)
|
|||||||
|
|
||||||
/* Disable All DMA interrupts */
|
/* Disable All DMA interrupts */
|
||||||
|
|
||||||
putreg32(0, LPC214X_USBDEV_DMAINTEN);
|
lpc214x_putreg(0, LPC214X_USBDEV_DMAINTEN);
|
||||||
|
|
||||||
/* DMA Disable */
|
/* DMA Disable */
|
||||||
|
|
||||||
putreg32(0xffffffff, LPC214X_USBDEV_EPDMADIS);
|
lpc214x_putreg(0xffffffff, LPC214X_USBDEV_EPDMADIS);
|
||||||
|
|
||||||
/* DMA Request clear */
|
/* DMA Request clear */
|
||||||
|
|
||||||
@ -971,7 +1020,7 @@ static inline void lpc214x_dmareset(uint32 enable)
|
|||||||
|
|
||||||
/* Set USB UDCA Head register */
|
/* Set USB UDCA Head register */
|
||||||
|
|
||||||
putreg32((uint32)USB_UDCA, LPC214X_USBDEV_UDCAH);
|
lpc214x_putreg((uint32)USB_UDCA, LPC214X_USBDEV_UDCAH);
|
||||||
|
|
||||||
/* Invalidate all DMA descriptors */
|
/* Invalidate all DMA descriptors */
|
||||||
|
|
||||||
@ -982,7 +1031,7 @@ static inline void lpc214x_dmareset(uint32 enable)
|
|||||||
|
|
||||||
/* Enable DMA interrupts */
|
/* Enable DMA interrupts */
|
||||||
|
|
||||||
putreg32(enable, LPC214X_USBDEV_DMAINTEN);
|
lpc214x_putreg(enable, LPC214X_USBDEV_DMAINTEN);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -998,16 +1047,16 @@ static void lpc214x_usbreset(struct lpc214x_usbdev_s *priv)
|
|||||||
{
|
{
|
||||||
/* Disable all endpoint interrupts */
|
/* Disable all endpoint interrupts */
|
||||||
|
|
||||||
putreg32(0, LPC214X_USBDEV_EPINTEN);
|
lpc214x_putreg(0, LPC214X_USBDEV_EPINTEN);
|
||||||
|
|
||||||
/* Frame is Hp interrupt */
|
/* Frame is Hp interrupt */
|
||||||
|
|
||||||
putreg32(1, LPC214X_USBDEV_DEVINTPRI);
|
lpc214x_putreg(1, LPC214X_USBDEV_DEVINTPRI);
|
||||||
|
|
||||||
/* Clear all pending interrupts */
|
/* Clear all pending interrupts */
|
||||||
|
|
||||||
putreg32(0xffffffff, LPC214X_USBDEV_EPINTCLR);
|
lpc214x_putreg(0xffffffff, LPC214X_USBDEV_EPINTCLR);
|
||||||
putreg32(0xffffffff, LPC214X_USBDEV_DEVINTCLR);
|
lpc214x_putreg(0xffffffff, LPC214X_USBDEV_DEVINTCLR);
|
||||||
|
|
||||||
/* Periperhal address is needed */
|
/* Periperhal address is needed */
|
||||||
|
|
||||||
@ -1032,7 +1081,7 @@ static void lpc214x_usbreset(struct lpc214x_usbdev_s *priv)
|
|||||||
|
|
||||||
/* Enable Device interrupts */
|
/* Enable Device interrupts */
|
||||||
|
|
||||||
putreg32(USB_SLOW_INT|USB_DEVSTATUS_INT|USB_FAST_INT|USB_FRAME_INT|USB_ERROR_INT,
|
lpc214x_putreg(USB_SLOW_INT|USB_DEVSTATUS_INT|USB_FAST_INT|USB_FRAME_INT|USB_ERROR_INT,
|
||||||
LPC214X_USBDEV_DEVINTEN);
|
LPC214X_USBDEV_DEVINTEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1477,12 +1526,12 @@ static int lpc214x_usbinterrupt(int irq, FAR void *context)
|
|||||||
|
|
||||||
/* Read the device interrupt status register */
|
/* Read the device interrupt status register */
|
||||||
|
|
||||||
devintstatus = getreg32(LPC214X_USBDEV_DEVINTST);
|
devintstatus = lpc214x_getreg(LPC214X_USBDEV_DEVINTST);
|
||||||
|
|
||||||
#ifdef CONFIG_LPC214X_USBDEV_DMA
|
#ifdef CONFIG_LPC214X_USBDEV_DMA
|
||||||
/* Check for low priority and high priority (non-DMA) interrupts */
|
/* Check for low priority and high priority (non-DMA) interrupts */
|
||||||
|
|
||||||
if ((getreg(LPC214X_USBDEV_INTST) & (USBDEV_INTST_REQLP|USBDEV_INTST_REQHP)) != 0)
|
if ((lpc214x_getreg(LPC214X_USBDEV_INTST) & (USBDEV_INTST_REQLP|USBDEV_INTST_REQHP)) != 0)
|
||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_LPC214X_USBDEV_EPFAST_INTERRUPT
|
#ifdef CONFIG_LPC214X_USBDEV_EPFAST_INTERRUPT
|
||||||
@ -1492,7 +1541,7 @@ static int lpc214x_usbinterrupt(int irq, FAR void *context)
|
|||||||
{
|
{
|
||||||
/* Clear Fast EP interrupt */
|
/* Clear Fast EP interrupt */
|
||||||
|
|
||||||
putreg32(USBDEV_DEVINT_EPFAST, LPC214X_USBDEV_DEVINTCLR);
|
lpc214x_putreg(USBDEV_DEVINT_EPFAST, LPC214X_USBDEV_DEVINTCLR);
|
||||||
usbtrace(TRACE_INTDECODE(LPC214X_TRACEINTID_EPFAST), 0);
|
usbtrace(TRACE_INTDECODE(LPC214X_TRACEINTID_EPFAST), 0);
|
||||||
|
|
||||||
/* Do what? */
|
/* Do what? */
|
||||||
@ -1509,7 +1558,7 @@ static int lpc214x_usbinterrupt(int irq, FAR void *context)
|
|||||||
|
|
||||||
/* Clear the error interrupt */
|
/* Clear the error interrupt */
|
||||||
|
|
||||||
putreg32(USBDEV_DEVINT_EPRINT, LPC214X_USBDEV_DEVINTCLR);
|
lpc214x_putreg(USBDEV_DEVINT_EPRINT, LPC214X_USBDEV_DEVINTCLR);
|
||||||
|
|
||||||
/* And show what error occurred */
|
/* And show what error occurred */
|
||||||
|
|
||||||
@ -1525,7 +1574,7 @@ static int lpc214x_usbinterrupt(int irq, FAR void *context)
|
|||||||
{
|
{
|
||||||
/* Clear the frame interrupt */
|
/* Clear the frame interrupt */
|
||||||
|
|
||||||
putreg32(USBDEV_DEVINT_FRAME, LPC214X_USBDEV_DEVINTCLR);
|
lpc214x_putreg(USBDEV_DEVINT_FRAME, LPC214X_USBDEV_DEVINTCLR);
|
||||||
usbtrace(TRACE_INTDECODE(LPC214X_TRACEINTID_FRAME), 0);
|
usbtrace(TRACE_INTDECODE(LPC214X_TRACEINTID_FRAME), 0);
|
||||||
|
|
||||||
/* Then read the start of frame value */
|
/* Then read the start of frame value */
|
||||||
@ -1540,7 +1589,7 @@ static int lpc214x_usbinterrupt(int irq, FAR void *context)
|
|||||||
{
|
{
|
||||||
/* Clear Device status interrupt */
|
/* Clear Device status interrupt */
|
||||||
|
|
||||||
putreg32(USBDEV_DEVINT_DEVSTAT, LPC214X_USBDEV_DEVINTCLR);
|
lpc214x_putreg(USBDEV_DEVINT_DEVSTAT, LPC214X_USBDEV_DEVINTCLR);
|
||||||
|
|
||||||
/* Get device status */
|
/* Get device status */
|
||||||
|
|
||||||
@ -1601,14 +1650,14 @@ static int lpc214x_usbinterrupt(int irq, FAR void *context)
|
|||||||
{
|
{
|
||||||
/* Clear Slow EP interrupt */
|
/* Clear Slow EP interrupt */
|
||||||
|
|
||||||
putreg32(USBDEV_DEVINT_EPSLOW, LPC214X_USBDEV_DEVINTCLR);
|
lpc214x_putreg(USBDEV_DEVINT_EPSLOW, LPC214X_USBDEV_DEVINTCLR);
|
||||||
usbtrace(TRACE_INTDECODE(LPC214X_TRACEINTID_EPSLOW), 0);
|
usbtrace(TRACE_INTDECODE(LPC214X_TRACEINTID_EPSLOW), 0);
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
/* Read the endpoint interrupt status register */
|
/* Read the endpoint interrupt status register */
|
||||||
|
|
||||||
epintstatus = getreg32(LPC214X_USBDEV_EPINTST);
|
epintstatus = lpc214x_getreg(LPC214X_USBDEV_EPINTST);
|
||||||
|
|
||||||
/* Loop twice: Process software high priority interrupts
|
/* Loop twice: Process software high priority interrupts
|
||||||
* on the first pass and low priority interrupts on the
|
* on the first pass and low priority interrupts on the
|
||||||
@ -1727,7 +1776,7 @@ static int lpc214x_usbinterrupt(int irq, FAR void *context)
|
|||||||
|
|
||||||
/* Check for DMA interrupts */
|
/* Check for DMA interrupts */
|
||||||
|
|
||||||
if ((getreg(LPC214X_USBDEV_INTST) & USBDEV_INTST_REQDMA) != 0)
|
if ((lpc214x_getreg(LPC214X_USBDEV_INTST) & USBDEV_INTST_REQDMA) != 0)
|
||||||
{
|
{
|
||||||
/* First Software High priority and then low priority */
|
/* First Software High priority and then low priority */
|
||||||
|
|
||||||
@ -1736,26 +1785,26 @@ static int lpc214x_usbinterrupt(int irq, FAR void *context)
|
|||||||
/* Collect the DMA interrupt sources */
|
/* Collect the DMA interrupt sources */
|
||||||
|
|
||||||
dmaintstatus = 0;
|
dmaintstatus = 0;
|
||||||
tmp = getreg32(LPC214X_USBDEV_EOTINTST);
|
tmp = lpc214x_getreg(LPC214X_USBDEV_EOTINTST);
|
||||||
if (getreg32(LPC214X_USBDEV_DMAINTEN) & 1)
|
if (lpc214x_getreg(LPC214X_USBDEV_DMAINTEN) & 1)
|
||||||
{
|
{
|
||||||
dmaintstatus |= tmp;
|
dmaintstatus |= tmp;
|
||||||
}
|
}
|
||||||
putreg32(tmp, LPC214X_USBDEV_EOTINTCLR);
|
lpc214x_putreg(tmp, LPC214X_USBDEV_EOTINTCLR);
|
||||||
|
|
||||||
tmp = getreg32(LPC214X_USBDEV_NDDRINTST);
|
tmp = lpc214x_getreg(LPC214X_USBDEV_NDDRINTST);
|
||||||
if (getreg32(LPC214X_USBDEV_DMAINTEN) & 2)
|
if (lpc214x_getreg(LPC214X_USBDEV_DMAINTEN) & 2)
|
||||||
{
|
{
|
||||||
dmaintstatus |= tmp;
|
dmaintstatus |= tmp;
|
||||||
}
|
}
|
||||||
putreg32(tmp, LPC214X_USBDEV_NDDRINTCLR);
|
lpc214x_putreg(tmp, LPC214X_USBDEV_NDDRINTCLR);
|
||||||
|
|
||||||
tmp = getreg32(LPC214X_USBDEV_SYSERRINTST);
|
tmp = lpc214x_getreg(LPC214X_USBDEV_SYSERRINTST);
|
||||||
if (getreg32(LPC214X_USBDEV_DMAINTEN) & 4)
|
if (lpc214x_getreg(LPC214X_USBDEV_DMAINTEN) & 4)
|
||||||
{
|
{
|
||||||
dmaintstatus |= tmp;
|
dmaintstatus |= tmp;
|
||||||
}
|
}
|
||||||
putreg32(tmp, LPC214X_USBDEV_SYSERRINTCLR);
|
lpc214x_putreg(tmp, LPC214X_USBDEV_SYSERRINTCLR);
|
||||||
|
|
||||||
/* Loop twice: Process software high priority interrupts on the
|
/* Loop twice: Process software high priority interrupts on the
|
||||||
* first pass and low priority interrupts on the second.
|
* first pass and low priority interrupts on the second.
|
||||||
@ -1894,7 +1943,7 @@ static void lpc214x_dmarestart(ubyte epphy, uint32 descndx)
|
|||||||
|
|
||||||
/* Enable DMA transfer on the endpoint */
|
/* Enable DMA transfer on the endpoint */
|
||||||
|
|
||||||
putreg32(1 << epph, LPC214X_USBDEV_EPDMAEN);
|
lpc214x_putreg(1 << epph, LPC214X_USBDEV_EPDMAEN);
|
||||||
|
|
||||||
/* Check the state of IN/OUT EP buffer */
|
/* Check the state of IN/OUT EP buffer */
|
||||||
|
|
||||||
@ -1962,13 +2011,13 @@ static int lpc214x_epconfigure(FAR struct usbdev_ep_s *ep,
|
|||||||
#ifdef CONFIG_LPC214X_USBDEV_DMA
|
#ifdef CONFIG_LPC214X_USBDEV_DMA
|
||||||
/* Enable DMA Ep interrupt (WO) */
|
/* Enable DMA Ep interrupt (WO) */
|
||||||
|
|
||||||
putreg32(1 << epphy, LPC214X_USBDEV_EPDMAEN);
|
lpc214x_putreg(1 << epphy, LPC214X_USBDEV_EPDMAEN);
|
||||||
#else
|
#else
|
||||||
/* Enable Ep interrupt (R/W) */
|
/* Enable Ep interrupt (R/W) */
|
||||||
|
|
||||||
inten = getreg32(LPC214X_USBDEV_EPINTEN);
|
inten = lpc214x_getreg(LPC214X_USBDEV_EPINTEN);
|
||||||
inten |= (1 << epphy);
|
inten |= (1 << epphy);
|
||||||
putreg32(inten, LPC214X_USBDEV_EPINTEN);
|
lpc214x_putreg(inten, LPC214X_USBDEV_EPINTEN);
|
||||||
#endif
|
#endif
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
@ -2004,15 +2053,15 @@ static int lpc214x_epdisable(FAR struct usbdev_ep_s *ep)
|
|||||||
|
|
||||||
/* Disable endpoint and interrupt */
|
/* Disable endpoint and interrupt */
|
||||||
|
|
||||||
reg = getreg32(LPC214X_USBDEV_REEP);
|
reg = lpc214x_getreg(LPC214X_USBDEV_REEP);
|
||||||
reg &= ~mask;
|
reg &= ~mask;
|
||||||
putreg32(reg, LPC214X_USBDEV_REEP);
|
lpc214x_putreg(reg, LPC214X_USBDEV_REEP);
|
||||||
|
|
||||||
putreg32(mask, LPC214X_USBDEV_EPDMADIS);
|
lpc214x_putreg(mask, LPC214X_USBDEV_EPDMADIS);
|
||||||
|
|
||||||
reg = getreg32(LPC214X_USBDEV_EPINTEN);
|
reg = lpc214x_getreg(LPC214X_USBDEV_EPINTEN);
|
||||||
reg &= ~mask;
|
reg &= ~mask;
|
||||||
putreg32(reg, LPC214X_USBDEV_EPINTEN);
|
lpc214x_putreg(reg, LPC214X_USBDEV_EPINTEN);
|
||||||
|
|
||||||
irqrestore(flags);
|
irqrestore(flags);
|
||||||
return OK;
|
return OK;
|
||||||
@ -2540,15 +2589,15 @@ void up_usbinitialize(void)
|
|||||||
|
|
||||||
/* Turn on USB power and clocking */
|
/* Turn on USB power and clocking */
|
||||||
|
|
||||||
reg = getreg32(LPC214X_PCON_PCONP);
|
reg = lpc214x_getreg(LPC214X_PCON_PCONP);
|
||||||
reg |= LPC214X_PCONP_PCUSB;
|
reg |= LPC214X_PCONP_PCUSB;
|
||||||
putreg32(reg, LPC214X_PCON_PCONP);
|
lpc214x_putreg(reg, LPC214X_PCON_PCONP);
|
||||||
|
|
||||||
/* Enable Vbus sense and Connect */
|
/* Enable Vbus sense and Connect */
|
||||||
|
|
||||||
reg = getreg32(LPC214X_PINSEL1);
|
reg = lpc214x_getreg(LPC214X_PINSEL1);
|
||||||
reg = (reg & LPC214X_USBDEV_PINMASK) | LPC214X_USBDEV_PINSEL;
|
reg = (reg & LPC214X_USBDEV_PINMASK) | LPC214X_USBDEV_PINSEL;
|
||||||
putreg32(reg, LPC214X_PINSEL1);
|
lpc214x_putreg(reg, LPC214X_PINSEL1);
|
||||||
|
|
||||||
/* Attach USB controller interrupt handler */
|
/* Attach USB controller interrupt handler */
|
||||||
|
|
||||||
@ -2615,9 +2664,9 @@ void up_usbuninitialize(void)
|
|||||||
|
|
||||||
/* Turn off USB power and clocking */
|
/* Turn off USB power and clocking */
|
||||||
|
|
||||||
reg = getreg32(LPC214X_PCON_PCONP);
|
reg = lpc214x_getreg(LPC214X_PCON_PCONP);
|
||||||
reg &= ~LPC214X_PCONP_PCUSB;
|
reg &= ~LPC214X_PCONP_PCUSB;
|
||||||
putreg32(reg, LPC214X_PCON_PCONP);
|
lpc214x_putreg(reg, LPC214X_PCON_PCONP);
|
||||||
irqrestore(flags);
|
irqrestore(flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user