SparkFun Forums 

Where electronics enthusiasts find answers.

Everything ARM and LPC
By naz
#84978
Hello All,
i'm struggling to receive data from gps receiver module to terminal window using lpc2148 in keiluvision 4 .i'm getting some junk data on terminal window.my baud rate is correct,i tried so many ways but i couldn't catch the error.Any one give some idea to solve this issue.
By stevech
#85020
naz wrote:Hello All,
i'm struggling to receive data from gps receiver module to terminal window using lpc2148 in keiluvision 4 .i'm getting some junk data on terminal window.my baud rate is correct,i tried so many ways but i couldn't catch the error.Any one give some idea to solve this issue.
well, you've given us no specific symptoms. I have received 4800baud NMEA sentences on an LPC2106. Do you have the serial data voltage levels and data polarity correct?
By Shifted
#85035
Your baud rate might be correct, but are your clocks set up correctly?

Can you use a different device to input correct data to the processor (like a computer)?

Can you post any code from your MCU setup routines?
User avatar
By leon_heller
#85043
Transmit 'U' continuously and use a scope to check the baud rate.

Leon
By naz
#85064
this is the code which i have tried.could u please tell where i'm doing the mistake

[color=green][code]#include<LPC214x.h>
#include<stdio.h>

void led(int);
void wait(void);

void serial(void);
char sendchar(char ch);
char recechar(void);

void __irq FIQ_Handler(void);
int main()
{
int ch;
IODIR1=0x00FF0000;
serial();
led(16);
EXTMODE |=0x02;//level sensitivity for EINT1
EXTPOLAR |=0x02;//polartiy for EINT1
PINSEL0|=0x20000000; //GPIO0.14,EINT1
EXTINT =0x00000002; //clear EINT flag register
VICIntEnable=0x00008000;
VICIntEnable=0x00008000; //enable interrupt 15
while(1)
{
recechar();
led(17);
ch=U1RBR;
sendchar(ch);
led(18);
}
}
void serial()
{
PINSEL0=0xFFF0FFFF; //clear uart1
PINSEL0|=0x00050000;//TX,RX of uart1
U1LCR =0x83;//8bit,no parity,1stop bit,enable DLAB
U1DLM =0x01;
U1DLL=0x87;
U1LCR&=0x7F; //disable DLAB
U1IER = 0x07; //enable interrrupt
}
char sendchar(char ch)
{
if(ch=='\n')
{
while(!(U1LSR&0x20));
U1THR=0x0D;
}
while(!(U1LSR&0x20));
return(U1THR);
}
char recechar()
{

while(!(U1LSR&0x01));
if(U1RBR=='$')
led(23);
return(U1RBR);
}
void led(int n)
{
IOSET1|=1<<n;
wait();

IOCLR1|=1<<n;
wait();
}
void wait()
{
int i;
for(i=0;i<8000000;i++);
}
void __irq FIQ_Handler()
{
EXTINT&=0x00000002; //disable interrupt.
}[/color][/code][/quote]
User avatar
By leon_heller
#85078
Here is some UART code I use:
Code: Select all
//------------------------ UART1 ISR ------------------------//
static void uart1ISR(void)
{
  /* Read IIR to clear interrupt and find out the cause */
  unsigned iir = U1IIR;

  /* Handle UART1 interrupt */
  switch ((iir >> 1) & 0x7)
    {
      case 1:
        /* THRE interrupt */
        break;
      case 2:
        /* RDA interrupt */
        do
          {
          uint16_t temp;

          // calc next insert index & store character
          temp = (uart1_rx_insert_idx + 1) % UART1_RX_BUFFER_SIZE;
          uart1_rx_buffer[uart1_rx_insert_idx] = U1RBR;

          // check for more room in queue
          if (temp != uart1_rx_extract_idx)
            uart1_rx_insert_idx = temp; // update insert index
          }
        while (U1LSR & 0x01);

        break;
      case 3:
        /* RLS interrupt */
        break;
      case 6:
        /* CTI interrupt */
        break;
   }
}

/* Description:  
 *    This function gets a character from the UART1 receive queue
 *
 * Calling Sequence: 
 *    void
 *
 * Returns:
 *    character on success, -1 if no character is available
 *
 *****************************************************************************/
int uart1Getch(void)
{
  uint8_t ch;

  if (uart1_rx_insert_idx == uart1_rx_extract_idx) // check if character is available
    return -1;

  ch = uart1_rx_buffer[uart1_rx_extract_idx++]; // get character, bump pointer
  uart1_rx_extract_idx %= UART1_RX_BUFFER_SIZE; // limit the pointer
  return ch;
}


 //put this in the init. function

  // initialise PLL

  PLL0CFG=0x24;      // Cclk = 60Mhz
  PLL0CON=0x01;
  PLL0FEED=0xAA;
  PLL0FEED=0x55;
  while(!(PLL0STAT & 0x0400))
	;
  PLL0CON=0x3;
  PLL0FEED=0xAA;
  PLL0FEED=0x55;

  // initialise MAM and VPB

  MAMTIM=0x3;       // 3 cycles to read from FLASH
  MAMCR=0x2;        // MAM functions fully enabled
  APBDIV=0x02;      // Pclk = 30MHz

  // initialise pclk (30 MHz)
  unsigned long pclk = liblpc2000_get_pclk(liblpc2000_get_cclk(OSCILLATOR_CLOCK_FREQUENCY));

 // initialise UART1 (RxD1 P0.9, TxD1 P0.8

  U1LCR = 0x83; // 8 bit, 1 stop bit, no parity, enable DLAB
  U1DLL = 0xC3; // set for 9600 baud
  U1DLM = 0x00;
  U1LCR &= ~0x80; // disable DLAB
  U1FCR = 1;      // enable FIFO
  PINSEL0 = PINSEL0 & ~(0xFFFF << 16) | (0x5555 << 16);

 // initialise Rx circular buffer
  uart1_rx_extract_idx = uart1_rx_insert_idx = 0;


You probably don't need the circular buffer, so you can remove the relevant code.

Leon
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]