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.