Anpassung der Delay Routine (von 4 auf 6 MHz) in i2cmaster.S

Gast #1555941
Lesenswert?

Hallo zusammen,
vielleicht kann mir jemand einen Tipp zu folgendem Problem geben:

Die Delay Routine im i2cmaster.S von P. Fleury ist auf 4 MHz µC Takt 
definiert.
Wie lässt sich diese auf 6 MHz bzw. auf N MHz µC Takt einstellen?


1
;*************************************************************************
2
; delay half period
3

4
; For I2C in normal mode (100kHz), use T/2 > 5us
5

6
; For I2C in fast mode (400kHz),   use T/2 > 1.3us
7

8
;*************************************************************************
9
  .stabs  "",100,0,0,i2c_delay_T2
10
  .stabs  "i2cmaster.S",100,0,0,i2c_delay_T2
11
  .func i2c_delay_T2  ; delay 5.0 microsec with 4 Mhz crystal  
12

13
i2c_delay_T2:        ; 4 cycles
14

15
    rjmp 1f      ; 2   "
16
1:  rjmp 2f      ; 2   "
17
2:  rjmp 3f      ; 2   "
18
3:  rjmp 4f      ; 2   "
19
4:  rjmp 5f      ; 2   "
20
5:  rjmp 6f      ; 2   "
21
6:  nop          ; 1   "
22
    ret          ; 3   "
23
    .endfunc     ; total 20 cyles = 5.0 microsec with 4 Mhz crystal

Gruß,
die amme
#1555975
Lesenswert?

die amme schrieb:
> Wie lässt sich diese auf 6 MHz bzw. auf N MHz µC Takt einstellen?

Mit folgender Formel bekommst du die Anzahl der Wartezyklen:

cycle= 0.5 * FCPU / FI2C

das heißt bei 100khz I2C Takt und 6MHz FCPU brauchst du
0.5 * 6000000 / 100000 = 30 Zyklen.

20 hast du schon. Das heißt du solltest 10 weitere Zyklen einfügen.

Gruß Olli
Gast #1556034
Lesenswert?

Danke für die Tipps!

Wenn ich das richtig verstehe, könnte das wie folgt aussehen:

> 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:  rjmp 7f      ; 2   "
  7:  rjmp 8f      ; 2   "
  8:  rjmp 9f      ; 2   "
  9:  rjmp 10f     ; 2   "
 10:  rjmp 11f     ; 2   "
>11:  nop          ; 1   "
>     ret          ; 3   "
>     .endfunc     ; total 30 cyles = 5.0 microsec with 6 Mhz crystal

Wäre das so richtig?

Gruß,
die amme

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