mikrocontroller.net

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


Autor: Marcus Maul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (Gast)
Datum:
Angehängte Dateien:
  • diff (3,91 KB, 443 Downloads)

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Marcus Maul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marcus Maul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter B (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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. ;-)

Autor: Gerrit (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.