atmega324pb: Konflikt Timer2 und USART2?

OP #5574511
Hallo zusammen,

mir ist gerade aufgefallen, dass es wohl einen Ressourcenkonflikt 
zwischen TC2 und USART2 beim Mega324PB gibt:
1
int main() {
2
    TCCR2A = 0xf3;
3
    TCCR2B = 0x03;
4
    OCR2A = 128;
5
    OCR2B = 128;
6
    DDRD |= _BV(6) | _BV(7);
7
    
8
    UCSR2B = 0x10; // oder 0x08
9

10
    while(true);
11
}

Wird der USART2 eingeschaltet (UCSR2B) stellt OC2A den Betrieb ein. Bei 
OC2B habe ich noch meine Impulse.

Was geht hier vor?

Danke für Hinweise!
Gast
Randy B. schrieb:

> mir ist gerade aufgefallen, dass es wohl einen Ressourcenkonflikt
> zwischen TC2 und USART2 beim Mega324PB gibt:

Nicht "gibt". Nur "kann geben".

> Wird der USART2 eingeschaltet (UCSR2B) stellt OC2A den Betrieb ein. Bei
> OC2B habe ich noch meine Impulse.
>
> Was geht hier vor?
>
> Danke für Hinweise!

Lies' einfach mal das verdammte Datenblatt. Da steht das doch alles 
drinne. Erste Instanz der Lektüre sind die Abschnitte 5. und 6. Und dann 
könnte man auch noch nachlesen, wie man USART2 korrekt initialisiert, 
wenn man keinen synchronen Modus haben will und damit XCK2 unbenutzt 
bleibt...
OP
c-hater schrieb:

> Lies' einfach mal das verdammte Datenblatt. Da steht das doch alles
> drinne. Erste Instanz der Lektüre sind die Abschnitte 5. und 6. Und dann
> könnte man auch noch nachlesen, wie man USART2 korrekt initialisiert,
> wenn man keinen synchronen Modus haben will und damit XCK2 unbenutzt
> bleibt...

Dann erkläre mir doch mal, wo ich in dem obigen Beispiel den synchronen 
Mode eingeschaltet habe! Wenn Du möchtest, gebe ich Dir das asm-Listing, 
damit Du es besser verstehst.
Gast
Randy B. schrieb:

> Dann erkläre mir doch mal, wo ich in dem obigen Beispiel den synchronen
> Mode eingeschaltet habe! Wenn Du möchtest, gebe ich Dir das asm-Listing,
> damit Du es besser verstehst.

Es genügt, wenn du für die Intialisierung symbolische Namen verwendest, 
dann versteht man das sofort, egal ob C oder Asm...
OP
c-hater schrieb:
> Randy B. schrieb:
>
>> Dann erkläre mir doch mal, wo ich in dem obigen Beispiel den synchronen
>> Mode eingeschaltet habe! Wenn Du möchtest, gebe ich Dir das asm-Listing,
>> damit Du es besser verstehst.
>
> Es genügt, wenn du für die Intialisierung symbolische Namen verwendest,
> dann versteht man das sofort, egal ob C oder Asm...

Dann schau Du mal nach, in welchem SFR man denn den synchronen Mode 
aktivieren würde, bevor Du so herummoserst.
Gast
Randy B. schrieb:

> Da dieses Verhalten bei TC1 und USART1 (auch ein Pin-Multiplex zwischen
> OC1B und XCK1) so nicht besteht, komme ich zu dem Schluss, dass es ein
> Bug im atmega324pb ist.

Das wäre durchaus denkbar.

Ich habe auch schon den einen oder anderen AVR8-Bug gefunden, der nicht 
im DB unter den Errata gelistet war. Allerdings noch nie einen derart 
gravierenden. Meistens nur Zeug im (sowieso eher lausig dokumentierten) 
Analogkram.

Aber ich würde an deiner Stelle die Hoffnung noch nicht völlig aufgeben. 
Es bleiben nämlich noch Freiheitsgrade. So z.B. ein Fehler im 
C-Compiler. Den hast du bisher nicht ausgeschlossen. Dazu musst du nur 
dasselbe Programm in Assembler schreiben. Die paar Zeilen werden ja wohl 
kein Problem sein, oder?

Auch möglich: ein Hardware-Bug, der zwar existiert, aber leicht zu 
umgehen ist. Sprich: was passiert eigentlich, wenn du UCSR2C und UCSR2D 
explizit mit den gewünschten Werten initialisierst (also mit denen, die 
sie nach Reset sowieso haben sollte), nachdem du UCSR2A und UCSR2B 
gesetzt hast?

Ach so: wie kommt dein Programm eigentlich auf das Device? Eventuell per 
Bootloader? Dann hast du eine Multiplikation möglicher Bugs des jeweils 
verwendeten C-Compilers und der des jeweils verwendeten Nutzcodes...

Mittels Programmierung in Asm kannst du ganz sicher eine ganze Klasse 
von Fehlern in beiden Störvektoren ausschliessen...
OP
Das asm-Listing hatte ich Dir auch schon angeboten: wolltest Du nicht 
haben. Ich habe es aber kontrolliert und es entspricht dem DB. Auch 
alles andere Vorgschlagene habe ich schon durch. Sonst hätte ich kein 
Ticket bei MicroChip aufgemacht.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 8 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.