summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2009-03-25 11:37:48 -0700
committerKeith Packard <keithp@keithp.com>2009-03-25 11:37:48 -0700
commit66ee94ed10e3d79b24f45a5c63e58456d4d30343 (patch)
tree90d6f1038a119aabc8275a33001dc1aaf5e50714
parentd3732fd405af03c3752a84c4b78da7ef5ebd3744 (diff)
Deal with MSB-outputing DMA engine
-rw-r--r--target/adc-serial/adc_serial.c30
1 files 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);