Bunch
22.02.2006, 09:23
Hallo,
ich bin Anfänger in GCC, und nutze AVRStudio 4.12 und GCC.
Ich habe einen ATmega32 und dort in den Fuses "int. RC Osc. 4Mhz" eingestellt.
Zum debuggen habe ich ein JTAG interface.
Nun versuche ich seit Tagen über das UART, Zeichen an den PC zu senden, was mir leider nicht gelingt.
Es kommen, wenn überhaupt, nur krüptische Zeichen an, aber nicht das was ich abschicke.
Interessant ist, daß wenn ich den µC mit dem JTAG debugge, und dann den Code mit F11 im Einzelsatz durchgehe und das Zeichen an das UDR Register übergebe, klappt es ! Aber eben nur im Einzelsatz !!!
Ich kann mir nicht erklären ob und was falsch ist.
#include <avr/io.h>
#include <stdint.h>
#include <avr/iom32.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#ifndef F_CPU
#define F_CPU 4000000 /* Oszillator-Frequenz in Hz */
#endif
#define UART_BAUD_RATE 9600
#define UART_BAUD_CALC(UART_BAUD_RATE,F_OSC) ((F_CPU)/((UART_BAUD_RATE)*16L)-1)
uint8_t foo;
int main(void)
{
foo=PINA; // Eingänge an PortB lesen
DDRB=255; //Port A als Ausgang
PORTB=foo; // Ausgang setzten
DDRD=(1<<PD5);
TCCR1A=(1<<WGM11)|(1<<WGM10)|(1<<COM1A1); // nicht -invertierender 10 Bit PWM
TCCR1B=(1<<CS10); //|(1<<CS12) ; // Timer Prescaler
OCR1A=100; // Y Ausgabegrösse
//Initialization of UART
UBRRH=(uint8_t)(UART_BAUD_CALC(UART_BAUD_RATE,F_CP U)>>8);
UBRRL=(uint8_t)UART_BAUD_CALC(UART_BAUD_RATE,F_CPU );
UCSRB |= (1<<TXEN); // UART TX einschalten
UCSRC |= (1<<URSEL)|(3<<UCSZ0); // Asynchron(8N1)
while (!(UCSRA & (1<<UDRE))); // werte bis senden möglich
{
UDR = 'x';
}
main();
return 1;
}
Vielleicht hat jemand nen Tipp für mich.....
Viele Grüsse
ich bin Anfänger in GCC, und nutze AVRStudio 4.12 und GCC.
Ich habe einen ATmega32 und dort in den Fuses "int. RC Osc. 4Mhz" eingestellt.
Zum debuggen habe ich ein JTAG interface.
Nun versuche ich seit Tagen über das UART, Zeichen an den PC zu senden, was mir leider nicht gelingt.
Es kommen, wenn überhaupt, nur krüptische Zeichen an, aber nicht das was ich abschicke.
Interessant ist, daß wenn ich den µC mit dem JTAG debugge, und dann den Code mit F11 im Einzelsatz durchgehe und das Zeichen an das UDR Register übergebe, klappt es ! Aber eben nur im Einzelsatz !!!
Ich kann mir nicht erklären ob und was falsch ist.
#include <avr/io.h>
#include <stdint.h>
#include <avr/iom32.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#ifndef F_CPU
#define F_CPU 4000000 /* Oszillator-Frequenz in Hz */
#endif
#define UART_BAUD_RATE 9600
#define UART_BAUD_CALC(UART_BAUD_RATE,F_OSC) ((F_CPU)/((UART_BAUD_RATE)*16L)-1)
uint8_t foo;
int main(void)
{
foo=PINA; // Eingänge an PortB lesen
DDRB=255; //Port A als Ausgang
PORTB=foo; // Ausgang setzten
DDRD=(1<<PD5);
TCCR1A=(1<<WGM11)|(1<<WGM10)|(1<<COM1A1); // nicht -invertierender 10 Bit PWM
TCCR1B=(1<<CS10); //|(1<<CS12) ; // Timer Prescaler
OCR1A=100; // Y Ausgabegrösse
//Initialization of UART
UBRRH=(uint8_t)(UART_BAUD_CALC(UART_BAUD_RATE,F_CP U)>>8);
UBRRL=(uint8_t)UART_BAUD_CALC(UART_BAUD_RATE,F_CPU );
UCSRB |= (1<<TXEN); // UART TX einschalten
UCSRC |= (1<<URSEL)|(3<<UCSZ0); // Asynchron(8N1)
while (!(UCSRA & (1<<UDRE))); // werte bis senden möglich
{
UDR = 'x';
}
main();
return 1;
}
Vielleicht hat jemand nen Tipp für mich.....
Viele Grüsse