PIC32MZ tutorial -- UART Communication

  At this moment, I accomplish the interface of UART communication for PIC32MZ EC Starter Kit. This interface configures the PIC32MZ for communication with a host PC at 115200 baud. There are five functions in the interface -- Uart_Init(), Uart_Getc(), Uart_Gets(), Uart_Putc() and Uart_Puts().  

  Uart_Init() configures PIC32MZ UART1 with 115200-8-None-1. It uses PPS to select RPC13, RPC14 as TX and RX.

      Uart_Getc() is a reception funtion for a character. It will be blocked until a character got.

  Uart_Gets() is a reception funtion for string. It will receive multiple characters until the '\r' '\n' or the buffer is full.

  Uart_Putc() is a transmit function for a character.

      Uart_Puts() is a transmit funtion for string. It will transmit multiple character until '\0'.

  Below is the code. 

void Uart_Init(void)
{
    LATCSET = 0x6000; /* Both RC13 and RC14 HIGH */
    TRISCSET = 0x4000; /* RC14 Input */
    TRISCCLR = 0x2000; /* RC13 Output */
    
    Seq_UnLock();     
    RPC13Rbits.RPC13R = 1;  /* U1TX on RPC13 */
    U1RXRbits.U1RXR = 7;    /* U1RX on RPC14 */
    Seq_Lock();
    
    U1BRG = ((PBCLK2_FREQUENCY / BAUDRATE) / 16) - 1;
    U1MODE = 0x8000;        // Loopback mode is enabled
    U1STA = 0x1400;
    
    IFS3bits.U1RXIF = 0;
    IFS3bits.U1TXIF = 0;
}

char Uart_Getc(void)
{
    if (U1STAbits.OERR)
    {
        U1STAbits.OERR = 0;
        return 0;
    }
    while (!U1STAbits.URXDA);
    char ret = U1RXREG;
    IFS3bits.U1RXIF = 0;
    return ret;
}

void Uart_Gets(char *s)
{
    char c;
    int size = 0;
    if (s == (void *)0) return;
    while (size < U1RX_BUFSIZE)
    {
        c = Uart_Getc();
        if ((c == '\n')||(c == '\r')) 
        {
            s[size] = '\0';
            break;
        }
        s[size++] = c;
    }
}

void Uart_Putc(char c)
{
    U1TXREG = c;
    while (U1STAbits.UTXBF);
    IFS3bits.U1TXIF = 0;
}

void Uart_Puts(char *s)
{
    if (s == (void *)0)
    {
        return;
    }
    while (*s != '\0')
    {
        Uart_Putc(*s++);
    }
}

 

 

  

posted @ 2016-02-10 23:04  GeekyGeek  阅读(1191)  评论(0编辑  收藏  举报