Ist das normal, dass der so lange braucht?
Das Interrupthandling des CCS ist nicht gerade effizient. 12µs sind 60 Befehlszyklen, was mir zwar etwas viel erscheint, aber leider durchaus noch im Bereich des möglichen liegt. Du solltest Dir mal das Dissassembly Listing des vom CCS generierten Codes anschauen.
Danach hab ich jede menge Zeit.
Wenn es Dir tatsächlich darauf ankommt, die Wandlung schnellst möglich nach einer "externen" steigenden Flanke zu starten, gibt es wahrscheinlich eine bessere Möglichkeit als den INT0 Pin. Das ECCP1-Modul im Compare-Modus verfügt über einen "special event trigger", der die Wandlung automatisch in Hardware startet.
Prinzipielle Vorgehensweise:
- externes Signal an den T13CKI-Pin anlegen
- Timer1 (oder Timer3) so konfigurieren, daß er externe Flanken zählt (synchron), Prescaler auf 1:1
- ECCP1-Modul auf "Compare mode, trigger special event" und den gewünschten Timer (1 oder 3) konfigurieren
- <ECCPR1H:ECCPR1L> auf 0x0001 setzen (Timerwert, bei dem der "special event trigger" ausgelöst und die Wandlung gestartet wird)
- nach Abschluß der automatisch gestarteten Wandlung erfolgt ein Interrrupt des AD-Wandlers
Ich bin mir nicht hunderprozentig sicher, ob bei dieser Vorgehensweise der "special_event_trigger" wirklich bei jeder steigenden Flanke an T13CKI ausgelöst wird (wenn ich falsch liegen sollte, erfolgt der Trigger bei jeder zweiten steigenden Flanke).
Viele Grüße
Bernd