<?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>LPC MicrocontrollersのトピックRe: Reading UART with CMSIS</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/Reading-UART-with-CMSIS/m-p/524528#M7164</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by rocketdawg on Thu Mar 06 09:54:59 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;what is define BUFLEN_UART1 ?&amp;nbsp; is it 16 ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;this is wasteful&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;rLen = UART_Receive(UARTx, &amp;amp;tmpc, 1, NONE_BLOCKING);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;you are getting one character, so why not use the more efficient &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; UART_ReceiveByte(LPC_USARTn_Type* UARTx);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;what does ringbuf_put() do when the ringbuffer is full?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 18:08:47 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T18:08:47Z</dc:date>
    <item>
      <title>Reading UART with CMSIS</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Reading-UART-with-CMSIS/m-p/524527#M7163</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by justmakeit on Thu Mar 06 04:04:38 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hello,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm using the LPC1766 MCU ant trying to receive data using the UART1.But i'm only receiving 16 bytes. I'm using the CMSIS (v3.2) lib to receive the data.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The interupt handler for UART1:&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
void UART_Handler(uint8_t uartnr, LPC_UART_TypeDef * UARTx){
&amp;nbsp; uint8_t tmpc;
&amp;nbsp; uint32_t rLen;

&amp;nbsp; while(1){
&amp;nbsp;&amp;nbsp;&amp;nbsp; // Call UART read function in UART driver
&amp;nbsp;&amp;nbsp;&amp;nbsp; rLen = UART_Receive(UARTx, &amp;amp;tmpc, 1, NONE_BLOCKING);
&amp;nbsp;&amp;nbsp;&amp;nbsp; // If data received
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (rLen){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(end_char[uartnr] == tmpc){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; process_post_synch(handler_uart[uartnr], event_newline_uart[uartnr], NULL); 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ringbuf_put(&amp;amp;ringbuf_uart[uartnr], tmpc);
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; else {// no more data
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp; }&amp;nbsp;&amp;nbsp; 
}

volatile void UART1_IRQHandler(void){
 UART_Handler(1,(LPC_UART_TypeDef *)LPC_UART1);
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The init code:&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;

void UART1_P2_Dev_Init(uint32_t Baud_rate, struct process * handler, char LineEndChar)
{ 
&amp;nbsp;&amp;nbsp;&amp;nbsp; UART_FIFO_CFG_Type Fifo_CFG; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; UART_Dev_Init((LPC_UART_TypeDef *)LPC_UART1, Baud_rate);
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; PINSEL_CFG_Type pinsel;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; //TX
&amp;nbsp;&amp;nbsp;&amp;nbsp; pinsel.Portnum = PINSEL_PORT_2;
&amp;nbsp;&amp;nbsp;&amp;nbsp; pinsel.Pinnum = PINSEL_PIN_0;
&amp;nbsp;&amp;nbsp;&amp;nbsp; pinsel.Funcnum = PINSEL_FUNC_2;
&amp;nbsp;&amp;nbsp;&amp;nbsp; pinsel.Pinmode = PINSEL_PINMODE_TRISTATE;
&amp;nbsp;&amp;nbsp;&amp;nbsp; pinsel.OpenDrain = PINSEL_PINMODE_OPENDRAIN;
&amp;nbsp;&amp;nbsp;&amp;nbsp; PINSEL_ConfigPin(&amp;amp;pinsel);

&amp;nbsp;&amp;nbsp;&amp;nbsp; //RX
&amp;nbsp;&amp;nbsp;&amp;nbsp; pinsel.Pinnum = PINSEL_PIN_1;
&amp;nbsp;&amp;nbsp;&amp;nbsp; PINSEL_ConfigPin(&amp;amp;pinsel);
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; //FIFO
&amp;nbsp;&amp;nbsp;&amp;nbsp; UART_FIFOConfigStructInit(&amp;amp;Fifo_CFG);
&amp;nbsp;&amp;nbsp;&amp;nbsp; UART_FIFOConfig((LPC_UART_TypeDef *)LPC_UART1, &amp;amp;Fifo_CFG);
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; //Interrupt enable
&amp;nbsp;&amp;nbsp;&amp;nbsp; UART_IntConfig((LPC_UART_TypeDef *)LPC_UART1, UART_INTCFG_RBR, ENABLE);
&amp;nbsp;&amp;nbsp;&amp;nbsp; NVIC_EnableIRQ(UART1_IRQn);
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; //Ringbuffer init
&amp;nbsp;&amp;nbsp;&amp;nbsp; ringbuf_init(&amp;amp;ringbuf_uart[1],(uint8_t *)buffer_uart[1],BUFLEN_UART1);
&amp;nbsp;&amp;nbsp;&amp;nbsp; end_char[1] = LineEndChar;

&amp;nbsp;&amp;nbsp;&amp;nbsp; //Event init
&amp;nbsp;&amp;nbsp;&amp;nbsp; handler_uart[1] = handler;
&amp;nbsp;&amp;nbsp;&amp;nbsp; event_newline_uart[1] = process_alloc_event();
}

&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;hopefully someone can give me an idea of ​​what is going wrong. I'm only receiving 16 byte ...&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;even when i remove the break command in the handler. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;thanks&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:08:47 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Reading-UART-with-CMSIS/m-p/524527#M7163</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:08:47Z</dc:date>
    </item>
    <item>
      <title>Re: Reading UART with CMSIS</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Reading-UART-with-CMSIS/m-p/524528#M7164</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by rocketdawg on Thu Mar 06 09:54:59 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;what is define BUFLEN_UART1 ?&amp;nbsp; is it 16 ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;this is wasteful&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;rLen = UART_Receive(UARTx, &amp;amp;tmpc, 1, NONE_BLOCKING);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;you are getting one character, so why not use the more efficient &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; UART_ReceiveByte(LPC_USARTn_Type* UARTx);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;what does ringbuf_put() do when the ringbuffer is full?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:08:47 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Reading-UART-with-CMSIS/m-p/524528#M7164</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:08:47Z</dc:date>
    </item>
    <item>
      <title>Re: Reading UART with CMSIS</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Reading-UART-with-CMSIS/m-p/524529#M7165</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by justmakeit on Fri Mar 07 01:17:11 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Your right,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I used UART_Receive(UARTx, &amp;amp;tmpc, 1, NONE_BLOCKING); to receive multiple bytes with one interrupt. But that is none sense&amp;nbsp; ;-) . The interrupt should stay active while there is data in the receive buffer.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;the ringbuffer forget the new data when its full. And the buffer is 64 bytes long&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I solved a part of the mystery. The reason that i'm only receiving 16 byte is that the debugger slowed down my program. On this moment the whole packet shows up but after sending it a couple times it stops activating the interrupt.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;register status when interrupt stop working:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;its not pending in the uart1 register &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;U1IIR-&amp;gt;IP = 1&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The FIFO disables and the TX reset activates (wont clear it self ).&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;U1FCR-&amp;gt;FCRFE&amp;nbsp; = 0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;U1FCR-&amp;gt;TFR&amp;nbsp; = 1&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:08:48 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Reading-UART-with-CMSIS/m-p/524529#M7165</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:08:48Z</dc:date>
    </item>
  </channel>
</rss>

