PERFORCE change 100224 for review
Warner Losh
imp at FreeBSD.org
Wed Jun 28 19:43:06 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=100224
Change 100224 by imp at imp_lighthouse on 2006/06/28 19:23:33
Enable/disable endtx interrupt as needed.
Reset the character timeout by setting STTTO in CR when we get
a timeout. We're reading characters now!
Affected files ...
.. //depot/projects/arm/src/sys/arm/at91/uart_dev_at91usart.c#31 edit
Differences ...
==== //depot/projects/arm/src/sys/arm/at91/uart_dev_at91usart.c#31 (text+ko) ====
@@ -394,7 +394,6 @@
/* Set the receive timeout to be 1.5 character times. */
WR4(&sc->sc_bas, USART_RTOR, 12);
WR4(&sc->sc_bas, USART_CR, USART_CR_STTTO);
-
WR4(&sc->sc_bas, USART_IER, USART_CSR_TIMEOUT |
USART_CSR_RXBUFF | USART_CSR_ENDRX);
} else {
@@ -432,6 +431,7 @@
WR4(&sc->sc_bas, PDC_TPR, addr);
WR4(&sc->sc_bas, PDC_TCR, sc->sc_txdatasz);
WR4(&sc->sc_bas, PDC_PTCR, PDC_PTCR_TXTEN);
+ WR4(&sc->sc_bas, USART_IER, USART_CSR_ENDTX);
uart_unlock(sc->sc_hwmtx);
#else
for (int i = 0; i < sc->sc_txdatasz; i++)
@@ -502,12 +502,17 @@
bus_dmamap_unload(atsc->dmatag, atsc->tx_map);
}
uart_lock(sc->sc_hwmtx);
- if ((csr & USART_CSR_TXRDY) && sc->sc_txbusy) {
- ipend |= SER_INT_TXIDLE;
+ if (csr & USART_CSR_TXRDY) {
+ if (sc->sc_txbusy)
+ ipend |= SER_INT_TXIDLE;
WR4(&sc->sc_bas, USART_IDR, USART_CSR_TXRDY);
}
- if ((csr & USART_CSR_ENDTX) && sc->sc_txbusy)
- ipend |= SER_INT_TXIDLE;
+ if (csr & USART_CSR_ENDTX) {
+ if (sc->sc_txbusy)
+ ipend |= SER_INT_TXIDLE;
+ WR4(&sc->sc_bas, USART_IDR, USART_CSR_ENDTX);
+ }
+
/*
* Due to the contraints of the DMA engine present in the
* atmel chip, I can't just say I have a rx interrupt pending
@@ -565,6 +570,7 @@
uart_rx_put(sc, atsc->ping->buffer[i]);
WR4(&sc->sc_bas, PDC_RPR, atsc->ping->pa);
WR4(&sc->sc_bas, PDC_RCR, sc->sc_rxfifosz);
+ WR4(&sc->sc_bas, USART_CR, USART_CR_STTTO);
WR4(&sc->sc_bas, PDC_PTCR, PDC_PTCR_RXTEN);
ipend |= SER_INT_RXREADY;
}
More information about the p4-projects
mailing list