Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: Quadrature_Test PID Flow measurement
Fork of FastPWM by
Diff: Device/FastPWM_KLXX.cpp
- Revision:
- 5:2812f0a115f7
- Parent:
- 4:a7b9f778c4b4
- Child:
- 6:0f57969697b6
diff -r a7b9f778c4b4 -r 2812f0a115f7 Device/FastPWM_KLXX.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Device/FastPWM_KLXX.cpp Fri Feb 28 18:18:52 2014 +0000
@@ -0,0 +1,56 @@
+#ifdef TARGET_KLXX
+
+#include "FastPWM.h"
+
+volatile uint32_t *TPM_SC;
+
+void FastPWM::initFastPWM( void ) {
+ bits = 16;
+
+ //Yes this is ugly, yes I should feel bad about it
+ TPM_SC = _pwm.MOD - 2;
+}
+
+void FastPWM::pulsewidth_ticks( uint32_t ticks ) {
+ *(_pwm.CnV) = ticks;
+ *_pwm.CNT = 0; //Not yet sure why this is needed!
+}
+
+void FastPWM::period_ticks( uint32_t ticks ) {
+ *(_pwm.MOD) = ticks;
+ *_pwm.CNT = 0;
+}
+
+uint32_t FastPWM::getPeriod( void ) {
+ return *(_pwm.MOD);
+}
+
+uint32_t FastPWM::setPrescaler(uint32_t reqScale) {
+ const char prescalers[] = {1, 2, 4, 8, 16, 32, 64, 128};
+
+ //If prescaler is 0, return current one
+ if (reqScale == 0)
+ return (prescalers[(*TPM_SC) & 0x07]);
+
+ uint32_t retval = 0;
+ char bin;
+
+ for (bin = 0; bin<8; bin++) {
+ retval = prescalers[bin];
+ if (retval >= reqScale)
+ break;
+ }
+
+ //Clear lower 5 bits, write new value:
+ char clockbits = *TPM_SC & (3<<3);
+
+ //For some reason clearing them takes some effort
+ while ((*TPM_SC & 0x1F) != 0)
+ *TPM_SC &= ~0x1F;
+
+
+ *TPM_SC |= bin + clockbits;
+
+ return retval;
+}
+#endif
\ No newline at end of file
