You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
			
		
		
		
		
			
		
			
				
	
	
		
			54 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
| #include <avr/io.h>
 | |
| #include "uart.h"
 | |
| 
 | |
| static int uart_putchar(char c, FILE *stream);
 | |
| 
 | |
| FILE uart_output = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);
 | |
| 
 | |
| void uart_init()
 | |
| {
 | |
|     DDRD |= 1 << 1; // TX
 | |
|     UART_BAUD_REGH  = (BAUDRATE>>8);
 | |
|     UART_BAUD_REGL  = BAUDRATE;               // set baud rate
 | |
| 
 | |
|     UART_CTRL_REGB |= (1<<UART_TXEN_BM)
 | |
|                      //|(1<<UART_RXEN_BM)
 | |
|                      |(1<<UART_RXCIE_BM);     // enable receiver and transmitter
 | |
| 
 | |
|     UART_CTRL_REGC |= (1<<UART_URSEL_BM)
 | |
|                      |(1<<UART_UCSZ0_BM)
 | |
|                      |(1<<UART_UCSZ1_BM);             // 8bit data format
 | |
| 
 | |
|     stdout = &uart_output;
 | |
| }
 | |
| 
 | |
| static int uart_putchar(char c, FILE *stream) {
 | |
|     if (c == '\n') {
 | |
|         uart_putchar('\r', stream);
 | |
|     }
 | |
|     loop_until_bit_is_set(UART_CTRL_REGA, UART_UDRE_BM);
 | |
|     UART_DATA_REG = c;
 | |
|     return 0;
 | |
| }
 | |
| 
 | |
| void read_sync(char buffer[], uint8_t buffersize, uint8_t * bufferindex){
 | |
|     for(int i=0; i < buffersize; i++){
 | |
|         buffer[i]=0;
 | |
|     }
 | |
|     *bufferindex=0;
 | |
| 
 | |
|     char input;
 | |
|     do{
 | |
|         while ((UART_CTRL_REGA & (1 << UART_RXC_BM)) == 0);
 | |
|         input = UART_DATA_REG;
 | |
| 
 | |
|         putchar(input); //echo
 | |
|         buffer[*bufferindex]=input;
 | |
|         *bufferindex=*bufferindex+1;
 | |
|     }while(!(input == '\n' || input == '\r'));
 | |
|     buffer[*bufferindex]=0;
 | |
|     putchar('\n');
 | |
| }
 | |
| 
 | |
| 
 |