paparazzi-commits
[Top][All Lists]
Advanced

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

[paparazzi-commits] [4484] Add MAX11040 buffer to fix data underrun.


From: Martin Mueller
Subject: [paparazzi-commits] [4484] Add MAX11040 buffer to fix data underrun.
Date: Sun, 24 Jan 2010 14:51:29 +0000

Revision: 4484
          http://svn.sv.gnu.org/viewvc/?view=rev&root=paparazzi&revision=4484
Author:   mmm
Date:     2010-01-24 14:51:29 +0000 (Sun, 24 Jan 2010)
Log Message:
-----------
Add MAX11040 buffer to fix data underrun.

Modified Paths:
--------------
    paparazzi3/trunk/AUTHORS
    paparazzi3/trunk/sw/airborne/arm7/max11040_hw.c
    paparazzi3/trunk/sw/airborne/main_logger.c
    paparazzi3/trunk/sw/airborne/max11040.c
    paparazzi3/trunk/sw/airborne/max11040.h

Modified: paparazzi3/trunk/AUTHORS
===================================================================
--- paparazzi3/trunk/AUTHORS    2010-01-24 02:45:52 UTC (rev 4483)
+++ paparazzi3/trunk/AUTHORS    2010-01-24 14:51:29 UTC (rev 4484)
@@ -13,7 +13,7 @@
 jpdumont = jpdumont <address@hidden>
 marcuswolschon = Marcus Wolschon <address@hidden>
 markgriffin = Mark Griffin <address@hidden>
-mmm = Martin Mueller <address@hidden>
+mmm = Martin Mueller <address@hidden>
 nzjrs = John Stowers <address@hidden>
 olri = Oliver Riesener <address@hidden>
 osam = OSAM-UAV Team <address@hidden>

Modified: paparazzi3/trunk/sw/airborne/arm7/max11040_hw.c
===================================================================
--- paparazzi3/trunk/sw/airborne/arm7/max11040_hw.c     2010-01-24 02:45:52 UTC 
(rev 4483)
+++ paparazzi3/trunk/sw/airborne/arm7/max11040_hw.c     2010-01-24 14:51:29 UTC 
(rev 4484)
@@ -50,7 +50,7 @@
 //LED_TOGGLE(3);
 
 #ifdef LOGGER
-    max11040_timestamp = getclock();
+    max11040_timestamp[max11040_buf_in] = getclock();
 #endif
 
     MaxmSelect();

Modified: paparazzi3/trunk/sw/airborne/main_logger.c
===================================================================
--- paparazzi3/trunk/sw/airborne/main_logger.c  2010-01-24 02:45:52 UTC (rev 
4483)
+++ paparazzi3/trunk/sw/airborne/main_logger.c  2010-01-24 14:51:29 UTC (rev 
4484)
@@ -294,7 +294,7 @@
     for (i = 0; i < xbeel_payload_len-XBEE_RFDATA_OFFSET; i++) {
       log_buffer[i+LOG_DATA_OFFSET] = xbeel_payload[i+XBEE_RFDATA_OFFSET];
     }
-    log_payload(xbeel_payload_len-XBEE_RFDATA_OFFSET, source, xbeel_timestamp);
+//mmm    log_payload(xbeel_payload_len-XBEE_RFDATA_OFFSET, source, 
xbeel_timestamp);
     LED_TOGGLE(3);
     goto restart;
   }
@@ -383,29 +383,28 @@
     {
 
 #ifdef USE_MAX11040
-      if (max11040_data == MAX11040_DATA_AVAILABLE) {
+      if (max11040_buf_in != max11040_buf_out) {
 //        LED_TOGGLE(3);
         int i;
 
+        max11040_data = MAX11040_IDLE;
+
         log_buffer[LOG_DATA_OFFSET+0] = 100; // sender_id;
         log_buffer[LOG_DATA_OFFSET+1] = 61;  // message_id;
 
-        for (i=0; i<16; i++) {
-          log_buffer[LOG_DATA_OFFSET+2 + i*4 + 0] = (max11040_values[i]      ) 
& 0xFF;
-          log_buffer[LOG_DATA_OFFSET+2 + i*4 + 1] = (max11040_values[i] >> 8 ) 
& 0xFF;
-          log_buffer[LOG_DATA_OFFSET+2 + i*4 + 2] = (max11040_values[i] >> 16) 
& 0xFF;
-          log_buffer[LOG_DATA_OFFSET+2 + i*4 + 3] = (max11040_values[i] >> 24) 
& 0xFF;
+       while(max11040_buf_in != max11040_buf_out) {
+          for (i=0; i<16; i++) {
+            log_buffer[LOG_DATA_OFFSET+2 + i*4 + 0] = 
(max11040_values[max11040_buf_out][i]      ) & 0xFF;
+            log_buffer[LOG_DATA_OFFSET+2 + i*4 + 1] = 
(max11040_values[max11040_buf_out][i] >> 8 ) & 0xFF;
+            log_buffer[LOG_DATA_OFFSET+2 + i*4 + 2] = 
(max11040_values[max11040_buf_out][i] >> 16) & 0xFF;
+            log_buffer[LOG_DATA_OFFSET+2 + i*4 + 3] = 
(max11040_values[max11040_buf_out][i] >> 24) & 0xFF;
 
-#if 0
-          log_buffer[LOG_DATA_OFFSET+2 + i*4 + 0] = i*4;
-          log_buffer[LOG_DATA_OFFSET+2 + i*4 + 1] = i*4+1;
-          log_buffer[LOG_DATA_OFFSET+2 + i*4 + 2] = i*4+2;
-          log_buffer[LOG_DATA_OFFSET+2 + i*4 + 3] = i*4+3;
-#endif
-
-        }
-        log_payload(2 + 16 * 4, LOG_SOURCE_UART0, max11040_timestamp);
-        max11040_data = MAX11040_IDLE;
+          }
+          log_payload(2 + 16 * 4, LOG_SOURCE_UART0, 
max11040_timestamp[max11040_buf_out]);
+         i = max11040_buf_out+1;
+         if (i >= MAX11040_BUF_SIZE) i=0;
+          max11040_buf_out = i;
+       }
       }
 #endif
 

Modified: paparazzi3/trunk/sw/airborne/max11040.c
===================================================================
--- paparazzi3/trunk/sw/airborne/max11040.c     2010-01-24 02:45:52 UTC (rev 
4483)
+++ paparazzi3/trunk/sw/airborne/max11040.c     2010-01-24 14:51:29 UTC (rev 
4484)
@@ -1,12 +1,13 @@
 
 #include "max11040.h"
 
-
 volatile uint8_t max11040_status;
 volatile uint8_t max11040_data;
-volatile int32_t max11040_values[MAXM_NB_CHAN] = {0};
+volatile int32_t max11040_values[MAX11040_BUF_SIZE][MAXM_NB_CHAN] = {{0}};
+volatile uint32_t max11040_timestamp[MAX11040_BUF_SIZE] = {0};
 volatile uint8_t max11040_count = 0;
-volatile uint32_t max11040_timestamp = 0;
+volatile uint32_t max11040_buf_in = 0;
+volatile uint32_t max11040_buf_out = 0;
 
 static void SSP_ISR(void) __attribute__((naked));
 
@@ -162,19 +163,19 @@
 
       if (max11040_count == 0) foo = SSPDR;
 
-      max11040_values[max11040_count]  = SSPDR << 16;
-      max11040_values[max11040_count] |= SSPDR << 8;
-      max11040_values[max11040_count] |= SSPDR;
-      if (max11040_values[max11040_count] & 0x800000) 
-        max11040_values[max11040_count] |= 0xFF000000;
+      max11040_values[max11040_buf_in][max11040_count]  = SSPDR << 16;
+      max11040_values[max11040_buf_in][max11040_count] |= SSPDR << 8;
+      max11040_values[max11040_buf_in][max11040_count] |= SSPDR;
+      if (max11040_values[max11040_buf_in][max11040_count] & 0x800000) 
+        max11040_values[max11040_buf_in][max11040_count] |= 0xFF000000;
 
       max11040_count++;
 
-      max11040_values[max11040_count]  = SSPDR << 16;
-      max11040_values[max11040_count] |= SSPDR << 8;
-      max11040_values[max11040_count] |= SSPDR;
-      if (max11040_values[max11040_count] & 0x800000) 
-        max11040_values[max11040_count] |= 0xFF000000;
+      max11040_values[max11040_buf_in][max11040_count]  = SSPDR << 16;
+      max11040_values[max11040_buf_in][max11040_count] |= SSPDR << 8;
+      max11040_values[max11040_buf_in][max11040_count] |= SSPDR;
+      if (max11040_values[max11040_buf_in][max11040_count] & 0x800000) 
+        max11040_values[max11040_buf_in][max11040_count] |= 0xFF000000;
 
       max11040_count++;
 
@@ -182,6 +183,13 @@
       {
         MaxmUnselect();
         max11040_data = MAX11040_DATA_AVAILABLE;
+        i = max11040_buf_in+1;
+        if (i >= MAX11040_BUF_SIZE) i=0;
+        if (i != max11040_buf_out) {
+          max11040_buf_in = i;
+       } else {
+          max11040_buf_in = i;
+       }
       }
     }
     break;

Modified: paparazzi3/trunk/sw/airborne/max11040.h
===================================================================
--- paparazzi3/trunk/sw/airborne/max11040.h     2010-01-24 02:45:52 UTC (rev 
4483)
+++ paparazzi3/trunk/sw/airborne/max11040.h     2010-01-24 14:51:29 UTC (rev 
4484)
@@ -7,6 +7,7 @@
 
 #define MAXM_NB_CHAN 16
 #define MAXM_NB_ADCS ((MAXM_NB_CHAN+3)/4)
+#define MAX11040_BUF_SIZE 320
 
 extern void max11040_init_ssp(void);
 extern void max11040_init( void );
@@ -18,9 +19,11 @@
 
 extern volatile uint8_t max11040_status;
 extern volatile uint8_t max11040_data;
-extern volatile int32_t max11040_values[MAXM_NB_CHAN];
+extern volatile int32_t max11040_values[MAX11040_BUF_SIZE][MAXM_NB_CHAN];
+extern volatile uint32_t max11040_timestamp[MAX11040_BUF_SIZE];
 extern volatile uint8_t max11040_count;
-extern volatile uint32_t max11040_timestamp;
+extern volatile uint32_t max11040_buf_in;
+extern volatile uint32_t max11040_buf_out;
 
 
 #define MAX11040_RESET      0





reply via email to

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