Forum: Compiler & IDEs Bitte Bitte Bitte helft uns arme Tin26 geschädigte!!


von Marcus Maul (Gast)


Lesenswert?

Hallo Leute,

da ich anscheinend nicht in der Lage bin den Code der App307 selbst neu
zu schreiben, ohne das er überhaupt nicht mehr das tut, was ich gerne
möchte - einfach ein paar Daten per USI übertragen.

Wäre jemand von Euch, der IAR Workbench erfahren ist, so lieb und würde
die notwendigen Änderungen machen, damit dieser Code auch unter WinAVR
kompiliert?

http://www.atmel.com/dyn/resources/prod_documents/AVR307.zip

Ich (und einige andere auch) verzweifel langsam.

Danke

Marcus

von Jörg Wunsch (Gast)


Lesenswert?

Wenn Du mir 'ne Tüte ATtiny26 schenkst und mich anderweitig daran
interessiert, diese zum Laufen zu bekommen, mache ich das.

Ansonsten mußt Du schon mal mit konkreten Fragen kommen, sorry.

von Jörg Wunsch (Gast)


Angehängte Dateien:

Lesenswert?

Mit dem angehängten Patch bekomme ich es zumindest sauber zum
Compilieren.  Testen kann ich es nur, wenn Du mir den ATtiny26
zukommen läßt...

Im Übrigen, so clever wie der Trick aus den alten BSD fortunes
mit Bit_Reverse() auch für 32 bit oder längere Zahlen ist, für
8 Bits lohnt das überhaupt nicht, was sie da getan haben.

von Jörg Wunsch (Gast)


Lesenswert?

Da Atmel ja den generierten Assemblercode beilegt, noch weitere
Bemerkungen:

Die Interruptroutine für den timer 0 overflow ist beim IAR ein wenig
kürzer.  Der GCC merkt nicht, daß er sein _zero_reg_ gar nicht
braucht.  Ggf. also besser durch eine handgefeilte Assemblerroutine
ersetzen -- einfach den Compileroutput in eine Assemblerdatei
schreiben und diese als Quelle einbinden.  Möglicherweise mußt Du
sonst die 0x11 `fudge factor' im INTERRUPT_STARTUP_DELAY korrigieren
(keine Ahnung, was sie damit genau machen, aber ich habe mir die
Appnote selbst nicht durchgelesen).

Wie allerdings der IAR darauf kommt:

        IN      R16,0x32
        SUBI    R16,60
                    ^^
        OUT     0x32,R16

wird mir ein Rätsel bleiben.  Der GCC erzeugt:

        in r24,82-0x20
        subi r24,lo8(-(64))
        out 82-0x20,r24

und das erscheint mir auch korrekt, wenn ich den Makro TIMER0_SEED mit
den voreingestellten Werten mit der Hand nachrechne.

Bezüglich meiner Interpretation, wie sie das mit dem USI_UART_TxData
meinen, dürfte ich aber richtig liegen, wenn ich es gegen deren
Assemblercode vergleiche.

von Marcus Maul (Gast)


Lesenswert?

Hallo Jörg,

ich muß mir zwar jetzt mal ganz genau anschauen, was Du da alles
geändert hast, aber es FUNKTIONIERT!!!!

Danke!!!Danke!!!Danke!!!Danke!!!Danke!!!Danke!!!Danke!!!Danke!!!Danke!!! 
Danke!!!Danke!!!Danke!!!Danke!!!Danke!!!Danke!!!Danke!!!Danke!!!Danke!!! 
Danke!!!Danke!!!Danke!!!Danke!!!Danke!!!Danke!!!Danke!!!Danke!!!Danke!!! 
Danke!!!Danke!!!Danke!!!Danke!!!Danke!!!

Marcus

von Marcus Maul (Gast)


Lesenswert?

Hallo Jörg,

hier habe ich auch mein Problem gefunden:
register unsigned char USI_UART_TxData asm("r2");

Wieso ist das Register r2?

Ich dachte immer USIDR ist r15?

Jetzt verstehe ich auch, warum ´mein Oziloskop zwar etwas anzeigte, die
Baudrate auch stimmte, aber niemals etwas transferiert wurde und auch
kein Shifting erzeugt wird.Die USI überprüft ob das USIDR auch gefüllt
wurde.

Die Danke Zeiel wurde nicht umgebrochen arg

Marcus

von Dieter B (Gast)


Lesenswert?

Hallo

register unsigned char USI_UART_TxData asm("r2");

heißt das nicht, das eine Variable "USI_UART_TxData" bekannt gemacht
wird, und diese vom Compiler fest im Register r2 gehalten werden soll
?

MFG
Dieter

von Jörg Wunsch (Gast)


Lesenswert?

Genau das heißt es.  Das IAR-Original hat dafür das Register 15
benutzt (nicht das IO-Register 15!), beim AVR-GCC sollte man aber
besser bei r2 aufwärts anfangen.

Über die Funktion des entsprechenden IAR-Statements gibt der der
Appnote beigelegte Assemblercode (*.s90) hinreichend gut Auskunft. ;-)

von Gerrit (Gast)


Lesenswert?

Hallo *,

seit gegrüßt! Auch ich habe Probleme mit der Portierung der Appnote.
Die hier aufgeführten Modifikationen habe ich von Hand eingepflegt.
Aber es funktioniert nicht.
Wenn ich mit einem Terminal-Programm testen möchte, erhalte ich für
jede Eingabe ein 'x' zurück. Was kann das sein?
Ich verwende die aktuellste WinAVR-Release.
Viele Grüße,
Gerrit

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.