Hallo zusammen,
ich habe nach einigem hin und her zu Linux gewechselt und versuche
gerade meine AVR Toolchain einzurichten. Konkret will ich einfach grad
nur ein simples Testprogramm schreiben, dass über den UART zeichen
empfängt und sendet. Dafür will ich stdin und stdout mit meine Streams
laden und printf, scanf nutzen. Leider funktioniert das nicht wirklich.
Der Controller sendet einfach immer '>' und erwartet keine Eingabe..
Wenn ich den Code mit AVR Studio compaliere funktioniert alles und wenn
ich das elf file von AVR Studio mit avr dude flashe funkioniert auch
alles. Hat jemand eine Ahnung woran das liegen könnte
Grüße koro
main.c
1 | #include <avr/io.h>
|
2 | #include <stdio.h>
|
3 | #include "usart.h"
|
4 |
|
5 | int main(){
|
6 | FILE uart_output = FDEV_SETUP_STREAM(&iUSARTPutChar, NULL, _FDEV_SETUP_WRITE);
|
7 | FILE uart_input = FDEV_SETUP_STREAM(NULL, &iUSARTGetChar, _FDEV_SETUP_READ);
|
8 | char cZeichen;
|
9 | vUSARTInit();
|
10 | stdout = &uart_output;
|
11 | stdin = &uart_input;
|
12 | while(1){
|
13 | printf(">\n\r");
|
14 | scanf("%c",&cZeichen);
|
15 | printf("%c",cZeichen);
|
16 | }
|
17 | return 0;
|
18 | }
|
usart.c
1 | #include "usart.h"
|
2 |
|
3 | void vUSARTInit(){
|
4 | UCSRA = 0x00;
|
5 | UCSRB = (1<<RXEN) | (1<<TXEN);
|
6 | UCSRC = (1<<UCSZ1) | (1<<UCSZ0) | (1<<URSEL);
|
7 | UBRRL = 7;
|
8 | UBRRH = 0;
|
9 | }
|
10 |
|
11 | int iUSARTPutChar(char _cZeichen, FILE *_ptStream){
|
12 | while(!(UCSRA & (1<<UDRE)));
|
13 | UDR = _cZeichen;
|
14 | return 0;
|
15 | }
|
16 |
|
17 | int iUSARTGetChar(FILE *_ptStream){
|
18 | while(!(UCSRA & (1<<RXC)));
|
19 | return UDR;
|
20 | }
|
Kommand line befehle
avr-gcc -c -mmcu=atmega16 usart.c -o usart.o
avr-gcc -c -mmcu=atmega16 main.c -o main.o
avr-gcc main.o usart.o -o dummy.elf