Fleury I2C mit 400kHz

Gast #364213
Lesenswert?
• ▲
▼
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
Moderator Persönliche Seite #364215
Lesenswert?
• ▲
▼
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.
Gast #364218
Lesenswert?
• ▲
▼
@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

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