SAME54 Interrupt latency Problem

Gast #5795735
Hi,
ich hab n kleines Projekt mit dem ATSAME54 Xplained Pro Board 
angefangen. Es hat einen Input Pin auf den ein Signal kommt und dann 
einen Interrupt auslöst der der einen Ausgang schaltet.
Das Problem ist das die Zeit vom Input Signal bis zum Schalten 17us 
braucht. Hat jemand eine Idee wie man die Zeit verkürzen kann?

Danke schonmal
Angehängte Dateien:
Gast #5795766
hier noch den Code dazu
1
static void ISR(void){
2
  gpio_toggle_pin_level(PB08);
3
}
4

5
int main(void)
6
{
7
  /* Initializes MCU, drivers and middleware */
8
  atmel_start_init();
9

10
  ext_irq_register(PA06, ISR);
11

12
  /* Replace with your application code */
13
  while (1) {
14
  }
15
}
Gast #5795843
marmota schrieb:
> Die Funktion schaltet im Nanosekunden bereich.

Woher weißt du das? Ruf sie doch mal 2x hintereinander auf, dann sieht 
man ja auf dem Oszilloskop wie lange die braucht.

Auf welchem Takt läuft der Controller? Cache aktiviert?
Gast #5795879
Dann zeig doch mal den dissassemblierten Code von ISR und 
gpio_toggle_pin_level.
Welchen Takt verwendest du für den EIC? Nicht zufällig den 32kHz-Takt? 
Benutzt du den Filter und die Entprell-Logik?
Gast #5795912
Bäh, ASF. :-)

So langsam sollte das aber echt nicht sein.
17µs ist wirklich übel.

REG_PORT_OUTTGL1 = PORT_PB08;


>ext_irq_register(PA06, ISR);

Wenn ich das so sehe, dass ist doch gar nicht die Interrupt-Funktion.
Da hängt doch sicher noch die eigentliche Funktion davor und dekodiert 
mit was auch immer für einen Aufwand erstmal was passiert ist und wo 
hingesprungen werden soll.

Den EIC von Hand zu konfigurieren und die EIC_Handler Funktion der 
Anforderung entsprechend zu schreiben dürfte deutlich fixeren Code 
erzeugen.
Gast #5799530
So sieht es ohne ASF aus.

Kanal1: Eingang
Kanal2: ISR

SAME54@48MHZ und Cache aktiv


ISR(EIC_4_Handler)
{
  PORTB->OUTTGL.reg = (1u<<8);
  __ASM volatile ("":::"memory");

  EIC->INTFLAG.reg = (1u<<4);

  __ASM volatile ("":::"memory");
  PORTB->OUTTGL.reg = (1u<<8);
}
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.