I'm using a PIT timer on a Kinetis K10 to drive ADC sampling, using the TimerUnit_LDD PE component. My sampling rate is slightly off, I think because the LDVAL value is being calculated incorrectly by PE.
The datasheet (K10P81M100SF2RM Rev. 5, 8 May 2011) says on p. 985 the LDVAL register should be calculated this way:
LDVAL trigger = (period / clock period) - 1
Which in my case:
Period: 5ms (I want a 200Hz sampling rate)
Clock Period: .5us (bus running at 2MHz)
So:
LDVAL = (5000 / .5) - 1 = 9999
If I enter 5ms into the Counter Restart / Period field, the generated code for the component has this:
/* PIT_LDVAL0: TSV=0x2710 */
PIT_LDVAL0 = (uint32_t)0x2710UL; /* Set up load register */
The hex 0x2710 is decimal 10000, (off by one from what I was expecting), and this value gives me a slight error in my sampling rate. My workaround for now is to enter a period of 4999.5us.
I'm using CW 10.1 with what should be the latest PE 10.1 patches; I also tried with CW 10.2 and I see the same behavior.
The bottom of my generated files has this for versioning:
** This file was created by Processor Expert 5.2 [04.49]
** for the Freescale Kinetis series of microcontrollers.
The top of the generated component file has this for versioning:
Project : ProcessorExpert
Processor : MK10DN512ZVLK10
Component : TimerUnit_LDD
Version : Component 01.122, Driver 01.05, CPU db: 3.00.001
Compiler : CodeWarrior ARM C Compiler
Let me know if this is a bug, or working as intended... then I'll know if I need to keep an eye on undoing this workaround if it gets modified.
Thanks!