X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=target%2Fadc-serial%2Fadc_serial.c;h=9f722bb5d80a3c8627a6b303efdc6233ed4934c6;hp=b77dd713ea1d73289fbc5a95220120b533d0c362;hb=66ee94ed10e3d79b24f45a5c63e58456d4d30343;hpb=50cc8e97e76d9b60c622962e1c74cf422dfb2c0f diff --git a/target/adc-serial/adc_serial.c b/target/adc-serial/adc_serial.c index b77dd713..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("\tpres: "); - usart_out_number(adc_output[1]); - usart_out_string("\ttemp: "); - usart_out_number(adc_output[2]); - usart_out_string("\tbatt: "); - usart_out_number(adc_output[3]); - usart_out_string("\tdrogue: "); - usart_out_number(adc_output[4]); - usart_out_string("\tmain: "); - usart_out_number(adc_output[5]); + 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(5)); usart_out_string("\r\n"); delay(10); }