AnsweredAssumed Answered

Gcc and the RTI intterupt on a 9s12, weirdness

Question asked by keith vasilakes on May 17, 2010
Latest reply on May 18, 2010 by keith vasilakes

OK, so I am trying to get the Real time interrupt to work on the 9s12.

I am using a 9s12, and the gnu c compiler.

I am compiling as C++

 

I have a simple app, no debugger unfortuneately.

I have the serial port working so I can write data out.

 

I have a while loop in main that waits for some time to elapse, then will print a message out the serial port.

 

The RTI interrupt just increments a variable once every 1.024ms

Yes RTI clears the interrupt flag.

 

The timeout never happens...unless

I print to the serial port before the part where I check for timeout.

The serial port uses interrupts and works fine

 

So what the heck am I doing wrong?

This should work right?

 

( not all the code, just the impotant parts )

volatile UINT16 TimerTic;

void main(void)
{

  RTICTL      = 0x10;            // Timer counts at 1.024 ms / tic
  CRGINT_RTIE = 1;             // enable interrupt
  CRGFLG_RTIF = 1;             // clear interrupt flag (0 writes have no effect)
...

EnableInterrupts;

UINT16 starttime = TimerTic;

for(;;)
{
    //without this line TimerTic never seems to increment
    Putstr("Why do I need this?\r\n");

    if(TimerTic - starttime > 1000) //wait 1 second
    {
        PutStr("hello\r\n");

        starttime = TimerTic;
    }

}


// 1.024 ms clock interrupt - clear flag immediately to resume count
void Timer_Tick_ISR(void)  __attribute__((interrupt))
{
  CRGFLG_RTIF = 1; //CRGFLG = 0x80;  // clear RTI interrupt flag

  TimerTic++;     // 1.024 ms, Clock tic
}

Outcomes