Anyone have AT91SAM7X256 GCC Serial source ?

nobody wrote on Monday, September 04, 2006:

Please… Send me serial source file and AT91SAM7X256-EK GCC port files.

my e-mail : xpeedholic@hotmail.com

nobody wrote on Monday, September 04, 2006:

#include "Board.h"
#include "commd.h"

//------------------------------------------------------------------ zamiast comm.c -------------------------------------------- dodalem commd_…
//static xSemaphoreHandle debug_sem;

static char comm_initialized[3] = {0, 0, 0};

void commd_init(int port, int baud) {
    switch (port) {
        case USART0:
            *AT91C_PIOA_PDR = AT91C_PA5_RXD0 |        /* Enable RxD0 Pin */
                              AT91C_PA6_TXD0;         /* Enable TxD0 Pin */

            AT91C_BASE_US0->US_CR = AT91C_US_RSTRX |          /* Reset Receiver      */
                                    AT91C_US_RSTTX |          /* Reset Transmitter   */
                                    AT91C_US_RXDIS |          /* Receiver Disable    */
                                    AT91C_US_TXDIS;           /* Transmitter Disable */

            AT91C_BASE_US0->US_MR = AT91C_US_USMODE_NORMAL |  /* Normal Mode */
                  AT91C_US_CLKS_CLOCK    |  /* Clock = MCK */
                  AT91C_US_CHRL_8_BITS   |  /* 8-bit Data  */
                  AT91C_US_PAR_NONE      |  /* No Parity   */
                  AT91C_US_NBSTOP_1_BIT;    /* 1 Stop Bit  */

            AT91C_BASE_US0->US_BRGR = MCK / 16 / baud;        /* Baud Rate Divisor */

            AT91C_BASE_US0->US_CR = AT91C_US_RXEN  |          /* Receiver Enable     */
                                    AT91C_US_TXEN;            /* Transmitter Enable  */
            comm_initialized[port] = 1;
            break;

        case USART1:
            *AT91C_PIOA_PDR = AT91C_PA21_RXD1 |        /* Enable RxD1 Pin */
                              AT91C_PA22_TXD1;         /* Enable TxD1 Pin */

            AT91C_BASE_US1->US_CR = AT91C_US_RSTRX |          /* Reset Receiver      */
                                    AT91C_US_RSTTX |          /* Reset Transmitter   */
                                    AT91C_US_RXDIS |          /* Receiver Disable    */
                                    AT91C_US_TXDIS;           /* Transmitter Disable */

            AT91C_BASE_US1->US_MR = AT91C_US_USMODE_NORMAL |  /* Normal Mode */
                  AT91C_US_CLKS_CLOCK    |  /* Clock = MCK */
                  AT91C_US_CHRL_8_BITS   |  /* 8-bit Data  */
                  AT91C_US_PAR_NONE      |  /* No Parity   */
                  AT91C_US_NBSTOP_1_BIT;    /* 1 Stop Bit  */

            AT91C_BASE_US1->US_BRGR = MCK / 16 / baud;        /* Baud Rate Divisor */

            AT91C_BASE_US1->US_CR = AT91C_US_RXEN  |          /* Receiver Enable     */
                                    AT91C_US_TXEN;            /* Transmitter Enable  */
            comm_initialized[port] = 1;
            break;   

        case DUSART:
            *AT91C_PIOA_PDR = AT91C_PA9_DRXD |         /* Enable RxD1 Pin */
                              AT91C_PA10_DTXD;         /* Enable TxD1 Pin */

            AT91C_BASE_DBGU->DBGU_CR = AT91C_US_RSTRX |          /* Reset Receiver      */
                                       AT91C_US_RSTTX |          /* Reset Transmitter   */
                                       AT91C_US_RXDIS |          /* Receiver Disable    */
                                       AT91C_US_TXDIS;           /* Transmitter Disable */

            AT91C_BASE_DBGU->DBGU_MR = AT91C_US_USMODE_NORMAL |  /* Normal Mode */
                                       AT91C_US_CLKS_CLOCK    |  /* Clock = MCK */
                                       AT91C_US_CHRL_8_BITS   |  /* 8-bit Data  */
                                       AT91C_US_PAR_NONE      |  /* No Parity   */
                                       AT91C_US_NBSTOP_1_BIT;    /* 1 Stop Bit  */

            AT91C_BASE_DBGU->DBGU_BRGR = MCK / 16 / baud;        /* Baud Rate Divisor */

            AT91C_BASE_DBGU->DBGU_CR = AT91C_US_RXEN  |          /* Receiver Enable     */
                                       AT91C_US_TXEN;            /* Transmitter Enable  */
            comm_initialized[port] = 1;
            break;           
       
        default:
            break;
    }
}

int commd_putc(int port,int ch) {
    if (!comm_initialized[port]) return -3;
    switch (port) {
        case USART0:
            while (!(AT91C_BASE_US0->US_CSR & AT91C_US_TXRDY));   /* Wait for Empty Tx Buffer */
            return (AT91C_BASE_US0->US_THR = ch);                 /* Transmit Character */
           
        case USART1:
            while (!(AT91C_BASE_US1->US_CSR & AT91C_US_TXRDY));   /* Wait for Empty Tx Buffer */
            return (AT91C_BASE_US1->US_THR = ch);                 /* Transmit Character */
           
        case DUSART:
            while (!(AT91C_BASE_DBGU->DBGU_CSR & AT91C_US_TXRDY));   /* Wait for Empty Tx Buffer */
            AT91C_BASE_DBGU->DBGU_THR = ch;                             /* Transmit Character */
            return ch;               
           
        default:
            break;
    }
    return -1;
}

int commd_puts( int port, char* buff) {
    if (!comm_initialized[port]) return -3;
    while(*buff) {
        if (*buff == ‘\n’) commd_putc(port, ‘\r’);
            commd_putc(port, *buff++);
    }
    return 0;
}

int commd_getc (int port) {
    if (!comm_initialized[port]) return -3;
    switch (port) {
        case USART0:
            while (!(AT91C_BASE_US0->US_CSR & AT91C_US_RXRDY));   /* Wait for Full Rx Buffer */
            return (AT91C_BASE_US0->US_RHR);                      /* Read Character */

        case USART1:
            while (!(AT91C_BASE_US1->US_CSR & AT91C_US_RXRDY));   /* Wait for Full Rx Buffer */
            return (AT91C_BASE_US1->US_RHR);                      /* Read Character */
           
        case DUSART:
            while (!(AT91C_BASE_DBGU->DBGU_CSR & AT91C_US_RXRDY));   /* Wait for Full Rx Buffer */
            return (AT91C_BASE_DBGU->DBGU_RHR);                      /* Read Character */
           
        default:
            break;
    }   
    return -1;
}

int commd_is_rx_empty(int port) {
    if (!comm_initialized[port]) return -3;
    switch (port) {
        case USART0:
            return (!(AT91C_BASE_US0->US_CSR & AT91C_US_RXRDY));  /* Full Rx Buffer */
        case USART1:
            return (!(AT91C_BASE_US1->US_CSR & AT91C_US_RXRDY));  /* Full Rx Buffer */
        case DUSART:
            return (!(AT91C_BASE_DBGU->DBGU_CSR & AT91C_US_RXRDY));  /* Full Rx Buffer */   
        default:
            break;
    }   
    return -1;                   
}

//------------------------------------------------------------------------------------------------------- PRINTF -------------------------------------------
#include <stdio.h>                          /* I/O Functions */
#include <stdarg.h>
#include "FreeRTOS.h"
#include "semphr.h"

static xSemaphoreHandle        printf_sem;

void kprintf_init() {
    vSemaphoreCreateBinary( printf_sem );
    while (printf_sem == NULL);    //halt if failed
}

void kprintfFromISR(const char *format,…) {
    static char buf[100];
    va_list ap;
    va_start(ap, format);
    vsnprintf(buf, sizeof(buf), format, ap);    //viprintf() - without floating numbers. %f…
    va_end(ap);   
    commd_puts(DBG_DEV, buf);
    //comm_puts(DBG_DEV, buf);
}

void kprintf(const char *format,…) {
    static char buf[100];
    va_list ap;
    va_start(ap, format);
    vsnprintf(buf, sizeof(buf), format, ap);    //viprintf() - without floating numbers. %f…
    va_end(ap);
    while (!xSemaphoreTake(printf_sem, 100));                //block   
    commd_puts(DBG_DEV, buf);
    //comm_puts(DBG_DEV, buf);
    xSemaphoreGive(printf_sem);                                //unblock
}

void ppp_trace(int level, const char *format,…) {            // ppp debug
    static char buf[100];
    va_list ap;
    va_start(ap, format);
    vsnprintf(buf, sizeof(buf), format, ap);    //viprintf() - without floating numbers. %f…
    va_end(ap);
    while (!xSemaphoreTake(printf_sem, 100));                //block
    commd_puts(DBG_DEV, buf);
    //comm_puts(DBG_DEV, buf);
    xSemaphoreGive(printf_sem);                                //unblock
}

Janusz

nobody wrote on Tuesday, September 05, 2006:

Thank you…
I have tested your source code. Mr Janusz

But It didn’t work.

Can you send all project files related with serial to me?

Best Regards.