www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ARM-Interrupts/PIT laufen nicht


Autor: Christophe Thil (chrisjt)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Servus,

ich versuche gerade den PIT meines at91sam7x zum Laufen zu überreden.
Anbei der Code meiner main-Routine. Jedoch wird nie die Service-Routine 
aufgerufen.

Ist der Code soweit in Ordnung, und falls ja, wo könnte ich weiter 
suchen?

Gruß,
Christophe

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann es sein, dass man in main() der CPU sagen muss, dass sie Interupts 
berücksichtigen soll? Oder macht das schon der Startup-Code?

Autor: Christophe Thil (chrisjt)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich verwende die beiden Startup-Skripte, die ich mit einer anderen Demo 
erhalten habe. Zur Sicherheit sind sie hier noch angehängt.

Christophe

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kurz quergelesen sehe ich dort nichts, was die Interrupt-Bits im CPSR 
steuert.

Wäre auch eher unüblich. Gängig ist, in main() bei abgeschalteten 
Interrupts loszulegen, um die erst nach der kompletten Initialisierung 
freizugeben.

Autor: Steffen H. (mc_sho)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du hast einiges beim init des PIT vergessen. Dieser Code funktioniert 
bei mir.

void configure_pit(void)
{
  volatile unsigned long pimr = 0;

  /* Configure a resolution of 10 ms */
  //- Grundfrequenz 36,864000 MHz
  //- mck /16 /100Hz = 10ms

  //AT91C_BASE_PITC->PITC_PIMR = (MCK / (16 * 100)) - 1; //- 10ms - 
100Hz

  /* Enable interrupts */
  /* Disable the interrupt on the interrupt controller */
  AT91C_BASE_AIC->AIC_IDCR = (1 << AT91C_ID_SYS);

  /* Save the interrupt handler routine pointer and the interrupt 
priority */
  AT91C_BASE_AIC->AIC_SVR[AT91C_ID_SYS] = (unsigned long) cmx_irq;
  /* Store the Source Mode Register */
  AT91C_BASE_AIC->AIC_SMR[AT91C_ID_SYS] = 
AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL | AT91C_AIC_PRIOR_LOWEST;
  /* Clear the interrupt on the interrupt controller */
  AT91C_BASE_AIC->AIC_ICCR = (1 << AT91C_ID_SYS);

  /* Enable the interrupt on the interrupt controller */
  AT91C_BASE_AIC->AIC_IECR = (1 << AT91C_ID_SYS);

  /* Enable the interrupt on the pit */
  pimr = AT91C_BASE_PITC->PITC_PIMR;
  AT91C_BASE_PITC->PITC_PIMR = pimr | AT91C_PITC_PITIEN;

  /* Enable the pit */
  pimr = AT91C_BASE_PITC->PITC_PIMR;
  AT91C_BASE_PITC->PITC_PIMR = pimr | AT91C_PITC_PITEN;
}

Gruss

Steffen

Autor: Christophe Thil (chrisjt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Steffen: Genau das machen doch die ganzen AT91C/F-Kommandos.

@A.K.: Das wars. Ich dachte, dass durch das Setzen des AIC_IECR die 
Interrupts auch aktiviert würden. Dem ist wohl nicht der Fall, eine 
kleine Assemblerroutine macht das jetzt.

Merci!
Christophe

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Interrupt-Controller ist ein Periphieriebaustein, die beiden 
Interrupt-Flags sind hingegen Bestandteil des ARM7-Cores. Sind zwei 
völlig verschiedene Dinge.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.