diff options
| author | Keith Packard <keithp@keithp.com> | 2013-06-14 04:38:11 -0700 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2013-06-15 01:21:39 -0700 | 
| commit | 7361371190bf3805b6d0414e61f697aca7c7cff1 (patch) | |
| tree | 9f3709ecaedfb4833f450e4c5402a34e1d2eae4b /src/lpc/ao_adc_lpc.c | |
| parent | 6827d0a7c59d606ea05387465f1ad4d914babd49 (diff) | |
altos/lpc: Make ADC inputs work
They're still very unstable (bouncing around a lot), but at least they
seem to report useful stuff now.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/lpc/ao_adc_lpc.c')
| -rw-r--r-- | src/lpc/ao_adc_lpc.c | 52 | 
1 files changed, 31 insertions, 21 deletions
diff --git a/src/lpc/ao_adc_lpc.c b/src/lpc/ao_adc_lpc.c index 9ecc7c13..25a121b5 100644 --- a/src/lpc/ao_adc_lpc.c +++ b/src/lpc/ao_adc_lpc.c @@ -82,19 +82,33 @@  # endif  #endif +#define AO_ADC_MASK	((AO_ADC_0 << 0) |	\ +			 (AO_ADC_1 << 1) |	\ +			 (AO_ADC_2 << 2) |	\ +			 (AO_ADC_3 << 3) |	\ +			 (AO_ADC_4 << 4) |	\ +			 (AO_ADC_5 << 5) |	\ +			 (AO_ADC_6 << 6) |	\ +			 (AO_ADC_7 << 7)) + +#define AO_ADC_CLKDIV	(AO_LPC_SYSCLK / 4500000 - 1) +  static uint8_t			ao_adc_ready;  void  lpc_adc_isr(void)  {  	uint32_t	stat = lpc_adc.stat; -	uint16_t	*out = (uint16_t *) &ao_data_ring[ao_data_head].adc; -	vuint32_t	*in = &lpc_adc.dr[0]; +	uint16_t	*out; -	lpc_adc.cr = 0; +	lpc_adc.cr = ((AO_ADC_MASK << LPC_ADC_CR_SEL) | +		      (AO_ADC_CLKDIV << LPC_ADC_CR_CLKDIV) | +		      (0 << LPC_ADC_CR_BURST) | +		      (LPC_ADC_CR_CLKS_11 << LPC_ADC_CR_CLKS));  	lpc_adc.stat = 0;  	/* Store converted values in packet */ +	out = (uint16_t *) &ao_data_ring[ao_data_head].adc;  #if AO_ADC_0  	*out++ = lpc_adc.dr[0] >> 1;  #endif @@ -141,16 +155,6 @@ void  lpc_adc_isr(void)  	ao_adc_ready = 1;  } -#define AO_ADC_MASK	((AO_ADC_0 << 0) |	\ -			 (AO_ADC_1 << 1) |	\ -			 (AO_ADC_2 << 2) |	\ -			 (AO_ADC_3 << 3) |	\ -			 (AO_ADC_4 << 4) |	\ -			 (AO_ADC_5 << 5) |	\ -			 (AO_ADC_6 << 6) |	\ -			 (AO_ADC_7 << 7)) - -#define AO_ADC_CLKDIV	(AO_LPC_CLKOUT / 4500000)  /*   * Start the ADC sequence using the DMA engine @@ -204,29 +208,35 @@ ao_adc_init(void)  	lpc_nvic_set_enable(LPC_ISR_ADC_POS);  	lpc_nvic_set_priority(LPC_ISR_ADC_POS, AO_LPC_NVIC_CLOCK_PRIORITY);  #if AO_ADC_0 -	ao_enable_analog(0, 11); +	ao_enable_analog(0, 11, 0);  #endif  #if AO_ADC_1 -	ao_enable_analog(0, 12); +	ao_enable_analog(0, 12, 1);  #endif  #if AO_ADC_2 -	ao_enable_analog(0, 13); +	ao_enable_analog(0, 13, 2);  #endif  #if AO_ADC_3 -	ao_enable_analog(0, 14); +	ao_enable_analog(0, 14, 3);  #endif  #if AO_ADC_4 -	ao_enable_analog(0, 14); +	ao_enable_analog(0, 15, 4);  #endif  #if AO_ADC_5 -	ao_enable_analog(0, 14); +	ao_enable_analog(0, 16, 5);  #endif  #if AO_ADC_6 -	ao_enable_analog(0, 14); +	ao_enable_analog(0, 22, 6);  #endif  #if AO_ADC_7 -	ao_enable_analog(0, 14); +	ao_enable_analog(0, 23, 7);  #endif + +	lpc_adc.cr = ((AO_ADC_MASK << LPC_ADC_CR_SEL) | +		      (AO_ADC_CLKDIV << LPC_ADC_CR_CLKDIV) | +		      (0 << LPC_ADC_CR_BURST) | +		      (LPC_ADC_CR_CLKS_11 << LPC_ADC_CR_CLKS)); +  	ao_cmd_register(&ao_adc_cmds[0]);  	ao_adc_ready = 1;  | 
