vajk
20.09.2009, 13:31
Hallo !
Ich hatte ein Problem mit der seriellen Schnittstelle. In Abhängigkeit
der Reihenfolge bei der Initialisierung werden falsche Daten gesendet.
Wenn ich folgende Reihenfolge bei der Initialisierung verwende,
dann kommen nur 0-Byte am Comport raus:
* *uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU / (16 * BAUDRATE) - 1);
* *UBRRH * * * * = (uint8_t) (ubrr >> 8);
* *UBRRL * * * * = (uint8_t) (ubrr);
* *UCSRB * * * *|= (1 << RXEN) *| (1 << TXEN) *| (1 << RXCIE);
* *UCSRC * * * *|= (1 << USBS) *| (1 << UCSZ1) | (1 << UCSZ0); // asyncron 8N1
Wenn ich die Reihenfolge umdrehe, ist alles wie es sein sollte
* *UCSRB * * * *|= (1 << RXEN) *| (1 << TXEN) *| (1 << RXCIE);
* *UCSRC * * * *|= (1 << USBS) *| (1 << UCSZ1) | (1 << UCSZ0); // asyncron 8N1
* *uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU / (16 * BAUDRATE) - 1);
* *UBRRH * * * * = (uint8_t) (ubrr >> 8);
* *UBRRL * * * * = (uint8_t) (ubrr);
Anmerkung - die Codeschnipsel sind Bestandteil der Anfangsinitialisierung des atmega32, die Interrupts werden am Ende dieser mit sei(); aktiviert.
Ich hefte das unter "Bug || unloesbares Raetsel" und "Info für alle" ab.
Vy 73
Vajk
Ich hatte ein Problem mit der seriellen Schnittstelle. In Abhängigkeit
der Reihenfolge bei der Initialisierung werden falsche Daten gesendet.
Wenn ich folgende Reihenfolge bei der Initialisierung verwende,
dann kommen nur 0-Byte am Comport raus:
* *uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU / (16 * BAUDRATE) - 1);
* *UBRRH * * * * = (uint8_t) (ubrr >> 8);
* *UBRRL * * * * = (uint8_t) (ubrr);
* *UCSRB * * * *|= (1 << RXEN) *| (1 << TXEN) *| (1 << RXCIE);
* *UCSRC * * * *|= (1 << USBS) *| (1 << UCSZ1) | (1 << UCSZ0); // asyncron 8N1
Wenn ich die Reihenfolge umdrehe, ist alles wie es sein sollte
* *UCSRB * * * *|= (1 << RXEN) *| (1 << TXEN) *| (1 << RXCIE);
* *UCSRC * * * *|= (1 << USBS) *| (1 << UCSZ1) | (1 << UCSZ0); // asyncron 8N1
* *uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU / (16 * BAUDRATE) - 1);
* *UBRRH * * * * = (uint8_t) (ubrr >> 8);
* *UBRRL * * * * = (uint8_t) (ubrr);
Anmerkung - die Codeschnipsel sind Bestandteil der Anfangsinitialisierung des atmega32, die Interrupts werden am Ende dieser mit sei(); aktiviert.
Ich hefte das unter "Bug || unloesbares Raetsel" und "Info für alle" ab.
Vy 73
Vajk