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
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.
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.
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.
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
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
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
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. ;-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.