ARM7: Funktionsweise des Interrupt Moduls

OP #1131770
Lesenswert?

Hallo,

hat jemand vielleicht einen Link auf eine "gut verständliche" Erklärung 
in deutsch (ausnahmsweise..) wie die Interrupts des ARM7 zu benutzen 
sind? Egal wieviel Beispielcode ich auch lese und durchs Manual schaue, 
entweder bin ich zu blöde zu verstehen wie das funktioniert oder es ist 
einfach nur schlecht erklärt. Viele Beispielcodes sind vor lauter 
Benutzung von Zeigern und Zeigern auf Zeiger kaum mehr zu verstehen. De 
facto nutze ich derzeit Code aus Beispielen ohne ihn wirklich zu 
verstehen.

Den hier zB habe ich teilweise selbst geschrieben im unteren Teil um 
eine Zeitbasis zu haben, teilweise aus einem Beispiel von Rowley 
kopiert. Wa hat es mit diesen Slots auf sich und
1
// Ruft einen IRQ alle Millisekunden auf
2
void InitTimer0(unsigned int millisec)
3
{
4
    #define TIMER0_IRQ    4
5
    #define TIMER1_IRQ    5
6

7
     // Timer 0 ist ein IRQ interrupt
8
    VICIntSelect&= ~(1<<TIMER0_IRQ);
9
    // Benutze slot 0 für timer 0 interrupt, Bit 5 = 1 => Slot aktivieren
10
    VICVectCntl0=(1<<5) | TIMER0_IRQ;
11
    // Enable timer 0 interrupt
12
    VICIntEnable = (1<<TIMER0_IRQ);
13
    // Setze die Adresse der ISR für slot 0
14
    VICVectAddr0 = (unsigned int)timer0ISR;
15

16
    // Setze Timermatch 0 auf 1 Millisekunde
17
    T0MR0 = PLL_GetAPBClock()/1000;
18
    // Setze den Timer 0 prescale counter auf den Wert der Parameterliste
19
    T0PR = millisec;
20
    // Reset timer 0
21
    T0TCR = 0;
22
    // Match = IRQ auslösen und Timer resetten
23
    T0MCR |= T0MCR_Interrupt_on_MR0_MASK | T0MCR_Reset_on_MR0_MASK;
24
    // Start timer 0
25
    T0TCR = T0TCR_Counter_Enable_MASK;
26

27
     // Enable Interrupts
28
    __ARMLIB_enableIRQ();

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