From 66ee94ed10e3d79b24f45a5c63e58456d4d30343 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 25 Mar 2009 11:37:48 -0700 Subject: [PATCH] Deal with MSB-outputing DMA engine --- target/adc-serial/adc_serial.c | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/target/adc-serial/adc_serial.c b/target/adc-serial/adc_serial.c index fb58b4c2..9f722bb5 100644 --- a/target/adc-serial/adc_serial.c +++ b/target/adc-serial/adc_serial.c @@ -405,7 +405,15 @@ struct cc_dma_channel __xdata dma_config; #define ADC_LEN 6 -uint8_t __xdata adc_output[ADC_LEN*2]; +/* The DMA engine writes to XDATA in MSB order */ +struct dma_xdata16 { + uint8_t high; + uint8_t low; +}; + +struct dma_xdata16 adc_output[ADC_LEN]; + +#define DMA_XDATA16(a,n) ((uint16_t) ((a)[n].high << 8) | (uint16_t) (a[n].low)) #define ADDRH(a) (((uint16_t) (a)) >> 8) #define ADDRL(a) (((uint16_t) (a))) @@ -518,14 +526,16 @@ usart_out_string(uint8_t *string) usart_out_byte(b); } -uint8_t __xdata num_buffer[10]; +#define NUM_LEN 6 + +uint8_t __xdata num_buffer[NUM_LEN]; uint8_t __xdata * __xdata num_ptr; void usart_out_number(uint16_t v) { - num_ptr = num_buffer + 10; + num_ptr = num_buffer + NUM_LEN; *--num_ptr = '\0'; do { *--num_ptr = '0' + v % 10; @@ -533,10 +543,10 @@ usart_out_number(uint16_t v) } while (v); while (num_ptr != num_buffer) *--num_ptr = ' '; - usart_out_string(num_ptr); + usart_out_string(num_buffer); } -#define ADC(n) (((uint16_t) (adc_output[n<<1] << 8)) | (uint16_t) (adc_output[(n<<1)+1])) +#define ADC(n) DMA_XDATA16(adc_output,n) main () { @@ -551,15 +561,15 @@ main () adc_run(); usart_out_string("accel: "); usart_out_number(ADC(0)); - usart_out_string("pres: "); + usart_out_string(" pres: "); usart_out_number(ADC(1)); - usart_out_string("temp: "); + usart_out_string(" temp: "); usart_out_number(ADC(2)); - usart_out_string("batt: "); + usart_out_string(" batt: "); usart_out_number(ADC(3)); - usart_out_string("drogue: "); + usart_out_string(" drogue: "); usart_out_number(ADC(4)); - usart_out_string("main: "); + usart_out_string(" main: "); usart_out_number(ADC(5)); usart_out_string("\r\n"); delay(10); -- 2.30.2