Hallo, ich bin etwas überfordert. Ich möchte Fleurys I2C Lib mit 400kHz nutzen. Wie muß ich denn die Delays anpassen für einen MEGA128 mit 2 MHz? ;*********************************************************************** ** ; delay half period ; For I2C in normal mode (100kHz), use T/2 > 5us ; For I2C in fast mode (400kHz), use T/2 > 1.3us ;*********************************************************************** ** .stabs "",100,0,0,i2c_delay_T2 .stabs "i2cmaster.S",100,0,0,i2c_delay_T2 .func i2c_delay_T2 ; delay 5.0 microsec with 4 Mhz crystal i2c_delay_T2: ; 4 cycles rjmp 1f ; 2 " 1: rjmp 2f ; 2 " 2: rjmp 3f ; 2 " 3: rjmp 4f ; 2 " 4: rjmp 5f ; 2 " 5: rjmp 6f ; 2 " 6: nop ; 1 " ret ; 3 " .endfunc ; total 20 cyles = 5.0 microsec with 4 Mhz crystal Grüße Günni
Nach Eva Zwerg: 10 cyles (die hälfte) weglassen. Bei jedem rjmp steht die Anzahl cycles die dieser Befehl benötigt. Nur noch Sprungziel anpassen und gut ist das.
Nö, man muss die Verzögerung ja vierteln (100 kHz -> 400 kHz), also 15 der 20 Zyklen weglassen. Das geht mit dem call/ret Konzept schon nicht mehr, da bereits ohne allen ,,Füllstoffs'' 7 Zyklen für call und ret draufgehen. Man müsste dann entweder auf ein inline-delay ausweichen (z. B. 5 NOPs) oder einfach damit leben, dass die 7 Zyklen eben nur ca. 300 kHz Takt ergeben.
@Michael Wieso Halbierung, dann würde es ja noch langsamer werden. Wie müsste es denn mit "Inline-NOPs" aussehen? Ich habe das gleiche Problem und würde gerne bei 2 MHz Takt bleiben. Da ich keine Ahnung von Assembler habe wäre ich für einen Codeschnipsel sehr dankbar... Dirk
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.