Anasse Abdoul / Mbed 2 deprecated Test_MPU6050

Dependencies:   mbed

Committer:
anasse
Date:
Thu Mar 31 07:43:50 2022 +0000
Revision:
0:a59a3d743804
vers0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
anasse 0:a59a3d743804 1 #if defined(TARGET_KLXX) || defined(TARGET_K20D50M)
anasse 0:a59a3d743804 2
anasse 0:a59a3d743804 3 #include "FastPWM.h"
anasse 0:a59a3d743804 4
anasse 0:a59a3d743804 5 void FastPWM::initFastPWM( void ) {
anasse 0:a59a3d743804 6 bits = 16;
anasse 0:a59a3d743804 7 }
anasse 0:a59a3d743804 8
anasse 0:a59a3d743804 9 void FastPWM::pulsewidth_ticks( uint32_t ticks ) {
anasse 0:a59a3d743804 10 *(_pwm.CnV) = ticks;
anasse 0:a59a3d743804 11 }
anasse 0:a59a3d743804 12
anasse 0:a59a3d743804 13 void FastPWM::period_ticks( uint32_t ticks ) {
anasse 0:a59a3d743804 14 *(_pwm.MOD) = ticks - 1;
anasse 0:a59a3d743804 15 }
anasse 0:a59a3d743804 16
anasse 0:a59a3d743804 17 uint32_t FastPWM::getPeriod( void ) {
anasse 0:a59a3d743804 18 return *(_pwm.MOD) + 1;
anasse 0:a59a3d743804 19 }
anasse 0:a59a3d743804 20
anasse 0:a59a3d743804 21 uint32_t FastPWM::setPrescaler(uint32_t reqScale) {
anasse 0:a59a3d743804 22
anasse 0:a59a3d743804 23 //Yes this is ugly, yes I should feel bad about it
anasse 0:a59a3d743804 24 volatile uint32_t *TPM_SC = _pwm.MOD - 2;
anasse 0:a59a3d743804 25
anasse 0:a59a3d743804 26 const char prescalers[] = {1, 2, 4, 8, 16, 32, 64, 128};
anasse 0:a59a3d743804 27
anasse 0:a59a3d743804 28 //If prescaler is 0, return current one
anasse 0:a59a3d743804 29 if (reqScale == 0)
anasse 0:a59a3d743804 30 return (prescalers[(*TPM_SC) & 0x07]);
anasse 0:a59a3d743804 31
anasse 0:a59a3d743804 32 uint32_t retval = 0;
anasse 0:a59a3d743804 33 char bin;
anasse 0:a59a3d743804 34
anasse 0:a59a3d743804 35 for (bin = 0; bin<8; bin++) {
anasse 0:a59a3d743804 36 retval = prescalers[bin];
anasse 0:a59a3d743804 37 if (retval >= reqScale)
anasse 0:a59a3d743804 38 break;
anasse 0:a59a3d743804 39 }
anasse 0:a59a3d743804 40 if (bin == 8)
anasse 0:a59a3d743804 41 bin = 7;
anasse 0:a59a3d743804 42
anasse 0:a59a3d743804 43 //Clear lower 5 bits, write new value:
anasse 0:a59a3d743804 44 char clockbits = *TPM_SC & (3<<3);
anasse 0:a59a3d743804 45
anasse 0:a59a3d743804 46 //For some reason clearing them takes some effort
anasse 0:a59a3d743804 47 while ((*TPM_SC & 0x1F) != 0)
anasse 0:a59a3d743804 48 *TPM_SC &= ~0x1F;
anasse 0:a59a3d743804 49
anasse 0:a59a3d743804 50
anasse 0:a59a3d743804 51 *TPM_SC = bin + clockbits;
anasse 0:a59a3d743804 52
anasse 0:a59a3d743804 53 return retval;
anasse 0:a59a3d743804 54 }
anasse 0:a59a3d743804 55 #endif