mirror of
https://github.com/Kugelschieber/arduino-c.git
synced 2026-01-18 11:00:26 +00:00
Finished serial functions.
This commit is contained in:
3
compile
3
compile
@@ -1,9 +1,10 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
mkdir build
|
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/pins.o -Wall pins.c
|
||||||
avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o build/main.o -Wall main.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
|
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
|
avrdude -F -V -c arduino -p ATMEGA328P -P $1 -b 57600 -U flash:w:build/main.hex
|
||||||
rm -r build
|
rm -r build
|
||||||
|
|||||||
33
main.c
33
main.c
@@ -1,22 +1,16 @@
|
|||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
#include <util/delay.h>
|
#include <util/delay.h>
|
||||||
|
#include "serial.h"
|
||||||
#include "pins.h"
|
#include "pins.h"
|
||||||
|
|
||||||
#define USART_BAUDRATE 9600
|
|
||||||
#define BAUD_PRESCALE (((16000000UL/(USART_BAUDRATE*16UL)))-1)
|
|
||||||
|
|
||||||
void loop();
|
void loop();
|
||||||
|
|
||||||
int main(){
|
int main(){
|
||||||
digitalPinMode(6, INPUT);
|
/*digitalPinMode(6, INPUT);
|
||||||
digitalPinMode(7, INPUT);
|
digitalPinMode(7, INPUT);
|
||||||
digitalPinMode(12, OUTPUT);
|
digitalPinMode(12, OUTPUT);*/
|
||||||
|
|
||||||
// TODO verstehen und dann in Funktion packen
|
serial_init(9600);
|
||||||
UCSR0B |= (1<<RXEN0)|(1<<TXEN0);
|
|
||||||
UCSR0C |= (1<<UCSZ00)|(1<<UCSZ01);
|
|
||||||
UBRR0H = BAUD_PRESCALE>>8;
|
|
||||||
UBRR0L = BAUD_PRESCALE;
|
|
||||||
|
|
||||||
while(1){
|
while(1){
|
||||||
loop();
|
loop();
|
||||||
@@ -31,20 +25,9 @@ void loop(){
|
|||||||
digitalWrite(12, LOW);
|
digitalWrite(12, LOW);
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
// TODO verstehen und dann in Funktion packen
|
char buffer[5];
|
||||||
while(!(UCSR0A&(1<<UDRE0)));
|
serial_read(buffer, 5);
|
||||||
UDR0 = 'h';
|
serial_write(buffer, 5);
|
||||||
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)));
|
|
||||||
|
|
||||||
_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 INPUT;
|
||||||
extern const unsigned char OUTPUT;
|
extern const unsigned char OUTPUT;
|
||||||
|
|
||||||
|
// rename underscore
|
||||||
void digitalPinMode(unsigned char, unsigned char);
|
void digitalPinMode(unsigned char, unsigned char);
|
||||||
int digitalRead(unsigned char);
|
int digitalRead(unsigned char);
|
||||||
void digitalWrite(unsigned char, 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