mi mi
/
Nucleo_F411RE_FastPWM_TEST
FastPWM test using NUCLEO_F411RE
main.cpp@1:bb2f2609cbb2, 2014-10-31 (annotated)
- Committer:
- mimi3
- Date:
- Fri Oct 31 22:22:23 2014 +0900
- Revision:
- 1:bb2f2609cbb2
- Parent:
- 0:a91f9652671f
- Child:
- 2:98bb5d720dfc
comit test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mimi3 | 0:a91f9652671f | 1 | #include "mbed.h" |
mimi3 | 0:a91f9652671f | 2 | #include "FastPWM.h" |
mimi3 | 0:a91f9652671f | 3 | |
mimi3 | 0:a91f9652671f | 4 | |
mimi3 | 0:a91f9652671f | 5 | /* Period Interrupt monitor */ |
mimi3 | 0:a91f9652671f | 6 | DigitalOut led(LED1); |
mimi3 | 0:a91f9652671f | 7 | |
mimi3 | 1:bb2f2609cbb2 | 8 | /* Using FastPWM library from: |
mimi3 | 0:a91f9652671f | 9 | * http://developer.mbed.org/users/Sissors/code/FastPWM/ |
mimi3 | 1:bb2f2609cbb2 | 10 | * Thank you this library. |
mimi3 | 0:a91f9652671f | 11 | */ |
mimi3 | 0:a91f9652671f | 12 | #define TPWM FastPWM |
mimi3 | 0:a91f9652671f | 13 | TPWM pwm1(PA_8,1); |
mimi3 | 0:a91f9652671f | 14 | TPWM pwm2(PA_9,1); |
mimi3 | 0:a91f9652671f | 15 | |
mimi3 | 0:a91f9652671f | 16 | /* PWM Timer constant value */ |
mimi3 | 0:a91f9652671f | 17 | #define F_CLK_ABP1 (100*1000000) // ABP1 TIM1 input clock is 100MHz |
mimi3 | 0:a91f9652671f | 18 | #define TIME_INPUT_CLK F_CLK_ABP1 |
mimi3 | 0:a91f9652671f | 19 | #define MAX_PERIOD ( TIME_INPUT_CLK / (44100) ) // fs=44.1kHz |
mimi3 | 0:a91f9652671f | 20 | #define MAX_DUTY ( 2048 ) // Audio resolution : 11bit |
mimi3 | 0:a91f9652671f | 21 | |
mimi3 | 0:a91f9652671f | 22 | /* Interrupt */ |
mimi3 | 0:a91f9652671f | 23 | #define TIM_PWM TIM1 |
mimi3 | 0:a91f9652671f | 24 | #define TIM_PWM_IRQ TIM1_UP_TIM10_IRQn |
mimi3 | 0:a91f9652671f | 25 | |
mimi3 | 0:a91f9652671f | 26 | #define DELAY_MS 1 |
mimi3 | 0:a91f9652671f | 27 | |
mimi3 | 0:a91f9652671f | 28 | |
mimi3 | 0:a91f9652671f | 29 | /* PWM Timer Interrupt routine */ |
mimi3 | 0:a91f9652671f | 30 | void IntrPwmPeriod( void ){ |
mimi3 | 0:a91f9652671f | 31 | HAL_TIM_IRQHandler( &TimHandle ); |
mimi3 | 0:a91f9652671f | 32 | } |
mimi3 | 0:a91f9652671f | 33 | |
mimi3 | 0:a91f9652671f | 34 | /* HAL call back for PWM Timer Intrrupt |
mimi3 | 0:a91f9652671f | 35 | * Test monitor |
mimi3 | 0:a91f9652671f | 36 | * */ |
mimi3 | 0:a91f9652671f | 37 | void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){ |
mimi3 | 0:a91f9652671f | 38 | led = 1; |
mimi3 | 0:a91f9652671f | 39 | /* 1.3usec */ |
mimi3 | 0:a91f9652671f | 40 | led = 0; |
mimi3 | 0:a91f9652671f | 41 | } |
mimi3 | 0:a91f9652671f | 42 | |
mimi3 | 0:a91f9652671f | 43 | static TIM_HandleTypeDef TimHandle; |
mimi3 | 0:a91f9652671f | 44 | |
mimi3 | 0:a91f9652671f | 45 | int main() { |
mimi3 | 0:a91f9652671f | 46 | |
mimi3 | 0:a91f9652671f | 47 | TimHandle.Instance = TIM_PWM; |
mimi3 | 0:a91f9652671f | 48 | |
mimi3 | 0:a91f9652671f | 49 | int i =1, delta = 1; |
mimi3 | 0:a91f9652671f | 50 | |
mimi3 | 0:a91f9652671f | 51 | NVIC_SetVector( TIM_PWM_IRQ, (uint32_t)&IntrPwmPeriod ); |
mimi3 | 0:a91f9652671f | 52 | |
mimi3 | 0:a91f9652671f | 53 | pwm1.period_ticks( MAX_PERIOD ); |
mimi3 | 0:a91f9652671f | 54 | pwm2.period_ticks( MAX_PERIOD ); |
mimi3 | 0:a91f9652671f | 55 | |
mimi3 | 0:a91f9652671f | 56 | NVIC_EnableIRQ( TIM_PWM_IRQ ); |
mimi3 | 0:a91f9652671f | 57 | __HAL_TIM_ENABLE_IT( &TimHandle, TIM_IT_UPDATE ); |
mimi3 | 0:a91f9652671f | 58 | |
mimi3 | 0:a91f9652671f | 59 | |
mimi3 | 0:a91f9652671f | 60 | while(1) { |
mimi3 | 0:a91f9652671f | 61 | pwm1.pulsewidth_ticks( i ); |
mimi3 | 0:a91f9652671f | 62 | pwm2.pulsewidth_ticks( i/2 ); |
mimi3 | 0:a91f9652671f | 63 | if( ( i >= MAX_DUTY ) || ( i <= 0 ) ){ |
mimi3 | 0:a91f9652671f | 64 | delta *= -1; |
mimi3 | 0:a91f9652671f | 65 | } |
mimi3 | 0:a91f9652671f | 66 | i += delta; |
mimi3 | 0:a91f9652671f | 67 | |
mimi3 | 0:a91f9652671f | 68 | wait_ms( DELAY_MS ); |
mimi3 | 0:a91f9652671f | 69 | } |
mimi3 | 0:a91f9652671f | 70 | } |