From 72044cc0a39432ec91a5a41ab012199d0ed9e329 Mon Sep 17 00:00:00 2001 From: drowe67 Date: Sat, 18 Jun 2016 00:03:58 +0000 Subject: [PATCH] dac driver supports different sample rates git-svn-id: https://svn.code.sf.net/p/freetel/code@2821 01035d8c-6547-0410-b346-abe4f91aad63 --- codec2-dev/stm32/inc/stm32f4_dac.h | 7 ++++++- codec2-dev/stm32/src/stm32f4_dac.c | 11 ++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/codec2-dev/stm32/inc/stm32f4_dac.h b/codec2-dev/stm32/inc/stm32f4_dac.h index aa30415b..adedae05 100644 --- a/codec2-dev/stm32/inc/stm32f4_dac.h +++ b/codec2-dev/stm32/inc/stm32f4_dac.h @@ -30,7 +30,12 @@ #define DAC_BUF_SZ 320 -void dac_open(int fifo_sz); +/* divisors for various sample rates */ + +#define DAC_FS_16KHZ 5250 +#define DAC_FS_96KHZ 875 + +void dac_open(int fs_divisor, int fifo_sz); int dac1_write(short buf[], int n); /* DAC1 pin PA4 */ int dac1_free(); int dac2_write(short buf[], int n); /* DAC2 pin PA5 */ diff --git a/codec2-dev/stm32/src/stm32f4_dac.c b/codec2-dev/stm32/src/stm32f4_dac.c index fa0831e1..2a8d8e64 100644 --- a/codec2-dev/stm32/src/stm32f4_dac.c +++ b/codec2-dev/stm32/src/stm32f4_dac.c @@ -56,13 +56,14 @@ static struct FIFO *dac2_fifo; static unsigned short dac1_buf[DAC_BUF_SZ]; static unsigned short dac2_buf[DAC_BUF_SZ]; -static void tim6_config(void); +static void tim6_config(int fs_divisor); static void dac1_config(void); static void dac2_config(void); int dac_underflow; -void dac_open(int fifo_size) { + +void dac_open(int fs_divisor, int fifo_size) { memset(dac1_buf, 32768, sizeof(short)*DAC_BUF_SZ); memset(dac2_buf, 32768, sizeof(short)*DAC_BUF_SZ); @@ -93,7 +94,7 @@ void dac_open(int fifo_size) { /* Timer and DAC 1 & 2 Configuration ----------------------------------------*/ - tim6_config(); + tim6_config(fs_divisor); dac1_config(); dac2_config(); @@ -119,7 +120,7 @@ int dac2_free() { return fifo_free(dac2_fifo); } -static void tim6_config(void) +static void tim6_config(int fs_divisor) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; @@ -140,7 +141,7 @@ static void tim6_config(void) /* Time base configuration */ TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); - TIM_TimeBaseStructure.TIM_Period = 5250; + TIM_TimeBaseStructure.TIM_Period = fs_divisor - 1; TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; -- 2.25.1