We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hi, I wanted to write a simple program that doesn’t use interrupts or check any of the possible error flags, but that shows a simple UART application for receiving data. This is a part of the code I wrote.
int uart0Getch(void)
{
if (LPC_UART->LSR & LSR_RDR) // check if character is available
{ return LPC_UART->RBR; // return character
}
return -1;
#include "includes.h"
#include "uart.h"
int value;
extern int main( void )
system_init();
screen1[0]='a';
screen1[1]='b';
screen1[2]='c';
while(1)
//KeyScanProc(buf,screen1);
if ((value = uart0Getch()) >= 0)
send_to_uart(screen1,3);
Hello alerico90,
Sorry for my late entry to the discussion. Jensbauer has a reply advantage at GMT+1, probably
Thanks for digging into the depths of the UART registers, but I also want to point out that NXP provides a free software driver at our lpcware.com site at this link. Granted, this example is an interrupt mode, but it will work very efficiently for you.
-arw
hi, thanks!! let me check that link then.
2015-01-14 10:28 GMT-04:30 jensbauer <community@arm.com>:
<http://community.arm.com/?et=watches.email.thread> Receiving DataUsing the UART CORTEX M0reply from jensbauer<http://community.arm.com/people/jensbauer?et=watches.email.thread> in *ARMProcessors* - View the full discussion<http://community.arm.com/message/24359?et=watches.email.thread#24359>
<http://community.arm.com/?et=watches.email.thread> Receiving Data
Using the UART CORTEX M0
reply from jensbauer
<http://community.arm.com/people/jensbauer?et=watches.email.thread> in *ARM
Processors* - View the full discussion
<http://community.arm.com/message/24359?et=watches.email.thread#24359>
I'd like to explain a little detail on the subject, which other readers will also benefit from.
When you use 'polling', if you're waiting for a character from the uart and then sending a string of characters back, then you could be unlucky and miss out some characters now and then. You would be confused why.
The reason is that while you're sending - say 16 characters - you're not checking for incoming data. The data arrives at the same speed as the data you're sending out, so since you're not reading while you're writing, you will lose up to N - FIFO_SIZE characters, where N is the number of characters you're sending and FIFO_SIZE is the size of the FIFO on the chip.
The FIFO size may be 1, it may be 16 or 32, depending on your chip, but even if you're only sending two characters for every single character you receive, at some point, the FIFO will get full, and you'll lose half the transmission.
Using interrupts will fix this problem, because the interrupts will transmit data you've scheduled for transmission, and it'll also be able to have a receive-buffer, which can be of a size of your choice, as long as there's enough RAM for it.
In addition to these two benefits, your program will no longer need to stall in the part of your code that transmits data.
Yes, I can confirm the timezone.
-And you're right, it's much better to either use interrupts, or setting up the DMA and putting the CPU to sleep using __WFI(); -Then it's more efficient both power- and performance-wise.
(The LPC11xx does not have DMA, I guess I've gotten too used to working with the LPC175x and LPC176x; if you at some point use a device that contains a DMA, I highly recommend digging into it and using it - you can get very high performance boosts when using this feature).
Very well, I am understanding a lot more about the uart in the LPC111.XX. I
am going to implement the interrupts and see what happens
2015-01-15 2:50 GMT-04:30 jensbauer <community@arm.com>:
<http://community.arm.com/?et=watches.email.thread> Receiving DataUsing the UART CORTEX M0reply from jensbauer<http://community.arm.com/people/jensbauer?et=watches.email.thread> in *ARMProcessors* - View the full discussion<http://community.arm.com/message/24366?et=watches.email.thread#24366>
<http://community.arm.com/message/24366?et=watches.email.thread#24366>