Interrupts beim AT91SAM9261

Gast #3172222
Lesenswert?
• ▲
▼
Hallo,

ich möchte bei meinem AT91SAM9261 die Interrupts ausprobieren. Hierzu 
habe ich mir aus den examples den PIT Interrupt "herausgepickt".

[c]
//---------------------------------------------------------------------- 
--------
/// Handler for PIT interrupt. Increments the timestamp counter.
//---------------------------------------------------------------------- 
--------
void ISR_Pit(void)
{
  unsigned int status;

  // Read the PIT status register
  status = PIT_GetStatus() & AT91C_PITC_PITS;
  dbg_Puts(AT91C_BASE_DBGU, "ISR\n\r");
  if (status != 0) {
    // Read the PIVR to acknowledge interrupt and get number of ticks
    //timestamp += (PIT_GetPIVR() >> 20);
  }
}

//---------------------------------------------------------------------- 
--------
/// Configure the periodic interval timer to generate an interrupt every
/// millisecond.
//---------------------------------------------------------------------- 
--------
void ConfigurePit(void)
{
  // Initialize the PIT to the desired frequency
  PIT_Init(1000, 96);

  // Configure interrupt on PIT
  AIC_DisableIT(AT91C_ID_SYS);
  AIC_ConfigureIT(AT91C_ID_SYS, AT91C_AIC_PRIOR_HIGHEST, ISR_Pit);
  AIC_EnableIT(AT91C_ID_SYS);
  PIT_EnableIT();

  // Enable the pit
  PIT_Enable();
}
[\c]

Den Code habe ich in mein IAR Projekt integriert und entsprechend in den 
internen SRAM (ab 0x300000, Vektoren ab 0x300000) gelinkt. Mein Problem 
ist jetzt, dass er die ISR nicht ausführt. Deshalb gehe ich davon aus, 
dass ich irgendwo in der Initialisierung nocht etwas vergessen habe. 
Deshalb jetzt meine Fragen:
Welche zusätzlichen Schritte sind erforderlich?
Muss eventuell im Startup-Teil noch etwas integriert werden? (Ich habe 
diesen Teil so belassen, wie IAR dies durch den Projekt-Wizard 
bereitstellt)

Danke Tim
Gast #3174352
Lesenswert?
• ▲
▼
Hi Tim,

was ich nicht sehe ist die Freigabe der IRQ/FIQ im ARM-Kern. Auf diese 
Leitungen arbeitet der AIC.
z.B.:

// IRQ handling function for the ARM core.
// Enable IRQ
void ARM_enable_irq (void)
{
  _asm__ __volatile_ ("MRS r1, CPSR");
  _asm__ __volatile_ ("BIC r1, r1, #0x80");
  _asm__ __volatile_ ("MSR CPSR_c, r1");
}

Kannst Du so etwas ähnliches im Rest vom Code finden?

Gruß Alec

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.