ARM-Interrupts/PIT laufen nicht

OP #568311
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
Angehängte Dateien:
Gast #568319
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.
Persönliche Seite #568320
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren