avr-gcc-list
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[avr-gcc-list] Student Needs Help With ATmega128 Uart Port 1....Second A


From: John Branthoover
Subject: [avr-gcc-list] Student Needs Help With ATmega128 Uart Port 1....Second Attempt.
Date: Wed, 20 Mar 2002 06:25:47 -0800 (PST)

Hello All,
     I am attempting to get my ATmega128’s second
serial port (USART1) up and running.  I have
successfully got port 0 up and running with much help
(Thank Guys) from this list.  I have changed all of
the references from port 0 to port 1,  including the
SIGNAL functions.  See the code at the bottom of the
page.  

     Anyway the code compiles OK but does not function
properly.  It sends data to the dumb terminal ok, but
does not appear to receive data from the terminal.  I
am using an STK500/501 starter kit and have verified
the hardware on both RS232 ports through the use of
the ATmega128’s USART0 port.

     Is there something special that has to be done
with USART1 verses USART0 ?  Any information that you
can give me will be greatly appreciated.  Thank you
for you time and have a nice day.






#include <io.h>
#include <interrupt.h>
#include <signal.h>
#include <progmem.h>
#include "uart.h"

/* UART global variables */

volatile u08   UART_Ready;
volatile u08   UART_ReceivedChar;
         u08   UART_RxChar;
         u08*  pUART_Buffer;

/* end-of-line string = 'Line End' + 'Line Feed'
character */
prog_char UART_pszEndOfLine[3] = {0x0d,0x0a,0};

/* UART Transmit Complete Interrupt Function */
SIGNAL(SIG_UART1_TRANS)      
{
    /* Test if a string is being sent */
    if (pUART_Buffer!=0)
    {
        /* Go to next character in string */
        pUART_Buffer++;
        /* Test if the end of string has been reached
*/
        if (PRG_RDB(pUART_Buffer)==0)
        {
            /* String has been sent */
            pUART_Buffer = 0;
            /* Indicate that the UART is now ready to
send */
            UART_Ready   = 1;
            return;
        }
        /* Send next character in string */
        outp( PRG_RDB(pUART_Buffer), UDR1 );
        return;
    }
    /* Indicate that the UART is now ready to send */
    UART_Ready = 1;
}

/* UART Receive Complete Interrupt Function */
SIGNAL(SIG_UART1_RECV)      
{
    /* Indicate that the UART has received a character
*/
    UART_ReceivedChar = 1;
    /* Store received character */
    UART_RxChar = inp(UDR0);
}

void UART_SendByte(u08 Data)
{   
    /* wait for UART to become available */
    while(!UART_Ready);
    UART_Ready = 0;
    /* Send character */
    outp( Data, UDR0 );
}

u08 UART_ReceiveByte(void)
{
    /* wait for UART to indicate that a character has
been received */
    while(!UART_ReceivedChar);
    UART_ReceivedChar = 0;
    /* read byte from UART data buffer */
    return UART_RxChar;
}

void UART_PrintfProgStr(u08* pBuf)
{
    /* wait for UART to become available */
    while(!UART_Ready);
    UART_Ready = 0;
    /* Indicate to ISR the string to be sent */
    pUART_Buffer = pBuf;
    /* Send first character */
    outp( PRG_RDB(pUART_Buffer), UDR1 );
}

void UART_PrintfEndOfLine(void)
{
    /* wait for UART to become available */
    while(!UART_Ready);
    UART_Ready = 0;
    /* Indicate to ISR the string to be sent */
    pUART_Buffer = UART_pszEndOfLine;
    /* Send first character */
    outp( PRG_RDB(pUART_Buffer), UDR1 );
}

void UART_PrintfU4(u08 Data)
{
    /* Send 4-bit hex value */
    u08 Character = Data&0x0f;
    if (Character>9)
    {
        Character+='A'-10;
    }
    else
    {
        Character+='0';
    }
    UART_SendByte(Character);
}

void UART_Printfu08(u08 Data)
{
    /* Send 8-bit hex value */
    UART_PrintfU4(Data>>4);
    UART_PrintfU4(Data   );
}

void UART_Printfu16(u16 Data)
{
    /* Send 16-bit hex value */
    UART_PrintfU4(Data>>12);
    UART_PrintfU4(Data>> 8);
    UART_PrintfU4(Data>> 4);
    UART_PrintfU4(Data    );
}

void UART_Init(void)
{
    UART_Ready        = 1;
    UART_ReceivedChar = 0;
    pUART_Buffer      = 0;
    /* enable RxD/TxD and interrupts */
   
outp(BV(RXCIE)|BV(TXCIE)|BV(RXEN)|BV(TXEN),UCSR1B);
    /* set baud rate */
    outp(0x0, UBRR1H);
    outp( (u08)UART_BAUD_SELECT, UBRR1L);  
    /* enable interrupts */
    sei();
}




__________________________________________________
Do You Yahoo!?
Yahoo! Sports - live college hoops coverage
http://sports.yahoo.com/
avr-gcc-list at http://avr1.org



reply via email to

[Prev in Thread] Current Thread [Next in Thread]