Avion Radio IUT / Mbed 2 deprecated MecatroPWM

Dependencies:   mbed

Committer:
qmaker
Date:
Thu Apr 15 06:44:26 2021 +0000
Revision:
1:b44f69eb07c4
Version asservissement avec codeurs et BT

Who changed what in which revision?

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