[Top][All Lists]
[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();
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [paparazzi-commits] [5019] Add support for 3rd and 4th PWM input,
Allen Ibara <=