Anweisung mit SFR wird nicht ausgeführt.

OP #583224
Lesenswert?
• ▲
▼
Hi,

verwende zur Zeit folgende ISR aus der Bibliothek vom Peter Fleury:
1
SIGNAL(SIG_USART0_DATA){
2
    unsigned char tmptail;
3
    if (USART0_TxHead != USART0_TxTail) {
4
        tmptail = (USART0_TxTail + 1) & USART0_TX_BUFFER_MASK;
5
        USART0_TxTail = tmptail;
6
        UDR0 = USART0_TxBuf[tmptail];
7
    }else{       
8
        UCSR0B &= ~_BV(UDRIE0);
9
    }
10
}

Macht (sollte) folgendes:
Wenn die Indizes des Ringspeichers, in dem die über USART0 zu 
verschickenden Zeichen liegen, gleich sind, dann ist der Ringspeicher 
leer und im ELSE-Zweig wird sichergestellt, das die ISR nicht erneut 
aufgerufen wird.

Habe das beim Debuggen mit JTAGICE soweit verfolgt, das ich die Zeile 
"UCSR0B &= ~_BV(UDRIE0);" im ELSE-Zweig erreiche. Wenn ich nun mit "F11" 
die Zeile ausführen lasse, dann braucht es eine Weile und es erscheint 
der Disassembler .. naja - ab da ist dann keine nachvollziehbare 
Ausführung mehr möglich. Habe einige andere Schreibweisen probiert, hat 
aber leider nichts geholfen.

Gibt's irgendeinen Grund im Zusammenhang mit anderen Flags oder 
sonstwas, der erklären könnte warum ich "UDRIE0" nicht mit dieser 
Anweisung, an dieser Stelle oder nicht zu diesem Zeitpunkt löschen 
kann/darf?

Verwende zur Zeit:
WinAVR-20060421
AVR Studio 4.12SP4
ATmega162

Markus
Gast #583330
Lesenswert?
• ▲
▼
Danke für den Hinweis.

Hab's ausprobiert, hat leider nicht geholfen.

Er weder im Debugmodus noch "Freilaufend" über diese Zeile hinweg, das 
schließt wohl aus, das es am JTAG liegt - ?!?

Befürchte langsam, das ich gleich anfange AVR Studio 4.13 + WinAVR 
20070525 zu installieren .. hoffentlich hab' ich danach nicht noch mehr 
Fehler.

G
#583358
Lesenswert?
• ▲
▼
Markus C. wrote:

> Habe das beim Debuggen mit JTAGICE soweit verfolgt, das ich die Zeile
> "UCSR0B &= ~_BV(UDRIE0);" im ELSE-Zweig erreiche.

Warum probierst Du nicht einfach mal "Real Life" aus, hast Du keine UART 
am PC ?
Dann weißt Du sofort, obs am JTAG liegt oder nicht.


> Wenn ich nun mit "F11"
> die Zeile ausführen lasse, dann braucht es eine Weile und es erscheint
> der Disassembler .. naja - ab da ist dann keine nachvollziehbare
> Ausführung mehr möglich.

Das ist mal ne Fehlerbeschreibung mit der jeder was anfangen kann.
Werd konkreter !


Peter
OP #583389
Lesenswert?
• ▲
▼
> Warum probierst Du nicht einfach mal "Real Life" aus, hast Du keine UART
> am PC ?
> Dann weißt Du sofort, obs am JTAG liegt oder nicht.

Hatte ich bereits gemacht, daher weiß ich auch, das ich von dort aus 
nicht wieder an die Stelle zurückkomme von wo aus der Aufruf kam.

Im ZIP-File sind zwei Screenshots von vor der Ausführung der Zeile 
"UCSR0B &= ~(1<<UDRIE0);".
Hab' das so dargestellt, das man die USART-Register erkennen und den 
Code sehen kann.
Der dritte Screenshot zeigt die Ausgaben, die ich erzeuge ... leider 
kommt der Debug-Print nicht, der nach dem Rücksprung vorgesehen ist.
Mit oder ohne JTAG macht keinen Unterschied.
Ob das JTAG nicht doch irgendeinen Einfluß hat, kann das deshalb nicht 
so genau beurteilen weil ich dessen Arbeitsweise nicht bis ins letzte 
Detail erforscht habe.

if(1){
    txStringUsart0("Ping X\r\n");    // Schreibt Zeigen in Warteschlange

    // hier erfolgt die Abarbeitung der
    // ISR aus deren ELSE-Zweig ich nicht
    // an die richtige Stelle im Programm
    // zuückkehre.

    return 1;
} else {
    return -2;
}

-> Den Zustand kurz vor der Ausführung von "UCSR0B &= ~(1<<UDRIE0);" ist 
am besten im Screenshot zu erkennen.



Nach dem Build steht folgendes im Memory Usage
program: 32.9% Full
data: 52.1% Full
eeprom: 37.5% Full

... sollte für den Stack genug Raum lassen.

Welche Info wäre sonst noch hilfreich?

Markus
Angehängte Dateien:
#583686
Lesenswert?
• ▲
▼
Markus C. wrote:
> Hatte ich bereits gemacht, daher weiß ich auch, das ich von dort aus
> nicht wieder an die Stelle zurückkomme von wo aus der Aufruf kam.


Was soll wohin zurückkehren ?
Wird denn was von der UART gesendet ?

Vielleicht solltest Du mal nen kompletten Code posten (als Anhang), 
damit man nicht mehr im Nebel stochern muß.

Zu JTAG kann ich nichts sagen, hab ich noch nie benutzt.


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren