paparazzi-commits
[Top][All Lists]
Advanced

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

[paparazzi-commits] [4609] Change analog driver to use extra ADCs


From: Gautier Hattenberger
Subject: [paparazzi-commits] [4609] Change analog driver to use extra ADCs
Date: Tue, 02 Mar 2010 17:52:50 +0000

Revision: 4609
          http://svn.sv.gnu.org/viewvc/?view=rev&root=paparazzi&revision=4609
Author:   gautier
Date:     2010-03-02 17:52:49 +0000 (Tue, 02 Mar 2010)
Log Message:
-----------
Change analog driver to use extra ADCs

Modified Paths:
--------------
    paparazzi3/trunk/sw/airborne/booz/arch/lpc21/booz2_analog_hw.c
    paparazzi3/trunk/sw/airborne/booz/booz2_analog.c
    paparazzi3/trunk/sw/airborne/booz/booz2_analog.h
    paparazzi3/trunk/sw/airborne/booz/booz2_main.c
    paparazzi3/trunk/sw/airborne/booz/booz2_telemetry.h

Modified: paparazzi3/trunk/sw/airborne/booz/arch/lpc21/booz2_analog_hw.c
===================================================================
--- paparazzi3/trunk/sw/airborne/booz/arch/lpc21/booz2_analog_hw.c      
2010-03-02 10:50:16 UTC (rev 4608)
+++ paparazzi3/trunk/sw/airborne/booz/arch/lpc21/booz2_analog_hw.c      
2010-03-02 17:52:49 UTC (rev 4609)
@@ -23,12 +23,19 @@
 
 #include "booz2_analog.h"
 
+#include "booz2_analog_baro.h"
+#include "booz2_battery.h"
+
+#ifndef USE_EXTRA_ADC
+/* Default mode
+ * Bust OFF
+ * Only one ADC can be read on each bank
+ * Baro and Bat are read on interrupt
+ */
+
 #include "armVIC.h"
 #include "sys_time.h"
 
-#include "booz2_analog_baro.h"
-#include "booz2_battery.h"
-
 void ADC0_ISR ( void ) __attribute__((naked));
 void ADC1_ISR ( void ) __attribute__((naked));
 
@@ -112,3 +119,111 @@
   ISR_EXIT();                               // recover registers and return
 }
 
+#else // USE_EXTRA_ADC
+/* Extra ADCs are read
+ * Bust ON
+ * Baro and Bat values are updated by hand
+ * Four ADCs can be configured
+ * ADC_1 is available on the cam connector
+ */
+
+#include "LPC21xx.h"
+#include "sys_time.h"
+
+uint16_t booz2_adc_1; 
+uint16_t booz2_adc_2; 
+uint16_t booz2_adc_3; 
+uint16_t booz2_adc_4; 
+
+void booz2_analog_init_hw( void ) {
+
+  /* AD0 */
+  /* PCLK/4 ( 3.75MHz) - BURST - ON */
+  AD0CR = 0x03 << 8 | 1 << 16 | 1 << 21;
+  /* disable global interrupt */
+  ClearBit(AD0INTEN,8);
+
+  /* AD1 */
+  /* PCLK/4 ( 3.75MHz) - BURST - ON */
+  AD1CR = 0x03 << 8 | 1 << 16 | 1 << 21;
+  /* disable global interrupt */
+  ClearBit(AD1INTEN,8);
+
+  /* select P0.29 as AD0.2 for bat meas*/
+  PINSEL1 |=  0x01 << 26;
+  /* sample AD0.2 */
+  AD0CR |= 1 << 2;
+
+
+  /* select P0.10 as AD1.2 for baro*/
+  ANALOG_BARO_PINSEL |=  ANALOG_BARO_PINSEL_VAL << ANALOG_BARO_PINSEL_BIT;
+  /* sample AD1.2 */
+  AD1CR |= 1 << 2;
+  /* turn on DAC pins */
+  PINSEL1 |= 2 << 18;
+
+#ifdef USE_ADC_1
+  /* select P0.13 as AD1.4 adc 1 */
+  PINSEL0 |= 0x03 << 26;
+  AD1CR |= 1 << 4;
+#endif
+#ifdef USE_ADC_2
+  /* select P0.4 as AD0.6 adc 2 */
+  PINSEL0 |= 0x03 << 8;
+  AD0CR |= 1 << 6;
+#endif
+#ifdef USE_ADC_3
+  /* select P0.5 as AD0.7 adc 3 */
+  PINSEL0 |= 0x03 << 10;
+  AD0CR |= 1 << 7;
+#endif
+#ifdef USE_ADC_4
+  /* select P0.6 as AD1.0 adc 4 */
+  PINSEL0 |= 0x03 << 12;
+  AD1CR |= 1 << 0;
+#endif
+
+  booz2_adc_1 = 0; 
+  booz2_adc_2 = 0; 
+  booz2_adc_3 = 0; 
+  booz2_adc_4 = 0; 
+}
+
+void booz2_analog_baro_read(void) {
+  uint32_t tmp = AD1DR2;
+  uint16_t tmp2 = (uint16_t)(tmp >> 6) & 0x03FF;
+  Booz2BaroISRHandler(tmp2);
+}
+
+void booz2_analog_bat_read(void) {
+  uint32_t tmp = AD0DR2;
+  uint16_t tmp2 = (uint16_t)(tmp >> 6) & 0x03FF;
+  Booz2BatteryISRHandler(tmp2);
+}
+
+void booz2_analog_extra_adc_read(void) {
+  uint32_t tmp,tmp2;
+#ifdef USE_ADC_1
+  tmp = AD1DR4;
+  tmp2 = (uint16_t)(tmp >> 6) & 0x03FF;
+  booz2_adc_1 = tmp2;
+#endif
+#ifdef USE_ADC_2
+  tmp = AD0DR6;
+  tmp2 = (uint16_t)(tmp >> 6) & 0x03FF;
+  booz2_adc_2 = tmp2;
+#endif
+#ifdef USE_ADC_3
+  tmp = AD0DR7;
+  tmp2 = (uint16_t)(tmp >> 6) & 0x03FF;
+  booz2_adc_3 = tmp2;
+#endif
+#ifdef USE_ADC_4
+  tmp = AD1DR0;
+  tmp2 = (uint16_t)(tmp >> 6) & 0x03FF;
+  booz2_adc_4 = tmp2;
+#endif
+}
+
+#endif
+

Modified: paparazzi3/trunk/sw/airborne/booz/booz2_analog.c
===================================================================
--- paparazzi3/trunk/sw/airborne/booz/booz2_analog.c    2010-03-02 10:50:16 UTC 
(rev 4608)
+++ paparazzi3/trunk/sw/airborne/booz/booz2_analog.c    2010-03-02 17:52:49 UTC 
(rev 4609)
@@ -23,6 +23,8 @@
 
 #include "booz2_analog.h"
 
+#include "std.h"
+
 // battery on AD0.3 on P0.30
 // baro    on AD0.1 on P0.28
 
@@ -36,3 +38,13 @@
 
 }
 
+#ifdef USE_EXTRA_ADC
+// Read manually baro (100Hz) and bat (10Hz)
+void booz2_analog_periodic( void ) {
+  // baro
+  RunOnceEvery(5,booz2_analog_baro_read());
+  // bat
+  RunOnceEvery(50,booz2_analog_bat_read());
+}
+#endif
+

Modified: paparazzi3/trunk/sw/airborne/booz/booz2_analog.h
===================================================================
--- paparazzi3/trunk/sw/airborne/booz/booz2_analog.h    2010-03-02 10:50:16 UTC 
(rev 4608)
+++ paparazzi3/trunk/sw/airborne/booz/booz2_analog.h    2010-03-02 17:52:49 UTC 
(rev 4609)
@@ -26,6 +26,22 @@
 
 extern void booz2_analog_init( void );
 
+#ifdef USE_EXTRA_ADC
+#include "std.h"
+
+extern uint16_t booz2_adc_1; 
+extern uint16_t booz2_adc_2; 
+extern uint16_t booz2_adc_3; 
+extern uint16_t booz2_adc_4; 
+
+extern void booz2_analog_periodic( void );
+
+extern void booz2_analog_baro_read(void);
+extern void booz2_analog_bat_read(void);
+extern void booz2_analog_extra_adc_read(void);
+#endif
+
+
 #include "booz2_analog_hw.h"
 
 #endif /* BOOZ2_ANALOG_H */

Modified: paparazzi3/trunk/sw/airborne/booz/booz2_main.c
===================================================================
--- paparazzi3/trunk/sw/airborne/booz/booz2_main.c      2010-03-02 10:50:16 UTC 
(rev 4608)
+++ paparazzi3/trunk/sw/airborne/booz/booz2_main.c      2010-03-02 17:52:49 UTC 
(rev 4609)
@@ -57,10 +57,6 @@
 #include "booz2_pwm_hw.h"
 #endif
 
-#ifdef BOOZ2_SONAR
-#include "booz2_sonar.h"
-#endif
-
 #include "booz2_main.h"
 
 #ifdef SITL
@@ -127,16 +123,12 @@
   booz2_gps_init();
 #endif
 
-#ifdef BOOZ2_SONAR
-  booz2_sonar_init();
-#endif
-
-  int_enable();
-
 #ifdef USE_MODULES
   modules_init();
 #endif
 
+  int_enable();
+
 #if defined BOOZ_START_DELAY && ! defined SITL
   delay_done = FALSE;
   init_done_time = T0TC;
@@ -192,7 +184,7 @@
   booz_gps_periodic();
 #endif
 
-#ifdef BOOZ2_SONAR
+#ifdef USE_EXTRA_ADC
   booz2_analog_periodic();
 #endif
 
@@ -218,10 +210,6 @@
 
   Booz2AnalogBaroEvent(on_baro_event);
 
-#ifdef BOOZ2_SONAR
-  Booz2SonarEvent(booz_ins_update_sonar);
-#endif
-
 #ifdef USE_GPS
   Booz2GpsEvent(on_gps_event);
 #endif

Modified: paparazzi3/trunk/sw/airborne/booz/booz2_telemetry.h
===================================================================
--- paparazzi3/trunk/sw/airborne/booz/booz2_telemetry.h 2010-03-02 10:50:16 UTC 
(rev 4608)
+++ paparazzi3/trunk/sw/airborne/booz/booz2_telemetry.h 2010-03-02 17:52:49 UTC 
(rev 4609)
@@ -729,9 +729,9 @@
                                   );                                          \
   }
 
+//TODO replace by BOOZ_EXTRA_ADC
 #ifdef BOOZ2_SONAR
-#include "booz2_sonar.h"
-#define PERIODIC_SEND_BOOZ2_SONAR(_chan) 
DOWNLINK_SEND_BOOZ2_SONAR(_chan,&booz2_sonar_1,&booz2_sonar_2,&booz2_sonar_3,&booz2_sonar_4);
+#define PERIODIC_SEND_BOOZ2_SONAR(_chan) 
DOWNLINK_SEND_BOOZ2_SONAR(_chan,&booz2_adc_1,&booz2_adc_2,&booz2_adc_3,&booz2_adc_4);
 #else
 #define PERIODIC_SEND_BOOZ2_SONAR(_chan) {}
 #endif





reply via email to

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