<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Bug Report : UART Ring Buffer : Interrupt Handler : LPCOpen v2.19 : LPC824 in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/Bug-Report-UART-Ring-Buffer-Interrupt-Handler-LPCOpen-v2-19/m-p/586152#M21389</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by alexgoldstone on Fri Mar 04 10:29:20 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;The &lt;/SPAN&gt;&lt;STRONG&gt;Chip_UART_SendRB&lt;/STRONG&gt;&lt;SPAN&gt; function correctly disables the &lt;/SPAN&gt;&lt;STRONG&gt;TXRDY&lt;/STRONG&gt;&lt;SPAN&gt; interrupt when you are filling the transmit buffer.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;Chip_UART_IRQRBHandler&lt;/STRONG&gt;&lt;SPAN&gt; only checks the &lt;/SPAN&gt;&lt;STRONG&gt;TXRDY&lt;/STRONG&gt;&lt;SPAN&gt; status and does not first check if the interrupt is enabled.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This means that if you get an RX Interrupt while you are filling the FIFO then &lt;/SPAN&gt;&lt;STRONG&gt;Chip_UART_IRQRBHandler&lt;/STRONG&gt;&lt;SPAN&gt; incorrectly calls &lt;/SPAN&gt;&lt;STRONG&gt;Chip_UART_TXIntHandlerRB&lt;/STRONG&gt;&lt;SPAN&gt; causing the buffer pointers to overflow.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The &lt;/SPAN&gt;&lt;STRONG&gt;Chip_UART_IRQRBHandler&lt;/STRONG&gt;&lt;SPAN&gt; should be changed from:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
/* UART receive/transmit interrupt handler for ring buffers */
void Chip_UART_IRQRBHandler(LPC_USART_T *pUART, RINGBUFF_T *pRXRB, RINGBUFF_T *pTXRB)
{
/* Handle transmit interrupt if enabled */
if ((Chip_UART_GetStatus(pUART) &amp;amp; UART_STAT_TXRDY) != 0) {
Chip_UART_TXIntHandlerRB(pUART, pTXRB);

/* Disable transmit interrupt if the ring buffer is empty */
if (RingBuffer_IsEmpty(pTXRB)) {
Chip_UART_IntDisable(pUART, UART_INTEN_TXRDY);
}
}

/* Handle receive interrupt */
Chip_UART_RXIntHandlerRB(pUART, pRXRB);
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;to:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
/* UART receive/transmit interrupt handler for ring buffers */
void Chip_UART_IRQRBHandler(LPC_USART_T *pUART, RINGBUFF_T *pRXRB, RINGBUFF_T *pTXRB)
{
/* Handle transmit interrupt if enabled */
[color=#f00]if ((Chip_UART_GetIntsEnabled(pUART) &amp;amp; UART_INTEN_TXRDY) != 0) {[/color]
if ((Chip_UART_GetStatus(pUART) &amp;amp; UART_STAT_TXRDY) != 0) {
Chip_UART_TXIntHandlerRB(pUART, pTXRB);

/* Disable transmit interrupt if the ring buffer is empty */
if (RingBuffer_IsEmpty(pTXRB)) {
Chip_UART_IntDisable(pUART, UART_INTEN_TXRDY);
}
}
[color=#f00]}[/color]

/* Handle receive interrupt */
Chip_UART_RXIntHandlerRB(pUART, pRXRB);
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 20:27:11 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T20:27:11Z</dc:date>
    <item>
      <title>Bug Report : UART Ring Buffer : Interrupt Handler : LPCOpen v2.19 : LPC824</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Bug-Report-UART-Ring-Buffer-Interrupt-Handler-LPCOpen-v2-19/m-p/586152#M21389</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by alexgoldstone on Fri Mar 04 10:29:20 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;The &lt;/SPAN&gt;&lt;STRONG&gt;Chip_UART_SendRB&lt;/STRONG&gt;&lt;SPAN&gt; function correctly disables the &lt;/SPAN&gt;&lt;STRONG&gt;TXRDY&lt;/STRONG&gt;&lt;SPAN&gt; interrupt when you are filling the transmit buffer.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;Chip_UART_IRQRBHandler&lt;/STRONG&gt;&lt;SPAN&gt; only checks the &lt;/SPAN&gt;&lt;STRONG&gt;TXRDY&lt;/STRONG&gt;&lt;SPAN&gt; status and does not first check if the interrupt is enabled.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This means that if you get an RX Interrupt while you are filling the FIFO then &lt;/SPAN&gt;&lt;STRONG&gt;Chip_UART_IRQRBHandler&lt;/STRONG&gt;&lt;SPAN&gt; incorrectly calls &lt;/SPAN&gt;&lt;STRONG&gt;Chip_UART_TXIntHandlerRB&lt;/STRONG&gt;&lt;SPAN&gt; causing the buffer pointers to overflow.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The &lt;/SPAN&gt;&lt;STRONG&gt;Chip_UART_IRQRBHandler&lt;/STRONG&gt;&lt;SPAN&gt; should be changed from:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
/* UART receive/transmit interrupt handler for ring buffers */
void Chip_UART_IRQRBHandler(LPC_USART_T *pUART, RINGBUFF_T *pRXRB, RINGBUFF_T *pTXRB)
{
/* Handle transmit interrupt if enabled */
if ((Chip_UART_GetStatus(pUART) &amp;amp; UART_STAT_TXRDY) != 0) {
Chip_UART_TXIntHandlerRB(pUART, pTXRB);

/* Disable transmit interrupt if the ring buffer is empty */
if (RingBuffer_IsEmpty(pTXRB)) {
Chip_UART_IntDisable(pUART, UART_INTEN_TXRDY);
}
}

/* Handle receive interrupt */
Chip_UART_RXIntHandlerRB(pUART, pRXRB);
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;to:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
/* UART receive/transmit interrupt handler for ring buffers */
void Chip_UART_IRQRBHandler(LPC_USART_T *pUART, RINGBUFF_T *pRXRB, RINGBUFF_T *pTXRB)
{
/* Handle transmit interrupt if enabled */
[color=#f00]if ((Chip_UART_GetIntsEnabled(pUART) &amp;amp; UART_INTEN_TXRDY) != 0) {[/color]
if ((Chip_UART_GetStatus(pUART) &amp;amp; UART_STAT_TXRDY) != 0) {
Chip_UART_TXIntHandlerRB(pUART, pTXRB);

/* Disable transmit interrupt if the ring buffer is empty */
if (RingBuffer_IsEmpty(pTXRB)) {
Chip_UART_IntDisable(pUART, UART_INTEN_TXRDY);
}
}
[color=#f00]}[/color]

/* Handle receive interrupt */
Chip_UART_RXIntHandlerRB(pUART, pRXRB);
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 20:27:11 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Bug-Report-UART-Ring-Buffer-Interrupt-Handler-LPCOpen-v2-19/m-p/586152#M21389</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T20:27:11Z</dc:date>
    </item>
    <item>
      <title>Re: Bug Report : UART Ring Buffer : Interrupt Handler : LPCOpen v2.19 : LPC824</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Bug-Report-UART-Ring-Buffer-Interrupt-Handler-LPCOpen-v2-19/m-p/586153#M21390</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;bump&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 19 Jun 2016 01:04:01 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Bug-Report-UART-Ring-Buffer-Interrupt-Handler-LPCOpen-v2-19/m-p/586153#M21390</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-19T01:04:01Z</dc:date>
    </item>
    <item>
      <title>Re: Bug Report : UART Ring Buffer : Interrupt Handler : LPCOpen v2.19 : LPC824</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Bug-Report-UART-Ring-Buffer-Interrupt-Handler-LPCOpen-v2-19/m-p/586154#M21391</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks for posting this &lt;SPAN style="color: #646464; background-color: #f5f5f5; font-weight: bold; font-size: 16.8px;"&gt;alexgoldstone&lt;/SPAN&gt;... &amp;nbsp;I had been unknowingly plagued by this bug but didn't manage to catch it happening till I found your thread...&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 21 Dec 2016 03:06:09 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Bug-Report-UART-Ring-Buffer-Interrupt-Handler-LPCOpen-v2-19/m-p/586154#M21391</guid>
      <dc:creator>Proteus</dc:creator>
      <dc:date>2016-12-21T03:06:09Z</dc:date>
    </item>
  </channel>
</rss>

