From 7fdf8c1dc14a54b56549f079a7adb3cf6e329b4b Mon Sep 17 00:00:00 2001 From: Marvin Blum Date: Tue, 21 Mar 2017 16:50:13 +0100 Subject: [PATCH] Finished serial functions. --- compile | 3 ++- main.c | 33 ++++++++------------------------- pins.c | 2 +- pins.h | 1 + serial.c | 40 ++++++++++++++++++++++++++++++++++++++++ serial.h | 8 ++++++++ 6 files changed, 60 insertions(+), 27 deletions(-) create mode 100644 serial.c create mode 100644 serial.h diff --git a/compile b/compile index 557efb9..65e703a 100755 --- a/compile +++ b/compile @@ -1,9 +1,10 @@ #!/bin/bash mkdir build +avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o build/serial.o -Wall serial.c avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o build/pins.o -Wall pins.c avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o build/main.o -Wall main.c -avr-gcc -mmcu=atmega328p build/main.o build/pins.o -o build/main +avr-gcc -mmcu=atmega328p build/*.o -o build/main avr-objcopy -O ihex -R .eeprom build/main build/main.hex avrdude -F -V -c arduino -p ATMEGA328P -P $1 -b 57600 -U flash:w:build/main.hex rm -r build diff --git a/main.c b/main.c index f234c55..d294ba6 100644 --- a/main.c +++ b/main.c @@ -1,22 +1,16 @@ #include #include +#include "serial.h" #include "pins.h" -#define USART_BAUDRATE 9600 -#define BAUD_PRESCALE (((16000000UL/(USART_BAUDRATE*16UL)))-1) - void loop(); int main(){ - digitalPinMode(6, INPUT); + /*digitalPinMode(6, INPUT); digitalPinMode(7, INPUT); - digitalPinMode(12, OUTPUT); + digitalPinMode(12, OUTPUT);*/ - // TODO verstehen und dann in Funktion packen - UCSR0B |= (1<>8; - UBRR0L = BAUD_PRESCALE; + serial_init(9600); while(1){ loop(); @@ -31,20 +25,9 @@ void loop(){ digitalWrite(12, LOW); }*/ - // TODO verstehen und dann in Funktion packen - while(!(UCSR0A&(1< + +void serial_init(unsigned int baud){ + unsigned long baud_prescale = ((16000000UL/(baud*16UL)))-1; + + // enable transmitter and receiver + UCSR0B |= (1<>8; + UBRR0L = baud_prescale; +} + +void serial_write(char* data, unsigned int n){ + unsigned int i; + + for(i = 0; i < n; i++){ + // wait for empty tx buffer + while(!(UCSR0A&(1<