diff --git a/AUTHORS b/AUTHORS index 817c17fa62..d028bb9cd4 100644 --- a/AUTHORS +++ b/AUTHORS @@ -13,7 +13,7 @@ hecto = Pascal Brisset jpdumont = jpdumont marcuswolschon = Marcus Wolschon markgriffin = Mark Griffin -mmm = Martin Mueller +mmm = Martin Mueller nzjrs = John Stowers olri = Oliver Riesener osam = OSAM-UAV Team diff --git a/sw/airborne/arm7/max11040_hw.c b/sw/airborne/arm7/max11040_hw.c index 7ce0dfcf9d..881b7a4abf 100644 --- a/sw/airborne/arm7/max11040_hw.c +++ b/sw/airborne/arm7/max11040_hw.c @@ -50,7 +50,7 @@ void EXTINT_ISR(void) { //LED_TOGGLE(3); #ifdef LOGGER - max11040_timestamp = getclock(); + max11040_timestamp[max11040_buf_in] = getclock(); #endif MaxmSelect(); diff --git a/sw/airborne/main_logger.c b/sw/airborne/main_logger.c index a04509c88a..c1b66107fa 100644 --- a/sw/airborne/main_logger.c +++ b/sw/airborne/main_logger.c @@ -294,7 +294,7 @@ void log_xbee(unsigned char c, unsigned char source) 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 @@ int do_log(void) { #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 diff --git a/sw/airborne/max11040.c b/sw/airborne/max11040.c index e4b1a53e7c..3ecbd7151a 100644 --- a/sw/airborne/max11040.c +++ b/sw/airborne/max11040.c @@ -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 @@ static void SSP_ISR(void) { 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 @@ static void SSP_ISR(void) { { 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; diff --git a/sw/airborne/max11040.h b/sw/airborne/max11040.h index 41fe8eb7ee..57fd23349c 100644 --- a/sw/airborne/max11040.h +++ b/sw/airborne/max11040.h @@ -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 void max11040_hw_init( void ); 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