Posted to tcl by stever at Sat Oct 17 23:29:52 GMT 2009view raw
- //#include <avr/io.h>
- #include <avr/interrupt.h>
- //#include <stdlib.h>
- //#include <stdio.h>
- #ifndef F_CPU
- #define F_CPU 2000000
- #endif
-
- #define MYBSEL 12
- volatile uint16_t receivedData;
-
- void USART_Receive(void)
- {
- /* Receive one char. */
- /* Wait until data received or a timeout.*/
- while ( !( USARTC0.STATUS & USART_RXCIF_bm) );
- receivedData = USARTC0.DATA;
- }
-
-
- void USART_Transmit(unsigned char data)
- {
- /* Wait for empty transmit buffer */
- //while ( !( UCSR0A & (1<<UDRE0)) )
- while ( !( USARTC0.STATUS & USART_DREIF_bm) )
- ;
- /* Put data into buffer, sends the data */
- USARTC0.DATA = data;
- //UDR0 = data;
- }
-
-
- void USART_Init(unsigned int bsel) {
- int bscale = 0;
-
- /* Set baud rate */
- USARTC0.BAUDCTRLA = (unsigned char)(bsel & 0xFF);
- USARTC0.BAUDCTRLB = ((unsigned char)(bscale & 0x0F)<< 4) | ((unsigned char)(bsel >> 8) & 0x0F);
- //UBRR0H = (unsigned char)(ubrr>>8);
- //UBRR0L = (unsigned char)ubrr;
-
- /* Set frame format: 8data, 1 stop bit */
- USARTC0.CTRLC = (USARTC0.CTRLC & ~USART_CHSIZE_gm) | USART_CHSIZE_8BIT_gc;
- //UCSR0C = (3<<UCSZ00);
-
- /* Enable receiver and transmitter */
- USARTC0.CTRLB = (USART_RXEN_bm | USART_TXEN_bm);
- //UCSR0B = (1<<RXEN0)|(1<<TXEN0);
- }
-
-
- int main(void) {
-
- USART_Init(MYBSEL);
-
- PORTC.DIRSET = PIN3_bm; // PC3 (TXD0) as output.
-
- PORTC.DIRCLR = PIN2_bm; // PC2 (RXD0) as input.
-
-
- USART_Transmit('T');
- USART_Transmit('e');
- USART_Transmit('s');
- USART_Transmit('t');
- USART_Transmit('\r');
- USART_Transmit('\n');
-
- while(1) {
- USART_Receive();
- USART_Transmit(receivedData);
- }
-
- return 0;
- }
-
-
-