FastPWM test using NUCLEO_F411RE

Dependencies:   FastPWM mbed

Revision:
0:a91f9652671f
Child:
1:bb2f2609cbb2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Oct 31 13:12:53 2014 +0000
@@ -0,0 +1,69 @@
+#include "mbed.h"
+#include "FastPWM.h"
+
+
+/* Period Interrupt monitor */
+DigitalOut led(LED1);       
+
+/* Use FastPWM library from 
+ * http://developer.mbed.org/users/Sissors/code/FastPWM/
+ */
+#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 );
+    }
+}