mirror of
https://github.com/Kugelschieber/arduino-c.git
synced 2026-01-18 02:50:26 +00:00
Finished serial functions.
This commit is contained in:
3
compile
3
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
|
||||
|
||||
33
main.c
33
main.c
@@ -1,22 +1,16 @@
|
||||
#include <avr/io.h>
|
||||
#include <util/delay.h>
|
||||
#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<<RXEN0)|(1<<TXEN0);
|
||||
UCSR0C |= (1<<UCSZ00)|(1<<UCSZ01);
|
||||
UBRR0H = BAUD_PRESCALE>>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<<UDRE0)));
|
||||
UDR0 = 'h';
|
||||
while(!(UCSR0A&(1<<UDRE0)));
|
||||
UDR0 = 'e';
|
||||
while(!(UCSR0A&(1<<UDRE0)));
|
||||
UDR0 = 'l';
|
||||
while(!(UCSR0A&(1<<UDRE0)));
|
||||
UDR0 = 'l';
|
||||
while(!(UCSR0A&(1<<UDRE0)));
|
||||
UDR0 = 'o';
|
||||
while(!(UCSR0A&(1<<UDRE0)));
|
||||
UDR0 = '\n';
|
||||
// while(!(SPSR&(1<<SPIF)));
|
||||
char buffer[5];
|
||||
serial_read(buffer, 5);
|
||||
serial_write(buffer, 5);
|
||||
|
||||
_delay_ms(1000);
|
||||
_delay_ms(100);
|
||||
}
|
||||
|
||||
1
pins.h
1
pins.h
@@ -6,6 +6,7 @@ extern const unsigned char HIGH;
|
||||
extern const unsigned char INPUT;
|
||||
extern const unsigned char OUTPUT;
|
||||
|
||||
// rename underscore
|
||||
void digitalPinMode(unsigned char, unsigned char);
|
||||
int digitalRead(unsigned char);
|
||||
void digitalWrite(unsigned char, unsigned char);
|
||||
|
||||
40
serial.c
Normal file
40
serial.c
Normal file
@@ -0,0 +1,40 @@
|
||||
#include "serial.h"
|
||||
#include <avr/io.h>
|
||||
|
||||
void serial_init(unsigned int baud){
|
||||
unsigned long baud_prescale = ((16000000UL/(baud*16UL)))-1;
|
||||
|
||||
// enable transmitter and receiver
|
||||
UCSR0B |= (1<<RXEN0)|(1<<TXEN0);
|
||||
|
||||
// set frame format (8 data bits, 2 stop bits)
|
||||
UCSR0C |= (1<<UCSZ00)|(1<<UCSZ01);
|
||||
|
||||
// set baudrate (16 bit)
|
||||
UBRR0H = baud_prescale>>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<<UDRE0)));
|
||||
|
||||
// write to tx register
|
||||
UDR0 = data[i];
|
||||
}
|
||||
}
|
||||
|
||||
void serial_read(char* data, unsigned int n){
|
||||
unsigned int i;
|
||||
|
||||
for(i = 0; i < n; i++){
|
||||
// wait until data is available in rx buffer
|
||||
while(!(UCSR0A&(1<<RXC0)));
|
||||
|
||||
// store in data array
|
||||
data[i] = UDR0;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user