From: drowe67 Date: Fri, 6 Nov 2015 23:02:44 +0000 (+0000) Subject: sampling at Fs=96kHz OK, ADC driver now supports different sample rates X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=f51b072269c3238ad7fe32e00a34301770b7d094;p=freetel-svn-tracking.git sampling at Fs=96kHz OK, ADC driver now supports different sample rates git-svn-id: https://svn.code.sf.net/p/freetel/code@2484 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/codec2-dev/stm32/inc/stm32f4_adc.h b/codec2-dev/stm32/inc/stm32f4_adc.h index d819fa72..c04d22a0 100644 --- a/codec2-dev/stm32/inc/stm32f4_adc.h +++ b/codec2-dev/stm32/inc/stm32f4_adc.h @@ -30,7 +30,12 @@ #define ADC_BUF_SZ 320 -void adc_open(int fifo_sz); +/* divisors for various sample rates */ + +#define ADC_FS_16KHZ 5250 +#define ADC_FS_96KHZ 875 + +void adc_open(int fs_divisor, int fifo_sz); int adc1_read(short buf[], int n); /* ADC1 Pin PA1 */ int adc2_read(short buf[], int n); /* ADC2 Pin PA2 */ diff --git a/codec2-dev/stm32/src/adc_rec.c b/codec2-dev/stm32/src/adc_rec.c index 68736fda..047e37c7 100644 --- a/codec2-dev/stm32/src/adc_rec.c +++ b/codec2-dev/stm32/src/adc_rec.c @@ -63,7 +63,7 @@ int main(void){ bufs = FS*REC_TIME_SECS/N; printf("Starting!\n"); - adc_open(4*N); + adc_open(ADC_FS_16KHZ, 4*N); for(i=0; i #include #include "stm32f4_adc.h" -#include "gdb_stdio.h" -#include "stm32f4xx_gpio.h" +#include "stm32f4_usb_vcp.h" +#include "sm1000_leds_switches.h" #define N (ADC_BUF_SZ*6) @@ -53,12 +53,14 @@ extern int adc_overflow2; int main(void){ short buf[N]; + #ifdef TEST_TONE float phase = 0.0; float sam; int i; + #endif usb_vcp_init(); - adc_open(4*N); + adc_open(ADC_FS_96KHZ, 4*N); sm1000_leds_switches_init(); /* set up test buffer, lets us test USB comms indep of ADC, record to a file diff --git a/codec2-dev/stm32/src/adc_sd.c b/codec2-dev/stm32/src/adc_sd.c index 6685fbb6..d3085d81 100644 --- a/codec2-dev/stm32/src/adc_sd.c +++ b/codec2-dev/stm32/src/adc_sd.c @@ -60,7 +60,7 @@ int main(void){ short buf[N]; float sd1, sd2; - adc_open(2*N); + adc_open(ADC_FS_16KHZ, 2*N); printf("Starting!\n"); while(1) { diff --git a/codec2-dev/stm32/src/adcdac_ut.c b/codec2-dev/stm32/src/adcdac_ut.c index f28fce0e..3aeaf028 100644 --- a/codec2-dev/stm32/src/adcdac_ut.c +++ b/codec2-dev/stm32/src/adcdac_ut.c @@ -49,7 +49,7 @@ int main(void) { int i; dac_open(4*DAC_BUF_SZ); - adc_open(4*ADC_BUF_SZ); + adc_open(ADC_FS_16KHZ, 4*ADC_BUF_SZ); sm1000_leds_switches_init(); while (1) { diff --git a/codec2-dev/stm32/src/sm1000_main.c b/codec2-dev/stm32/src/sm1000_main.c index 39e43720..4d6ad0c6 100644 --- a/codec2-dev/stm32/src/sm1000_main.c +++ b/codec2-dev/stm32/src/sm1000_main.c @@ -277,7 +277,7 @@ int main(void) { /* Set up ADCs/DACs */ dac_open(4*DAC_BUF_SZ); - adc_open(4*ADC_BUF_SZ); + adc_open(ADC_FS_96KHZ, 4*ADC_BUF_SZ); /* Set up FreeDV modem */ f = freedv_open(FREEDV_MODE_1600); diff --git a/codec2-dev/stm32/src/stm32f4_adc.c b/codec2-dev/stm32/src/stm32f4_adc.c index 5e5014ed..00d4fed3 100644 --- a/codec2-dev/stm32/src/stm32f4_adc.c +++ b/codec2-dev/stm32/src/stm32f4_adc.c @@ -51,15 +51,15 @@ int half,full; void adc_configure(); -static void tim2_config(void); +static void tim2_config(int fs_divisor); -void adc_open(int fifo_sz) { +void adc_open(int fs_divisor, int fifo_sz) { adc1_fifo = fifo_create(fifo_sz); assert(adc1_fifo != NULL); adc2_fifo = fifo_create(fifo_sz); assert(adc2_fifo != NULL); - tim2_config(); + tim2_config(fs_divisor); adc_configure(); init_debug_blinky(); } @@ -77,7 +77,7 @@ int adc2_read(short buf[], int n) { } -static void tim2_config(void) +static void tim2_config(int fs_divisor) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; @@ -98,7 +98,7 @@ static void tim2_config(void) /* Time base configuration */ TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); - TIM_TimeBaseStructure.TIM_Period = 5250; + TIM_TimeBaseStructure.TIM_Period = fs_divisor; TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;