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);
I forgot to ask something else, I send data through the uart to the PC and
the PC responds sending some other data, well after I send the data, my LPC
seems to stop working, it doesn't respond anymore, why that happens?.
2015-01-13 9:32 GMT-04:30 Alejandra Angulo Rico <alerico90@gmail.com>:
I am using a ARM M0 Cortex LPC1114, let me check the baud rate to see ifthat's the problem. Thank you!2015-01-13 8:44 GMT-04:30 jensbauer <community@arm.com>:
I am using a ARM M0 Cortex LPC1114, let me check the baud rate to see if
that's the problem. Thank you!
2015-01-13 8:44 GMT-04:30 jensbauer <community@arm.com>:
>> <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/24308?et=watches.email.thread#24308>
Looking at the code snippet you posted, I think your 'while(1)' could be the problem.
-But something is wrong with the snippet; it does not contain a balanced set of curly braces, so it's difficult to guess where they are in your original code.
You should make sure that there is a starting brace right after your 'while(1)'
For instance...
int main(void)
// some initialization code here.
// your code here.
// no code here.
Notice: the 'extern' keyword in front of 'int main(void)' should also be removed.
well, this is the main function
EVENT_T evt;
//SysTick_Config(SystemFrequency/100000);
// No se utliza OSTimeDly en esta sección
__disable_irq();
if(1)
{//uint8_t buf[6];
uint8_t buf[SPEC12832RowNum*SPEC12832ColumnNum/8];
uint8_t c;
SPEC12832Select(LCD_SELECT_USER | LCD_SELECT_CUSTOM);
memset(buf, 0x00, sizeof(buf));
SPEC12832DisplayPattern(buf);
memset(screen1,'0',sizeof(screen1));
{ screen1[1]=value;
uart0TxFlush();
However I run the program and after sending data several times the program
stops working,
2015-01-13 10:12 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/24326?et=watches.email.thread#24326>
<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/24326?et=watches.email.thread#24326>
OK, then we know this happens inside the while(1){ ... } loop, because we never leave the while loop.
We also know that it won't happen inside uart0Getch, as there are no loops in there.
So two functions are left:
send_to_uart and uart0TxFlush.
What do those two subroutines look like ?
these are thesub routines
if (LPC_UART->LSR & LSR_RDR)
{ return LPC_UART->RBR;
void uart0TxFlush(void)
LPC_UART->FCR |= (1 << 2); // Borra TX FIFO
2015-01-13 11:10 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/24328?et=watches.email.thread#24328>
<http://community.arm.com/message/24328?et=watches.email.thread#24328>
Have you tried not calling uart0TxFlush ?
(it should not be necessary to flush the outgoing data, and is not recommended).
Ok, let me try that and see if it works. Thanks for all!
2015-01-13 12:45 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/24330?et=watches.email.thread#24330>
<http://community.arm.com/message/24330?et=watches.email.thread#24330>
Just in case you were wondering why flushing is probably not what you want:
fflush(stdout); for printf will send all cached characters to the current output device.
flushing the transmit-buffer in a UART, means to throw away any data that has not yet been sent.
That means if you send the string:
"Hello World"
and you flush the transmit-buffer immediately after, you'll probably end up receiving only the first few charaters, perhaps only "He" or "Hel".
Yes, in fact I just ran the program with the flush function and the output
was something like: "HEL W". Thank you very much for your help!!! It has
been very useful
2015-01-13 15:32 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/24333?et=watches.email.thread#24333>
<http://community.arm.com/message/24333?et=watches.email.thread#24333>