Handling Timer Overflow and a Method for loading the S08QD4 TPM2 Value Register using OC Mode

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Handling Timer Overflow and a Method for loading the S08QD4 TPM2 Value Register using OC Mode

Jump to solution
662 Views
GaugeGuy
Contributor I

Hello all,

 

I am working on a new project involving PDP and have questions in reference to the thread dealing with PDP. (Pulse Distance Protocol)

 

https://community.freescale.com/message/103280#103280

 

1. Using the TPM2 in OC Mode, do I need to deal with Timer Overflow? (I do not see any code in the thread to handle overflow)

 

2. In the TPM2 CH 0 ISR, the following code is used the load the value register:

          TPM2C0V += SPULSE;   // Start pulse (9000)

 

Is this code effectively the same as:

          TPM2C0V = TPM2CNT + SPULSE;   // Start pulse (9000)

 

Thanks,

David

Labels (1)
0 Kudos
1 Solution
431 Views
bigmac
Specialist III

Hello David,

 

You do not need to be concerned about timer overflow provided the following conditions are met -

  1. The TPM module is free-running (TPM2MOD is 0 or 0xFFFF)
  2. The maximum timed period does not exceed the overflow period, i.e. no more than one overfow occurs during the timed period.

TPM2C0V += SPULSE;   // Start pulse (9000)

 

This is equivalent to -

TPM2C0V = TPM2COV + SPULSE;

 

The next timing interval must always be referenced from the time of the previous output compare event, when the output pin actually changed state.  Since there will always be some latency in the execution of the ISR, referencing the next compare event from the current counter value will cause timing errors.

 

Regards,

Mac

 

View solution in original post

0 Kudos
2 Replies
432 Views
bigmac
Specialist III

Hello David,

 

You do not need to be concerned about timer overflow provided the following conditions are met -

  1. The TPM module is free-running (TPM2MOD is 0 or 0xFFFF)
  2. The maximum timed period does not exceed the overflow period, i.e. no more than one overfow occurs during the timed period.

TPM2C0V += SPULSE;   // Start pulse (9000)

 

This is equivalent to -

TPM2C0V = TPM2COV + SPULSE;

 

The next timing interval must always be referenced from the time of the previous output compare event, when the output pin actually changed state.  Since there will always be some latency in the execution of the ISR, referencing the next compare event from the current counter value will cause timing errors.

 

Regards,

Mac

 

0 Kudos
431 Views
GaugeGuy
Contributor I

Hi Mac,

 

Thanks for your explanation!

The TPM code is working as needed.

 

Thanks,
David

0 Kudos