Pinscape fork (KL25Z)

Dependents:   Pinscape_Controller_V2_arnoz Pinscape_Controller_V2

Fork of FastPWM by Erik -

Device/FastPWM_LPC_SCT.cpp

Committer:
Sissors
Date:
2016-03-13
Revision:
30:3e4d3b900850
Child:
31:87e38b846651

File content as of revision 30:3e4d3b900850:

//For targets which use the SCT
#if defined(TARGET_LPC81X) || defined(TARGET_LPC82X)

#ifdef TARGET_LPC82X
#define CTRL_U CTRL
#endif

#include "FastPWM.h"

void FastPWM::initFastPWM( void ) {
    //Mbed uses the timer as a single unified 32-bit timer, who are we to argue with this, and it is easier
    bits = 32;
    
    //With 32-bit we fix prescaler to 1
    _pwm.pwm->CTRL_U |= (1 << 2) | (1 << 3);
    _pwm.pwm->CTRL_U &= ~(0x7F << 5);
    _pwm.pwm->CTRL_U &= ~(1 << 2);

}

void FastPWM::pulsewidth_ticks( uint32_t ticks ) {
    #ifdef TARGET_LPC81X
    _pwm.pwm->MATCHREL[_pwm.pwm_ch + 1].U = ticks;
    #else
    _pwm.pwm->MATCHREL[_pwm.pwm_ch + 1] = ticks;
    #endif
}

void FastPWM::period_ticks( uint32_t ticks ) {
    #ifdef TARGET_LPC81X
    _pwm.pwm->MATCHREL[0].U = ticks;
    #else
    _pwm.pwm->MATCHREL[0] = ticks;
    #endif
}

uint32_t FastPWM::getPeriod( void ) {
    #ifdef TARGET_LPC81X
    return _pwm.pwm->MATCHREL[0].U;
    #else
    return _pwm.pwm->MATCHREL[0];
    #endif
}

//Maybe implemented later, but needing to change the prescaler for a 32-bit
//timer used in PWM mode is kinda unlikely.
//If you really need to do it, rejoice, you can make it run so slow a period is over 40,000 year
uint32_t FastPWM::setPrescaler(uint32_t reqScale) {
    //Disable dynamic prescaling
    dynamicPrescaler = false;
    
    return 1;
}

#endif