From 6acfabeaf062deabe9a72c1d65a876813802ee62 Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Sun, 28 Feb 2016 17:32:26 +0100 Subject: [PATCH] Improvement of Horus ADC driver, the cross-talk between A4 and A5 was excessive. The ADC chip used supports only low impedance sources, so the time between MUX change and ADC sampling had to be bigger. --- radio/src/targets/horus/adc_driver.cpp | 54 ++++++++++++++++++-------- 1 file changed, 38 insertions(+), 16 deletions(-) diff --git a/radio/src/targets/horus/adc_driver.cpp b/radio/src/targets/horus/adc_driver.cpp index 589d4796f..1d8c8f158 100644 --- a/radio/src/targets/horus/adc_driver.cpp +++ b/radio/src/targets/horus/adc_driver.cpp @@ -133,11 +133,11 @@ void adcInit() #define SPI_S1 4 #define SPI_6POS 5 #define SPI_S2 6 -#define SPI_S3 7 -#define SPI_S4 8 +#define SPI_LS 7 +#define SPI_RS 8 #define SPI_TX_VOLTAGE 9 -#define SPI_RS 10 -#define SPI_LS 11 +#define SPI_L2 10 +#define SPI_L1 11 const uint16_t adcCommands[MOUSE1+2] = { @@ -148,13 +148,13 @@ const uint16_t adcCommands[MOUSE1+2] = MANUAL_MODE | ( SPI_S1 << 7 ), MANUAL_MODE | ( SPI_6POS << 7 ), MANUAL_MODE | ( SPI_S2 << 7 ), + MANUAL_MODE | ( SPI_L1 << 7 ), + MANUAL_MODE | ( SPI_L2 << 7 ), MANUAL_MODE | ( SPI_LS << 7 ), MANUAL_MODE | ( SPI_RS << 7 ), - MANUAL_MODE | ( SPI_S3 << 7 ), - MANUAL_MODE | ( SPI_S4 << 7 ), MANUAL_MODE | ( SPI_TX_VOLTAGE << 7 ), - MANUAL_MODE | ( 0 << 7 ), - MANUAL_MODE | ( 0 << 7 ) + MANUAL_MODE | ( 0 << 7 ), // small joystick left/right + MANUAL_MODE | ( 0 << 7 ) // small joystick up/down }; void adcRead() @@ -170,22 +170,44 @@ void adcRead() DMA2_Stream1->CR |= DMA_SxCR_EN; // Enable DMA ADC3->CR2 |= (uint32_t)ADC_CR2_SWSTART; + // A dummy command to get things started + // (because the sampled data is lagging behind for two command cycles) ADC_CS_LOW(); delay_01us(1); - SPIx_ReadWriteByte(*command++); // Discard - ADC_CS_HIGH(); - delay_01us(1); - - ADC_CS_LOW(); - delay_01us(1); - SPIx_ReadWriteByte(*command++); // Discard + SPIx_ReadWriteByte(*command); // still sampling the old MUX channel ADC_CS_HIGH(); delay_01us(1); for (uint32_t adcIndex=0; adcIndex