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

AT91SAM7X256_Dual UART Code Help

Hello.
I am very new in ARM7. I am trying to enable dual UART for AT91SAM7X256 MCU.
I have already simulate the Hello example code for simple LED Blink and UART0 Data Send. Its working fine.

Can any one suggest me how can I send and receive data from UART1 of AT91SAM7X256 MCU?

I know that AT91SAM7X-EK have single UART only, but I am trying to enable dual UART with external connection.

Thank you. Waiting for your reply.

Regards.
Sakibnaz.

Parents
  • Hello.
    Thanks for you reply. I checked the SAM7X256 Data-sheet carefully and able to enable UART1.
    My Serial.C is below presented for Both UART0 and UART1:

    ******************************************************************************************
    #include <AT91SAM7X256.H>

    #define BR 115200
    #define AT91B_MCK ((18432000*73/14)/2)
    #define BRD (AT91B_MCK/16/BR)

    AT91S_USART * pUSART0 = AT91C_BASE_US0;
    AT91S_USART * pUSART1 = AT91C_BASE_US1;

    void init_UART0 (void) {

    *AT91C_PMC_PCER = (1 << AT91C_ID_PIOA) | (1 << AT91C_ID_US0);

    *AT91C_PIOA_PDR = AT91C_PA0_RXD0 | AT91C_PA1_TXD0;

    pUSART0->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RXDIS | AT91C_US_TXDIS;

    pUSART0->US_MR = AT91C_US_USMODE_NORMAL | AT91C_US_CLKS_CLOCK | AT91C_US_CHRL_8_BITS | AT91C_US_PAR_NONE | AT91C_US_NBSTOP_1_BIT;

    pUSART0->US_BRGR = BRD;

    pUSART0->US_CR = AT91C_US_RXEN | AT91C_US_TXEN;
    }

    int sendchar_UART0 (int ch) {

    if (ch == '\n') { while (!(pUSART0->US_CSR & AT91C_US_TXRDY)); pUSART0->US_THR = '\r'; } while (!(pUSART0->US_CSR & AT91C_US_TXRDY)); return (pUSART0->US_THR = ch);
    }

    int getkey_UART0 (void) {

    while (!(pUSART0->US_CSR & AT91C_US_RXRDY)); return (pUSART0->US_RHR);
    }

    void init_UART1 (void) {

    *AT91C_PMC_PCER = (1 << AT91C_ID_PIOA) | (1 << AT91C_ID_US1);

    *AT91C_PIOA_PDR = AT91C_PA5_RXD1 | AT91C_PA6_TXD1;

    pUSART1->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RXDIS | AT91C_US_TXDIS;

    pUSART1->US_MR = AT91C_US_USMODE_NORMAL | AT91C_US_CLKS_CLOCK | AT91C_US_CHRL_8_BITS | AT91C_US_PAR_NONE | AT91C_US_NBSTOP_1_BIT;

    pUSART1->US_BRGR = BRD;

    pUSART1->US_CR = AT91C_US_RXEN | AT91C_US_TXEN;
    }

    int sendchar_UART1 (int ch) {

    if (ch == '\n') { while (!(pUSART1->US_CSR & AT91C_US_TXRDY)); pUSART1->US_THR = '\r'; } while (!(pUSART1->US_CSR & AT91C_US_TXRDY)); return (pUSART1->US_THR = ch);
    }

    int getkey_UART1 (void) {

    while (!(pUSART1->US_CSR & AT91C_US_RXRDY)); return (pUSART1->US_RHR);
    } ******************************************************************************************

    I can send data ether UART0 or UART1 by using init_UART0() or init_UART1(). But can not able to enable both UART's together. Also I am confused about the printf function which is using by the Hello.C to send Serial Data. So how can I define this data transmitting function individual for UART0 and UART1 (like printf_UART0 and printf_UART1)? Or how can I use the sednchar function? I am very new in ARM7. Need suggestion please.

    Regards.
    Sakibnaz.

Reply
  • Hello.
    Thanks for you reply. I checked the SAM7X256 Data-sheet carefully and able to enable UART1.
    My Serial.C is below presented for Both UART0 and UART1:

    ******************************************************************************************
    #include <AT91SAM7X256.H>

    #define BR 115200
    #define AT91B_MCK ((18432000*73/14)/2)
    #define BRD (AT91B_MCK/16/BR)

    AT91S_USART * pUSART0 = AT91C_BASE_US0;
    AT91S_USART * pUSART1 = AT91C_BASE_US1;

    void init_UART0 (void) {

    *AT91C_PMC_PCER = (1 << AT91C_ID_PIOA) | (1 << AT91C_ID_US0);

    *AT91C_PIOA_PDR = AT91C_PA0_RXD0 | AT91C_PA1_TXD0;

    pUSART0->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RXDIS | AT91C_US_TXDIS;

    pUSART0->US_MR = AT91C_US_USMODE_NORMAL | AT91C_US_CLKS_CLOCK | AT91C_US_CHRL_8_BITS | AT91C_US_PAR_NONE | AT91C_US_NBSTOP_1_BIT;

    pUSART0->US_BRGR = BRD;

    pUSART0->US_CR = AT91C_US_RXEN | AT91C_US_TXEN;
    }

    int sendchar_UART0 (int ch) {

    if (ch == '\n') { while (!(pUSART0->US_CSR & AT91C_US_TXRDY)); pUSART0->US_THR = '\r'; } while (!(pUSART0->US_CSR & AT91C_US_TXRDY)); return (pUSART0->US_THR = ch);
    }

    int getkey_UART0 (void) {

    while (!(pUSART0->US_CSR & AT91C_US_RXRDY)); return (pUSART0->US_RHR);
    }

    void init_UART1 (void) {

    *AT91C_PMC_PCER = (1 << AT91C_ID_PIOA) | (1 << AT91C_ID_US1);

    *AT91C_PIOA_PDR = AT91C_PA5_RXD1 | AT91C_PA6_TXD1;

    pUSART1->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RXDIS | AT91C_US_TXDIS;

    pUSART1->US_MR = AT91C_US_USMODE_NORMAL | AT91C_US_CLKS_CLOCK | AT91C_US_CHRL_8_BITS | AT91C_US_PAR_NONE | AT91C_US_NBSTOP_1_BIT;

    pUSART1->US_BRGR = BRD;

    pUSART1->US_CR = AT91C_US_RXEN | AT91C_US_TXEN;
    }

    int sendchar_UART1 (int ch) {

    if (ch == '\n') { while (!(pUSART1->US_CSR & AT91C_US_TXRDY)); pUSART1->US_THR = '\r'; } while (!(pUSART1->US_CSR & AT91C_US_TXRDY)); return (pUSART1->US_THR = ch);
    }

    int getkey_UART1 (void) {

    while (!(pUSART1->US_CSR & AT91C_US_RXRDY)); return (pUSART1->US_RHR);
    } ******************************************************************************************

    I can send data ether UART0 or UART1 by using init_UART0() or init_UART1(). But can not able to enable both UART's together. Also I am confused about the printf function which is using by the Hello.C to send Serial Data. So how can I define this data transmitting function individual for UART0 and UART1 (like printf_UART0 and printf_UART1)? Or how can I use the sednchar function? I am very new in ARM7. Need suggestion please.

    Regards.
    Sakibnaz.

Children
No data