PIC, I2C - Reaktionszeit auf SSP-Interrupt

Gast #1318772
Lesenswert?
• ▲
▼
Hallo Forengemeinde,

ich benutze zwei PIC18F8520, zwischen denen ich Daten über I2C 
austausche.
Lesen und Schreiben funktioniert gut, bloß ist beim Schreiben die 
Reaktionszeit des Slave auf ein Address-Match oder ein Datenbyte mit 150 
us m.E. viel zu lang.
Das ist die Zeit, die ich gemessen habe zwischen dem ACK-Signal des 
Slave (das kommt ohne Verzögerung nach dem Address- bzw. Datenbyte des 
Masters) und dem Aufruf der Interrupt-Routine.
Beim Read-Request des Masters kommt die Interrupt-Routine bereits nach 
wenigen Mikrosekunden.
Das Verhalten ist natürlich bei allen Baudraten gleich.
Der Master ist mit 25 MHz und der Slave mit 1,8432 MHz getaktet.

Kennt jemand so ein Verhalten?
Ist das eine normale Reaktionszeit, liegt es an der niedrigen Taktrate 
des Slave?

Gruß
Brainy
Gast #1318850
Lesenswert?
• ▲
▼
Ohne einen Quellcode lässt sich darüber nicht allzuviel sagen. Aber: 
Funktionsaufrufe innerhalb einer ISR (auch wenn nicht verwendet) zwingen 
zumindest den C18 Compiler zu einem ÄUSSERST ineffizienten Stackhandling 
mit langer Latenzzeit. Einfach simulieren...
Gast #1318860
Lesenswert?
• ▲
▼
1,8432 MHz ist jetzt aber auch nicht gerade wahnsinnig schnell.
Da dauert ein Befehl schon mal allein 2,2 µs.
Wie wird denn dei Verzögerung bei Dir gemessen? Setzt Du in der ISR 
einen Pin auf High/Low?
Gast #1318900
Lesenswert?
• ▲
▼
Genau, in der ISR als erstes einfach einen Port auf high setzen.
1,8432 MHz sind natürlich nicht schnell, aber in der Zeit kann er ja ca. 
60 Instruktionen durchführen. Und das halte ich für ziemlich viel.
Gast #1318912
Lesenswert?
• ▲
▼
@Bernhard_:
Ich verwende den HiTech PICC-18 STD Compiler und rufe innerhalb der ISR 
tatsächlich eine SSP-Handler-Funktion auf.
Ich werde in Kürze mal testweise das SSP-Handling ohne Interrupt 
durchführen.
Gast #1318940
Lesenswert?
• ▲
▼
> 1,8432 MHz sind natürlich nicht schnell, aber in der Zeit kann er ja ca.
> 60 Instruktionen durchführen
Dann schau mal ins Assemblerlisting. Es würde mich nicht wundern, wenn 
der PIC diese 60 Instruktionen als Overhead in der ISR verbrät (Register 
sichern usw...)
Gast #1319868
Lesenswert?
• ▲
▼
Ich habe mir im Assembler-Listing den Overhead beim Interrupt angesehen 
und es stimmt, es werden für's Hin und Zurück jeweils 42 Instruktionen 
verbraten, incl. 50% NOPs(!).
D.h. ich werde für meine Anwendung Interrupts vermeiden, denn Polling 
kann ich mir in dem Fall leisten.
Und einen schnelleren Clock werde ich mir auch leisten. ;-)

Bernhard_ und Zwirbeljupp, vielen Dank für Eure Unterstützung, Ihr habt 
mir schnell geholfen!

Brainy

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