Forum: Mikrocontroller und Digitale Elektronik TM4C1231H6 kein Interrupt


von Andreas R. (andi_ruetten)


Lesenswert?

Hallo,
ich habe ein eigenes Board gebaut mit einem TM4C1231 von TI.
Das Problem ist, das kein einziger Int ausgeführt wird.
Z,Bsp der Timer Int :



://********************************************************************* 
********
//
// The interrupt handler for the Timer0B interrupt.
//
//********************************************************************** 
*******
void
Timer0BIntHandler(void)
{
    //
    // Clear the timer interrupt flag.
    //
    TimerIntClear(TIMER0_BASE, TIMER_TIMB_TIMEOUT);

    g_ui32Counter++;


}

//********************************************************************** 
*******
//
// Configure Timer0B as a 16-bit periodic counter with an interrupt
// every 1ms.
//
//********************************************************************** 
*******
int
main(void)
{

    uint32_t ui32PrevCount = 0;

    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | 
SYSCTL_XTAL_16MHZ);


    SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
    TimerConfigure(TIMER0_BASE, TIMER_CFG_SPLIT_PAIR | 
TIMER_CFG_B_PERIODIC);
    TimerLoadSet(TIMER0_BASE, TIMER_B, SysCtlClockGet() / 1000);
    IntMasterEnable();
    TimerIntEnable(TIMER0_BASE, TIMER_TIMB_TIMEOUT);
    IntEnable(INT_TIMER0B);
    TimerEnable(TIMER0_BASE, TIMER_B);

    //
    // Loop forever while the Timer0B runs.
    //
    while(1)
    {

    }
}




g_ui32Counter wir niemals erhöht, und auch der Debugger springt niemals 
in die interrupt service routine. ( Gibt aber auch kein Faulthandler 
sprung )

Der Timer an sich zählt ordentlich hoch.

Kann das irgendein Hardwarefehler sein ?
Was kann eventuell noch falsch sein?



Andreas

von Frank K. (fchk)


Lesenswert?

Ein

IntRegister(INT_TIMER0B, Timer0BIntHandler);

wäre noch ganz gut. Dann IntEnable(), und dann IntMasterEnable() in 
genau dieser Reihenfolge.

Außerdem würde ich nach jedem SysCtlPeripheralEnable() ein 
while(!SysCtlPeripheralReady(...)); setzen, sicherheitshhalber.

fchk

von Andreas R. (andi_ruetten)


Lesenswert?

ist eigentlich in der Startup drin ..

aber auch ein
IntRegister(INT_TIMER0B, Timer0BIntHandler);

und die Reihenfolge ändert nichts dran.

Es geht auch kein Interrupt, noch nicht einmal der Systick ...

Es ist als ob IntMasterEnable()

 __asm("    mrs     r0, PRIMASK\n"
          "    cpsie   i\n"
          "    bx      lr\n");


; keinerlei Wirkung hat.



Andreas

von Melbar (Gast)


Lesenswert?

Hallo,

mit welcher Umgebung wird das Projekt erstellt?
Hänge doch bitte mal das komplette Programm / Projekt an.

Ich arbeite schon lange mit diesen Prozessoren (unter Rowley Crossworks) 
und kann nur sagen, daß die Libraries von TI (TvaWare) gut 
funktionieren.

von Andreas R. (andi_ruetten)


Angehängte Dateien:

Lesenswert?

Hallo ,
Mit CCS10.3,
das Programm ist im Grunde nur ein Example aus Tivaware  was ich als 
Projekt
für den TM4C1231 und Segger J-Link angepasst habe.


Bis auf die Ints funktionert es ja, also z.Bsp GPIO usw ...

Ich habe schon fast die Hardware in Verdacht, obwohl das eigentlich sehr 
unwarscheinlich ist, da ich hier 3 ( eigene ) Boards habe, die alle das 
selbe Verhalten zeigen.
Ein Evalboard für die Variante scheint es leider nicht zu geben.

Andreas

von Andreas R. (andi_ruetten)


Lesenswert?

Es war Hardware ...
ich hatte als Basis für mein eigenes Board den Schaltplan vom
Tiva TM4C123G LaunchPad genommen.

Dummerweise ist in dem Schaltplan Port PF0 nur als PF0 bezeichnet,
und nicht was er eigentlich ist, nämlich  "NMI" !!
Und meine Hardware an dem Port hat den Pin dann auch nach Masse gezogen.

Naja, jetzt läuft es ....


Andreas

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
Noch kein Account? Hier anmelden.