paparazzi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[paparazzi-commits] [5019] Add support for 3rd and 4th PWM input


From: Allen Ibara
Subject: [paparazzi-commits] [5019] Add support for 3rd and 4th PWM input
Date: Tue, 06 Jul 2010 18:15:32 +0000

Revision: 5019
          http://svn.sv.gnu.org/viewvc/?view=rev&root=paparazzi&revision=5019
Author:   aibara
Date:     2010-07-06 18:15:31 +0000 (Tue, 06 Jul 2010)
Log Message:
-----------
Add support for 3rd and 4th PWM input

Modified Paths:
--------------
    paparazzi3/trunk/sw/airborne/arm7/pwm_input.c
    paparazzi3/trunk/sw/airborne/arm7/pwm_input.h
    paparazzi3/trunk/sw/airborne/arm7/sys_time_hw.c

Modified: paparazzi3/trunk/sw/airborne/arm7/pwm_input.c
===================================================================
--- paparazzi3/trunk/sw/airborne/arm7/pwm_input.c       2010-07-06 18:09:52 UTC 
(rev 5018)
+++ paparazzi3/trunk/sw/airborne/arm7/pwm_input.c       2010-07-06 18:15:31 UTC 
(rev 5019)
@@ -21,6 +21,20 @@
 #define PWM_INPUT2_PINSEL_VAL (0x3 << PWM_INPUT2_PINSEL_BIT)
 #define PWM_INPUT2_PINSEL_MASK (0x3 <<PWM_INPUT2_PINSEL_BIT)
 #endif
+#ifdef USE_PWM_INPUT3
+/* INPUT CAPTURE CAP0.1 on P0.27 */
+#define PWM_INPUT3_PINSEL     PINSEL1
+#define PWM_INPUT3_PINSEL_BIT 22
+#define PWM_INPUT3_PINSEL_VAL (0x2 << PWM_INPUT3_PINSEL_BIT)
+#define PWM_INPUT3_PINSEL_MASK (0x3 <<PWM_INPUT3_PINSEL_BIT)
+#endif
+#ifdef USE_PWM_INPUT4
+/* INPUT CAPTURE CAP0.2 on P0.28 */
+#define PWM_INPUT4_PINSEL     PINSEL1
+#define PWM_INPUT4_PINSEL_BIT 24
+#define PWM_INPUT4_PINSEL_VAL (0x2 << PWM_INPUT4_PINSEL_BIT)
+#define PWM_INPUT4_PINSEL_MASK (0x3 <<PWM_INPUT4_PINSEL_BIT)
+#endif
 
 void pwm_input_init ( void )
 {
@@ -35,4 +49,14 @@
   /* enable capture 0.0 on falling edge + trigger interrupt */
   T0CCR |= TCCR_CR0_R | TCCR_CR0_I;
 #endif
+#ifdef USE_PWM_INPUT3
+  PWM_INPUT3_PINSEL = (PWM_INPUT3_PINSEL & ~PWM_INPUT3_PINSEL_MASK) | 
PWM_INPUT3_PINSEL_VAL;
+  /* enable capture 0.1 on falling edge + trigger interrupt */
+  T0CCR |= TCCR_CR1_R | TCCR_CR1_I;
+#endif
+#ifdef USE_PWM_INPUT4
+  PWM_INPUT4_PINSEL = (PWM_INPUT4_PINSEL & ~PWM_INPUT4_PINSEL_MASK) | 
PWM_INPUT4_PINSEL_VAL;
+  /* enable capture 0.2 on falling edge + trigger interrupt */
+  T0CCR |= TCCR_CR2_R | TCCR_CR2_I;
+#endif
 }

Modified: paparazzi3/trunk/sw/airborne/arm7/pwm_input.h
===================================================================
--- paparazzi3/trunk/sw/airborne/arm7/pwm_input.h       2010-07-06 18:09:52 UTC 
(rev 5018)
+++ paparazzi3/trunk/sw/airborne/arm7/pwm_input.h       2010-07-06 18:15:31 UTC 
(rev 5019)
@@ -5,7 +5,7 @@
 #include "LPC21xx.h"
 #include "interrupt_hw.h"
 
-#define PWM_INPUT_NB 2
+#define PWM_INPUT_NB 4
 
 void pwm_input_init ( void );
 
@@ -49,9 +49,49 @@
   }
 }
 
+static inline void pwm_input_isr3()
+{
+  static uint32_t t_rise;
+  static uint32_t t_fall;
+
+  if (T0CCR & TCCR_CR1_F) {
+    t_fall = T0CR1;
+    T0CCR |= TCCR_CR1_R;
+    T0CCR &= ~TCCR_CR1_F;
+    pwm_input_duration[2] = t_fall - t_rise;
+    pwm_input_valid[2] = TRUE;
+  } else if (T0CCR & TCCR_CR1_R) {
+    t_rise = T0CR1;
+    T0CCR |= TCCR_CR1_F;
+    T0CCR &= ~TCCR_CR1_R;
+  }
+}
+
+static inline void pwm_input_isr4()
+{
+  static uint32_t t_rise;
+  static uint32_t t_fall;
+
+  if (T0CCR & TCCR_CR2_F) {
+    t_fall = T0CR2;
+    T0CCR |= TCCR_CR2_R;
+    T0CCR &= ~TCCR_CR2_F;
+    pwm_input_duration[3] = t_fall - t_rise;
+    pwm_input_valid[3] = TRUE;
+  } else if (T0CCR & TCCR_CR2_R) {
+    t_rise = T0CR2;
+    T0CCR |= TCCR_CR2_F;
+    T0CCR &= ~TCCR_CR2_R;
+  }
+}
+
 #define PWM_INPUT_IT1 TIR_CR3I
 #define PWM_INPUT_IT2 TIR_CR0I
+#define PWM_INPUT_IT3 TIR_CR1I
+#define PWM_INPUT_IT4 TIR_CR2I
 #define PWM_INPUT_ISR_1()      pwm_input_isr1()
 #define PWM_INPUT_ISR_2()      pwm_input_isr2()
+#define PWM_INPUT_ISR_3()      pwm_input_isr3()
+#define PWM_INPUT_ISR_4()      pwm_input_isr4()
 
 #endif /* PWM_INPUT_H */

Modified: paparazzi3/trunk/sw/airborne/arm7/sys_time_hw.c
===================================================================
--- paparazzi3/trunk/sw/airborne/arm7/sys_time_hw.c     2010-07-06 18:09:52 UTC 
(rev 5018)
+++ paparazzi3/trunk/sw/airborne/arm7/sys_time_hw.c     2010-07-06 18:15:31 UTC 
(rev 5019)
@@ -42,6 +42,8 @@
 #else
 #define PWM_INPUT_IT1 0x00
 #define PWM_INPUT_IT2 0x00
+#define PWM_INPUT_IT3 0x00
+#define PWM_INPUT_IT4 0x00
 #endif
 
 #ifdef USE_AMI601
@@ -61,6 +63,8 @@
                         MB_TACHO_IT          |\
                         PWM_INPUT_IT1        |\
                         PWM_INPUT_IT2        |\
+                        PWM_INPUT_IT3        |\
+                        PWM_INPUT_IT4        |\
                         AMI601_IT)
 
 void TIMER0_ISR ( void ) {
@@ -126,6 +130,18 @@
       T0IR = PWM_INPUT_IT2; 
     }
 #endif
+#ifdef USE_PWM_INPUT3
+    if (T0IR&PWM_INPUT_IT3) {
+      PWM_INPUT_ISR_3();
+      T0IR = PWM_INPUT_IT3; 
+    }
+#endif
+#ifdef USE_PWM_INPUT4
+    if (T0IR&PWM_INPUT_IT4) {
+      PWM_INPUT_ISR_4();
+      T0IR = PWM_INPUT_IT4; 
+    }
+#endif
 #ifdef USE_AMI601
     if (T0IR&AMI601_IT) {
       AMI601_ISR();




reply via email to

[Prev in Thread] Current Thread [Next in Thread]