mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-05-21 03:43:26 +08:00
Add MAX11040 buffer to fix data underrun.
This commit is contained in:
@@ -13,7 +13,7 @@ hecto = Pascal Brisset <pascal.brisset@free.fr>
|
||||
jpdumont = jpdumont <USER@DOMAIN>
|
||||
marcuswolschon = Marcus Wolschon <Marcus@Wolschon.biz>
|
||||
markgriffin = Mark Griffin <mark.griffin@itu.int>
|
||||
mmm = Martin Mueller <Ma.Mueller@tu-bs.de>
|
||||
mmm = Martin Mueller <martin@pfump.org>
|
||||
nzjrs = John Stowers <john.stowers@gmail.com>
|
||||
olri = Oliver Riesener <Oliver.Riesener@hs-bremen.de>
|
||||
osam = OSAM-UAV Team <daniel.morgan@aggiemail.usu.edu>
|
||||
|
||||
@@ -50,7 +50,7 @@ void EXTINT_ISR(void) {
|
||||
//LED_TOGGLE(3);
|
||||
|
||||
#ifdef LOGGER
|
||||
max11040_timestamp = getclock();
|
||||
max11040_timestamp[max11040_buf_in] = getclock();
|
||||
#endif
|
||||
|
||||
MaxmSelect();
|
||||
|
||||
+16
-17
@@ -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
|
||||
|
||||
|
||||
+21
-13
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user