Freescale MAC7100 doze mode

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From English to

Threaded View
I'm not able to manage Freescale MAC7100 doze mode keeping alive the
RTI module.

To start RTI I use the following code:

  PIT.TLVAL[0].B.TSV = System_Clock/2*1000*bt;
  PIT.INTEN.B.RTIE = 1;                      // Pit interrupt enable
  PIT.CTRL.B.MDIS = 0;                       // Module Enable
  PIT.EN.B.PEN0 = 1;
  INTC.IMRL.B.IMR22 = 0;

To handle the interrupt I use the following code:

  PIT.EN.B.PEN0 = 0;
  PIT.EN.B.PEN0 = 1;
  PIT.FLG.B.RTIF = 1; // clear the flag

OK, the RTI interrupt handler (interrupt 22) is periodically called.

To enter the doze mode I use the following code:

  MCM.MWCR.R=0x80;
  CRG.CLKSEL.B.PLLSEL = 0; // 8 MHz
  CRG.SDMCTL.B.DOZE = 1;   // DOZE MODE

I also have:

CRG.PITCTRL.DOZE = 0
CRG.CLKSEL.RTIDOZE = 0

When I enter doze mode the PIT interrupt handler stops to be called.

Any help?

Thanks,
Marco O.


Re: Freescale MAC7100 doze mode
Sorry, the OP has probably long solved this problem, but I'd
like to add a comment anyway. This is not the DOZE mode problem, but:

Quoted text here. Click to load it

This doesn't work in the general case. Bitfield headers tempt the
user to think that it would, but in reality it's different - you
want to clear a single flag, but in order to write a single bit in
a register, the compiler generates code to read the register,
logically OR the contents and write the results back. This is the
right behaviour for a control register, of course.

However for a flag register this means that every bit currently
set, will be written with a "1" - and the flag bits happen to be
clear-on-write!. In other words, "PIT.FLG.B.RTIF = 1;" will clear
every single bit in PIT.FLG which is currently set.

If the RTI is your only timer your code will still work, but
if two timers are used this method will have nasty side effects.

A better method would be to write "PIT.FLG.R = 0x01;" which clears
just RTIF (which happens to be bit 0). This is faster too since
it just needs a single write, instead of a read-modify-write operation.


Cheers



Stefan







        
This message was sent using the comp.arch.embedded web interface o
www.EmbeddedRelated.com

Site Timeline