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

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
已解决

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

跳至解决方案
909 次查看
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

标签 (1)
0 项奖励
回复
1 解答
678 次查看
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 项奖励
回复
2 回复数
679 次查看
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 项奖励
回复
678 次查看
GaugeGuy
Contributor I

Hi Mac,

 

Thanks for your explanation!

The TPM code is working as needed.

 

Thanks,
David

0 项奖励
回复