X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=target%2Fadc-serial%2Fadc_serial.c;h=9f722bb5d80a3c8627a6b303efdc6233ed4934c6;hp=b10d418e14588d132f8d7a23f92eeff4f964d6e0;hb=66ee94ed10e3d79b24f45a5c63e58456d4d30343;hpb=5577ca3762bfc000b0bc3782c73a8f95996a28a6 diff --git a/target/adc-serial/adc_serial.c b/target/adc-serial/adc_serial.c index b10d418e..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 -uint16_t __xdata adc_output[ADC_LEN]; +/* 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,22 +526,28 @@ 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; v /= 10; } while (v); - usart_out_string(num_ptr); + while (num_ptr != num_buffer) + *--num_ptr = ' '; + usart_out_string(num_buffer); } +#define ADC(n) DMA_XDATA16(adc_output,n) + main () { P1DIR |= 2; @@ -546,17 +560,17 @@ main () for (;;) { adc_run(); usart_out_string("accel: "); - usart_out_number(adc_output[0]); - usart_out_string("pres: "); - usart_out_number(adc_output[1]); - usart_out_string("temp: "); - usart_out_number(adc_output[2]); - usart_out_string("batt: "); - usart_out_number(adc_output[3]); - usart_out_string("drogue: "); - usart_out_number(adc_output[4]); + usart_out_number(ADC(0)); + usart_out_string(" pres: "); + usart_out_number(ADC(1)); + usart_out_string(" temp: "); + usart_out_number(ADC(2)); + usart_out_string(" batt: "); + usart_out_number(ADC(3)); + usart_out_string(" drogue: "); + usart_out_number(ADC(4)); usart_out_string(" main: "); - usart_out_number(adc_output[5]); + usart_out_number(ADC(5)); usart_out_string("\r\n"); delay(10); }