This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

UART1 lpc1768

How to config uart1 in lpc1768 for ppp conection with gprs modem.
serial port driver for lpc1768

Parents
  • I need serial port driver for uart1 in lpc1768 and use lpc21xx driver but I have problem in uart1 interupt

    /*---------------------------------------------------------------------------- * RL-ARM - TCPnet *---------------------------------------------------------------------------- * Name: SERIAL.C * Purpose: Serial Port Driver for Philips LPC21xx * Rev.: V4.05 *---------------------------------------------------------------------------- * This code is part of the RealView Run-Time Library. * Copyright (c) 2004-2009 KEIL - An ARM Company. All rights reserved. *---------------------------------------------------------------------------*/

    #include <Net_Config.h>
    #include "lpc17xx.h" /* LPC21xx definitions */

    /* Local variables */
    struct buf_st { U8 in; U8 out; U8 buf [256];
    };

    static struct buf_st rbuf;
    static struct buf_st tbuf;
    static BOOL tx_active;

    void handler_UART1 (void) __irq;

    /*---------------------------------------------------------------------------- * Serial Driver Functions *---------------------------------------------------------------------------- * Required functions for Serial driver module: * - void init_serial () * - int com_get_char () * - BOOL com_putchar (U8 c) * - BOOL com_tx_active () * - interrupt function(s) *---------------------------------------------------------------------------*/

    /*--------------------------- init_serial -----------------------------------*/

    void init_serial (void) { /* Initialize the serial interface */ rbuf.in = 0; rbuf.out = 0; tbuf.in = 0; tbuf.out = 0; tx_active = __FALSE;

    ///////////////////////////////////////////// LPC_SC->PCONP |= ((1 << 4) | (1 << 15)); /* enable power to UART1 & IOCON */

    LPC_PINCON->PINSEL4 |= (2 << 0); /* Pin P2.0 used as TXD1 */ LPC_PINCON->PINSEL4 |= (2 << 2); /* Pin P2.1 used as RXD1 */ /////////////////////////////////////////////// /* Enable RxD1 and TxD1 pins. */
    // PINSEL0 &= ~0x000F0000;
    // PINSEL0 |= 0x00050000; /* 8-bits, no parity, 1 stop bit */ LPC_UART1->LCR = 0x83; /* 19200 Baud Rate @ 15MHz VPB Clock */ LPC_UART1->DLL = 49; LPC_UART1->DLM = 0; LPC_UART1->LCR = 0x03; /* Enable RDA and THRE interrupts. */ LPC_UART1->IER = 0x03; /* Enable UART1 interrupts. */ NVIC_EnableIRQ (UART1_IRQn);
    // VICVectAddr14 = (U32)handler_UART1;
    // VICVectCntl14 = 0x27;
    // VICIntEnable = (1 << 7);
    }

    /*--------------------------- com_putchar -----------------------------------*/

    BOOL com_putchar (U8 c) { struct buf_st *p = &tbuf;

    /* Write a byte to serial interface */ if ((U8)(p->in + 1) == p->out) { /* Serial transmit buffer is full. */ return (__FALSE); }
    // VICIntEnClr = (1 << 7); if (tx_active == __FALSE) { /* Send directly to UART. */ LPC_UART1->THR = (U8)c; tx_active = __TRUE; } else { /* Add data to transmit buffer. */ p->buf [p->in++] = c; }
    // VICIntEnable = (1 << 7); return (__TRUE);
    }

    /*--------------------------- com_getchar -----------------------------------*/

    int com_getchar (void) { /* Read a byte from serial interface */ struct buf_st *p = &rbuf;

    if (p->in == p->out) { /* Serial receive buffer is empty. */ return (-1); } return (p->buf[p->out++]);
    }

    /*--------------------------- com_tx_active ---------------------------------*/

    BOOL com_tx_active (void) { /* Return status Transmitter active/not active. */ /* When transmit buffer is empty, 'tx_active' is FALSE. */ return (tx_active);
    }

    /*--------------------------- handler_UART1 ---------------------------------*/

    void handler_UART1 (void) __irq { /* Serial Rx and Tx interrupt handler. */ struct buf_st *p; U8 rbr;

    if ((LPC_UART1->IIR & 0x0E) == 0x04) { /* Serial Receive Interrupt. */ p = &rbuf; /* Read a character to clear RDA Interrupt. */ rbr = LPC_UART1->RBR; if ((p->in + 1) != p->out) { p->buf [p->in++] = (U8)rbr; } } if (LPC_UART1->LSR & 0x20) { /* Serial Transmit Interrupt. */ p = &tbuf; if (p->in != p->out) { LPC_UART1->THR = p->buf [p->out++]; } else { tx_active = __FALSE; } } /* Acknowledge Interrupt. */
    // VICVectAddr = 0;
    }

    /*---------------------------------------------------------------------------- * end of file *---------------------------------------------------------------------------*/

Reply
  • I need serial port driver for uart1 in lpc1768 and use lpc21xx driver but I have problem in uart1 interupt

    /*---------------------------------------------------------------------------- * RL-ARM - TCPnet *---------------------------------------------------------------------------- * Name: SERIAL.C * Purpose: Serial Port Driver for Philips LPC21xx * Rev.: V4.05 *---------------------------------------------------------------------------- * This code is part of the RealView Run-Time Library. * Copyright (c) 2004-2009 KEIL - An ARM Company. All rights reserved. *---------------------------------------------------------------------------*/

    #include <Net_Config.h>
    #include "lpc17xx.h" /* LPC21xx definitions */

    /* Local variables */
    struct buf_st { U8 in; U8 out; U8 buf [256];
    };

    static struct buf_st rbuf;
    static struct buf_st tbuf;
    static BOOL tx_active;

    void handler_UART1 (void) __irq;

    /*---------------------------------------------------------------------------- * Serial Driver Functions *---------------------------------------------------------------------------- * Required functions for Serial driver module: * - void init_serial () * - int com_get_char () * - BOOL com_putchar (U8 c) * - BOOL com_tx_active () * - interrupt function(s) *---------------------------------------------------------------------------*/

    /*--------------------------- init_serial -----------------------------------*/

    void init_serial (void) { /* Initialize the serial interface */ rbuf.in = 0; rbuf.out = 0; tbuf.in = 0; tbuf.out = 0; tx_active = __FALSE;

    ///////////////////////////////////////////// LPC_SC->PCONP |= ((1 << 4) | (1 << 15)); /* enable power to UART1 & IOCON */

    LPC_PINCON->PINSEL4 |= (2 << 0); /* Pin P2.0 used as TXD1 */ LPC_PINCON->PINSEL4 |= (2 << 2); /* Pin P2.1 used as RXD1 */ /////////////////////////////////////////////// /* Enable RxD1 and TxD1 pins. */
    // PINSEL0 &= ~0x000F0000;
    // PINSEL0 |= 0x00050000; /* 8-bits, no parity, 1 stop bit */ LPC_UART1->LCR = 0x83; /* 19200 Baud Rate @ 15MHz VPB Clock */ LPC_UART1->DLL = 49; LPC_UART1->DLM = 0; LPC_UART1->LCR = 0x03; /* Enable RDA and THRE interrupts. */ LPC_UART1->IER = 0x03; /* Enable UART1 interrupts. */ NVIC_EnableIRQ (UART1_IRQn);
    // VICVectAddr14 = (U32)handler_UART1;
    // VICVectCntl14 = 0x27;
    // VICIntEnable = (1 << 7);
    }

    /*--------------------------- com_putchar -----------------------------------*/

    BOOL com_putchar (U8 c) { struct buf_st *p = &tbuf;

    /* Write a byte to serial interface */ if ((U8)(p->in + 1) == p->out) { /* Serial transmit buffer is full. */ return (__FALSE); }
    // VICIntEnClr = (1 << 7); if (tx_active == __FALSE) { /* Send directly to UART. */ LPC_UART1->THR = (U8)c; tx_active = __TRUE; } else { /* Add data to transmit buffer. */ p->buf [p->in++] = c; }
    // VICIntEnable = (1 << 7); return (__TRUE);
    }

    /*--------------------------- com_getchar -----------------------------------*/

    int com_getchar (void) { /* Read a byte from serial interface */ struct buf_st *p = &rbuf;

    if (p->in == p->out) { /* Serial receive buffer is empty. */ return (-1); } return (p->buf[p->out++]);
    }

    /*--------------------------- com_tx_active ---------------------------------*/

    BOOL com_tx_active (void) { /* Return status Transmitter active/not active. */ /* When transmit buffer is empty, 'tx_active' is FALSE. */ return (tx_active);
    }

    /*--------------------------- handler_UART1 ---------------------------------*/

    void handler_UART1 (void) __irq { /* Serial Rx and Tx interrupt handler. */ struct buf_st *p; U8 rbr;

    if ((LPC_UART1->IIR & 0x0E) == 0x04) { /* Serial Receive Interrupt. */ p = &rbuf; /* Read a character to clear RDA Interrupt. */ rbr = LPC_UART1->RBR; if ((p->in + 1) != p->out) { p->buf [p->in++] = (U8)rbr; } } if (LPC_UART1->LSR & 0x20) { /* Serial Transmit Interrupt. */ p = &tbuf; if (p->in != p->out) { LPC_UART1->THR = p->buf [p->out++]; } else { tx_active = __FALSE; } } /* Acknowledge Interrupt. */
    // VICVectAddr = 0;
    }

    /*---------------------------------------------------------------------------- * end of file *---------------------------------------------------------------------------*/

Children
No data