From: drowe67 Date: Sat, 27 Sep 2014 03:03:11 +0000 (+0000) Subject: switch debouncing and sine wave test mode X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=5bcd15764cd168263fab0a8b04603296a8d929b2;p=freetel-svn-tracking.git switch debouncing and sine wave test mode git-svn-id: https://svn.code.sf.net/p/freetel/code@1858 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/codec2-dev/stm32/Makefile b/codec2-dev/stm32/Makefile index b1972297..dd677e9c 100644 --- a/codec2-dev/stm32/Makefile +++ b/codec2-dev/stm32/Makefile @@ -160,6 +160,7 @@ src/adcdac_ut.c \ ../src/fifo.c \ src/stm32f4_dac.c \ src/stm32f4_adc.c \ +src/sm1000_leds_switches.c \ src/debugblinky.c \ src/system_stm32f4xx.c \ src/startup_stm32f4xx.s \ diff --git a/codec2-dev/stm32/src/adcdac_ut.c b/codec2-dev/stm32/src/adcdac_ut.c index 5901eea7..39719da7 100644 --- a/codec2-dev/stm32/src/adcdac_ut.c +++ b/codec2-dev/stm32/src/adcdac_ut.c @@ -28,6 +28,7 @@ #include #include "stm32f4_dac.h" #include "stm32f4_adc.h" +#include "sm1000_leds_switches.h" #define SINE_SAMPLES 32 @@ -45,16 +46,24 @@ short aSine[] = { int main(void) { short buf[SINE_SAMPLES]; + int i; dac_open(4*DAC_BUF_SZ); adc_open(4*ADC_BUF_SZ); + sm1000_leds_switches_init(); while (1) { /* keep DAC FIFOs topped up */ - while(adc1_read(buf, SINE_SAMPLES) == -1); - dac2_write(buf, SINE_SAMPLES); + while(adc2_read(buf, SINE_SAMPLES) == -1); + + if (switch_select()) { + for(i=0; iODR &= ~(1 << 3); @@ -109,7 +143,7 @@ int main(void) { /* ADC1 is the demod in signal from the radio rx, DAC2 is the SM1000 speaker */ - if (analog_mode) { + if (ss.mode == ANALOG) { /* force analog bypass when select down */ @@ -130,7 +164,6 @@ int main(void) { nout = nin; f->total_bit_errors = 0; - if (adc1_read(&adc16k[FDMDV_OS_TAPS_16K], 2*nin) == 0) { GPIOE->ODR = (1 << 3); fdmdv_16_to_8_short(adc8k, &adc16k[FDMDV_OS_TAPS_16K], nin); @@ -146,3 +179,51 @@ int main(void) { } /* while(1) ... */ } +/* + * SysTick Interrupt Handler + */ + +void SysTick_Handler(void) +{ + if (downTicker > 0) { + downTicker--; + } +} + +/* Select button state machine. Debounces switches and enables cycling + through ANALOG-DV-TONE modes */ + +void iterate_select_state_machine(SWITCH_STATE *ss) { + int next_state; + + next_state = ss->state; + switch(ss->state) { + case SS_IDLE: + if (switch_select()) { + downTicker = FIFTY_MS; + next_state = SS_DEBOUNCE_DOWN; + } + break; + case SS_DEBOUNCE_DOWN: + if (downTicker == 0) { + ss->mode++; + if (ss->mode >= MAX_MODES) + ss->mode = 0; + next_state = SS_WAIT_BUTTON_UP; + } + break; + case SS_WAIT_BUTTON_UP: + if (switch_select() == 0) { + downTicker = FIFTY_MS; + next_state = SS_DEBOUNCE_UP; + } + break; + case SS_DEBOUNCE_UP: + if (downTicker == 0) { + next_state = SS_IDLE; + } + break; + } + ss->state = next_state; +} +