X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=target%2Fadc-serial%2Fadc_serial.c;h=1f7b6880b1ffcb4133811cc7ad7ed8b9ce3781c7;hp=b77dd713ea1d73289fbc5a95220120b533d0c362;hb=17d2432a8b9c15963cd3b821f025ad33972ef477;hpb=50cc8e97e76d9b60c622962e1c74cf422dfb2c0f diff --git a/target/adc-serial/adc_serial.c b/target/adc-serial/adc_serial.c index b77dd713..1f7b6880 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))) @@ -419,7 +427,7 @@ adc_init(void) dma_config.cfg1 = (DMA_CFG1_SRCINC_0 | DMA_CFG1_DESTINC_1 | DMA_CFG1_PRIORITY_NORMAL); - + dma_config.src_high = ADDRH(&ADCXDATA); dma_config.src_low = ADDRL(&ADCXDATA); dma_config.dst_high = ADDRH(adc_output); @@ -434,7 +442,7 @@ adc_init(void) (1 << 3) | /* battery voltage */ (1 << 4) | /* drogue sense */ (1 << 5)); /* main sense */ - + ADCCON1 = (ADCCON1_STSEL_START); /* ST bit triggers */ ADCCON2 = (ADCCON2_SREF_VDD | /* reference voltage is VDD */ ADCCON2_SDIV_512 | /* 12 bit ADC results */ @@ -518,45 +526,52 @@ 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; + P1DIR = 3; CLKCON = 0; while (!(SLEEP & SLEEP_XOSC_STB)) ; - + adc_init(); + P1_0 = 1; usart_init(); 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); }