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
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.