dac driver supports different sample rates
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Sat, 18 Jun 2016 00:03:58 +0000 (00:03 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Sat, 18 Jun 2016 00:03:58 +0000 (00:03 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@2821 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/stm32/inc/stm32f4_dac.h
codec2-dev/stm32/src/stm32f4_dac.c

index aa30415bfc3420def2252cd27e64e7e4109d2704..adedae05092b0f579eff4a9d6522665ec0d4b994 100644 (file)
 
 #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 */
index fa0831e1be429f9366aa928637e0945547e01da4..2a8d8e64890f7222f4397cf050073f59d4cc92ff 100644 (file)
@@ -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;