FastPWM test using NUCLEO_F411RE

Dependencies:   FastPWM mbed

main.cpp

Committer:
mimi3
Date:
2014-10-31
Revision:
1:bb2f2609cbb2
Parent:
0:a91f9652671f
Child:
2:98bb5d720dfc

File content as of revision 1:bb2f2609cbb2:

#include "mbed.h"
#include "FastPWM.h"


/* Period Interrupt monitor */
DigitalOut led(LED1);       

/* Using FastPWM library from:
 * http://developer.mbed.org/users/Sissors/code/FastPWM/
 * Thank you this library.
 */
#define TPWM FastPWM
TPWM pwm1(PA_8,1);
TPWM pwm2(PA_9,1);

/* PWM Timer constant value */
#define F_CLK_ABP1      (100*1000000)                       // ABP1 TIM1 input clock is 100MHz
#define TIME_INPUT_CLK  F_CLK_ABP1
#define MAX_PERIOD      ( TIME_INPUT_CLK / (44100) )        // fs=44.1kHz 
#define MAX_DUTY        ( 2048 )                            // Audio resolution : 11bit

/* Interrupt */ 
#define TIM_PWM      TIM1
#define TIM_PWM_IRQ  TIM1_UP_TIM10_IRQn

#define DELAY_MS        1


/* PWM Timer Interrupt routine */
void IntrPwmPeriod( void ){
    HAL_TIM_IRQHandler( &TimHandle );
}

/* HAL call back for PWM Timer Intrrupt 
 * Test monitor 
 * */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
    led = 1;
    /* 1.3usec */
    led = 0;
}

static TIM_HandleTypeDef TimHandle;

int main() {

    TimHandle.Instance = TIM_PWM;

    int i =1, delta = 1;

    NVIC_SetVector( TIM_PWM_IRQ, (uint32_t)&IntrPwmPeriod );

    pwm1.period_ticks( MAX_PERIOD );
    pwm2.period_ticks( MAX_PERIOD );

    NVIC_EnableIRQ( TIM_PWM_IRQ );
    __HAL_TIM_ENABLE_IT( &TimHandle, TIM_IT_UPDATE );


    while(1) {
        pwm1.pulsewidth_ticks( i );
        pwm2.pulsewidth_ticks( i/2 );
        if( ( i >= MAX_DUTY ) || ( i <= 0 ) ){
            delta *= -1;
        }
        i += delta; 

        wait_ms( DELAY_MS );
    }
}