added UART methods
This commit is contained in:
parent
1c72c2bce0
commit
f3b8b2d8e9
|
@ -19,7 +19,7 @@ PROGRAMMER=usbtiny
|
||||||
#AVRDUDE=avrdude -p $(DEVICE) -P $(PORT) -c $(PROGRAMMER)
|
#AVRDUDE=avrdude -p $(DEVICE) -P $(PORT) -c $(PROGRAMMER)
|
||||||
FLASHER=avrdude -p $(DEVICE) -c $(PROGRAMMER)
|
FLASHER=avrdude -p $(DEVICE) -c $(PROGRAMMER)
|
||||||
# source files to compile
|
# source files to compile
|
||||||
SRC = main.c
|
SRC = main.c uart.c
|
||||||
# object files.
|
# object files.
|
||||||
OBJ = $(SRC:.c=.o)
|
OBJ = $(SRC:.c=.o)
|
||||||
# listing files.
|
# listing files.
|
||||||
|
@ -36,6 +36,9 @@ verify:
|
||||||
exit 1; \
|
exit 1; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
reset:
|
||||||
|
$(FLASHER)
|
||||||
|
|
||||||
read-fuse:
|
read-fuse:
|
||||||
$(FLASHER) -U lfuse:r:lfuse.raw:r -U hfuse:r:hfuse.raw:r -U efuse:r:efuse.raw:r
|
$(FLASHER) -U lfuse:r:lfuse.raw:r -U hfuse:r:hfuse.raw:r -U efuse:r:efuse.raw:r
|
||||||
|
|
||||||
|
|
|
@ -5,12 +5,15 @@
|
||||||
#include <avr/io.h> /* AVR device-specific IO definitions */
|
#include <avr/io.h> /* AVR device-specific IO definitions */
|
||||||
#include <util/delay.h> /* Convenience functions for busy-wait delay loops */
|
#include <util/delay.h> /* Convenience functions for busy-wait delay loops */
|
||||||
|
|
||||||
#define LED PD6 /* LED port */
|
#include "main.h"
|
||||||
|
#include "uart.h"
|
||||||
|
|
||||||
static void ioinit(void)
|
static void ioinit(void)
|
||||||
{
|
{
|
||||||
DDRD = (1<<LED); /* set LED pin as output */
|
DDRD = (1<<LED); /* set LED pin as output */
|
||||||
|
uart_init(); /* initialize UART */
|
||||||
|
stdout = &uart_output;
|
||||||
|
stdin = &uart_input;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
|
@ -19,6 +22,8 @@ int main(void)
|
||||||
|
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
|
|
||||||
|
puts("Hello world!");
|
||||||
|
|
||||||
/* blink LED */
|
/* blink LED */
|
||||||
for (i = 0; i < 100; i++) {
|
for (i = 0; i < 100; i++) {
|
||||||
PIND |= (1<<LED); /* toggle LED */
|
PIND |= (1<<LED); /* toggle LED */
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
#define LED PD6 /* LED port */
|
||||||
|
|
||||||
|
static void ioinit(void);
|
|
@ -0,0 +1,40 @@
|
||||||
|
#include <stdint.h> /* Standard Integer Types */
|
||||||
|
#include <stdio.h> /* Standard IO facilities */
|
||||||
|
#include <stdlib.h> /* General utilities */
|
||||||
|
#include <avr/io.h> /* AVR device-specific IO definitions */
|
||||||
|
|
||||||
|
#include "uart.h"
|
||||||
|
#include <util/setbaud.h> /* Helper macros for baud rate calculations */
|
||||||
|
|
||||||
|
FILE uart_output = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);
|
||||||
|
FILE uart_input = FDEV_SETUP_STREAM(NULL, uart_getchar, _FDEV_SETUP_READ);
|
||||||
|
FILE uart_io = FDEV_SETUP_STREAM(uart_putchar, uart_getchar, _FDEV_SETUP_RW);
|
||||||
|
|
||||||
|
/* configure serial port */
|
||||||
|
void uart_init(void)
|
||||||
|
{
|
||||||
|
UBRR0H = UBRRH_VALUE;
|
||||||
|
UBRR0L = UBRRL_VALUE;
|
||||||
|
#if USE_2X
|
||||||
|
UCSR0A |= (1<<U2X0);
|
||||||
|
#else
|
||||||
|
UCSR0A &= ~(1<<U2X0);
|
||||||
|
#endif
|
||||||
|
UCSR0C = (1<<UCSZ01) | (1<<UCSZ00); /* 8N1-bit data */
|
||||||
|
UCSR0B = (1<<RXEN0) | (1<<TXEN0); /* enable RX and TX */
|
||||||
|
}
|
||||||
|
|
||||||
|
void uart_putchar(char c, FILE *stream)
|
||||||
|
{
|
||||||
|
if (c == '\n') {
|
||||||
|
uart_putchar('\r', stream);
|
||||||
|
}
|
||||||
|
loop_until_bit_is_set(UCSR0A, UDRE0);
|
||||||
|
UDR0 = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
char uart_getchar(FILE *stream)
|
||||||
|
{
|
||||||
|
loop_until_bit_is_set(UCSR0A, RXC0); /* Wait until data exists. */
|
||||||
|
return UDR0;
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
#define BAUD 115200 /* serial baudrate */
|
||||||
|
|
||||||
|
FILE uart_output;
|
||||||
|
FILE uart_input;
|
||||||
|
FILE uart_io;
|
||||||
|
|
||||||
|
void uart_init(void);
|
||||||
|
void uart_putchar(char c, FILE *stream);
|
||||||
|
char uart_getchar(FILE *stream);
|
||||||
|
|
Loading…
Reference in New Issue