Advertisement
Guest User

Untitled

a guest
Jun 3rd, 2021
387
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.16 KB | None | 0 0
  1. /*
  2.  * DSP_FACTORY.c
  3.  *
  4.  *  Created on: May 7, 2021
  5.  *      Author: Christopher
  6.  */
  7.  
  8. #define ARM_MATH_CM7
  9. #include "main.h"
  10. #include "arm_math.h"
  11. #include "FILTER.h"
  12. #include "CONSTANTS.h"
  13. #include "OPCODE.h"
  14. #include "I2S_FACTORY.h"
  15.  
  16. //static double inputCompensator = 1.0;
  17. //static uint8_t volumeCurrent = 50;
  18.  
  19. static arm_biquad_cascade_df2T_instance_f64 audioStream_L;
  20. static arm_biquad_cascade_df2T_instance_f64 audioStream_R;
  21.  
  22. void INIT_FILTER(uint8_t sourceMode) {
  23.  
  24.     switch(sourceMode) {
  25.  
  26.     case INPUT_INLINE:
  27.  
  28.         arm_biquad_cascade_df2T_init_f64(&audioStream_L, 18, initFilter_192kHz_inline, pState_L_192kHz_inline);
  29.         arm_biquad_cascade_df2T_init_f64(&audioStream_R, 18, initFilter_192kHz_inline, pState_R_192kHz_inline);
  30.         break;
  31.  
  32.     case INPUT_BLUETOOTH:
  33.  
  34.         arm_biquad_cascade_df2T_init_f64(&audioStream_L, 8, initFilter_44_1kHz_bluetooth, pState_L_44_1kHz_bluetooth);
  35.         arm_biquad_cascade_df2T_init_f64(&audioStream_R, 8, initFilter_44_1kHz_bluetooth, pState_R_44_1kHz_bluetooth);
  36.         break;
  37.     }
  38. }
  39.  
  40. void I2S_HALFCOMPLETE_CALLBACK() {
  41.  
  42.     int * I2S1_RxBUFF = getI2S1_RxBUFF();
  43.     int * I2S1_TxBUFF = getI2S1_TxBUFF();
  44.  
  45.     //double INSAMPLE_I2S_L[1024];
  46.     //double INSAMPLE_I2S_R[1024];
  47.  
  48.     //double OUTSAMPLE_I2S_L[1024];
  49.     //double OUTSAMPLE_I2S_R[1024];
  50.  
  51.     /*for (int i = 0; i < 2048; i ++){
  52.  
  53.         if ( i % 2 == 0){ // R Samples
  54.  
  55.               INSAMPLE_I2S_L[i-(i >> 1)] = (double) (I2S1_RxBUFF[i] << ADC_COMPENSATOR) * (0.01 * (double) volumeCurrent) * inputCompensator;
  56.  
  57.         } else if ( i % 2 == 1){ // R Samples
  58.  
  59.               INSAMPLE_I2S_R[i-1-((i-1)>>1)] = (double) (I2S1_RxBUFF[i] << ADC_COMPENSATOR) * (0.01 * (double) volumeCurrent) * inputCompensator;
  60.  
  61.         }
  62. }
  63.                  arm_biquad_cascade_df2T_f64(&audioStream_L, INSAMPLE_I2S_L, OUTSAMPLE_I2S_L, 1024);
  64.                  arm_biquad_cascade_df2T_f64(&audioStream_R, INSAMPLE_I2S_R, OUTSAMPLE_I2S_R, 1024);*/
  65.  
  66.                 for (int i = 0; i < 2; i ++){
  67.  
  68.                     I2S1_TxBUFF[i] = I2S1_RxBUFF[i];
  69.                  /*  if (i % 2 == 0) { // L Samples
  70.  
  71.                        I2S1_TxBUFF[i] = (int)OUTSAMPLE_I2S_L[i-(i >> 1)];
  72.  
  73.                  } else if ( i % 2 == 1) { // R Samples
  74.  
  75.                        I2S1_TxBUFF[i] = (int)OUTSAMPLE_I2S_R[i-1-((i-1)>>1)];
  76.  
  77.                  }*/
  78.             }
  79.                DMA1_Stream1->CR |= DMA_SxCR_EN;
  80. }
  81.  
  82. void I2S_TRANSFERCOMPLETE_CALLBACK() {
  83.  
  84.     int * I2S1_RxBUFF = getI2S1_RxBUFF();
  85.     int * I2S1_TxBUFF = getI2S1_TxBUFF();
  86.  
  87.     //double INSAMPLE_I2S_L[1024];
  88.     //double INSAMPLE_I2S_R[1024];
  89.  
  90.     //double OUTSAMPLE_I2S_L[1024];
  91.     //double OUTSAMPLE_I2S_R[1024];
  92.  
  93.     /*for (int i = 2048; i < 4096; i ++){
  94.  
  95.                       if (i % 2 == 0){ // L Samples
  96.  
  97.                           INSAMPLE_I2S_L[i-(i >> 1)-1024] = (double) (I2S1_RxBUFF[i] << ADC_COMPENSATOR) * (0.01 * (double) volumeCurrent) * inputCompensator;
  98.  
  99.                     } else if ( i % 2 == 1){ // R Samples
  100.  
  101.                          INSAMPLE_I2S_R[i-1-((i-1)>>1)-1024] = (double) (I2S1_RxBUFF[i] << ADC_COMPENSATOR) * (0.01 * (double) volumeCurrent) * inputCompensator;
  102.  
  103.                     }
  104.                 }
  105.  
  106.                      arm_biquad_cascade_df2T_f64(&audioStream_L, INSAMPLE_I2S_L, OUTSAMPLE_I2S_L, 1024);
  107.                      arm_biquad_cascade_df2T_f64(&audioStream_R, INSAMPLE_I2S_R, OUTSAMPLE_I2S_R, 1024);*/
  108.  
  109.                      for (int i = 2; i < 4; i ++){
  110.  
  111.                             I2S1_TxBUFF[i] = I2S1_RxBUFF[i];
  112.  
  113.                       /* if (i % 2 == 0) { // L Samples
  114.  
  115.                            I2S1_TxBUFF[i] = (int)OUTSAMPLE_I2S_L[i-(i >> 1)-1024];
  116.  
  117.                      } else if ( i % 2 == 1) { // R Samples
  118.  
  119.                            I2S1_TxBUFF[i] = (int)OUTSAMPLE_I2S_R[i-1-((i-1)>>1)-1024];
  120.  
  121.                      }*/
  122.                 }
  123.                      DMA1_Stream1->CR |= DMA_SxCR_EN;
  124.  
  125. }
  126.  
  127. void MUTE(uint8_t INPUT_AUDIO_SELECTOR) {
  128.  
  129.  
  130.     if((INPUT_AUDIO_SELECTOR == INPUT_INLINE) | (INPUT_AUDIO_SELECTOR == INPUT_BLUETOOTH))
  131.  
  132.              SPI1->CR1 |= SPI_CR1_CSUSP;
  133.              while (!((SPI1->CR1) & (SPI_CR1_CSTART)));
  134.              DMA1_Stream0->CR &= ~DMA_SxCR_EN;
  135.              DMA1_Stream1->CR &= ~DMA_SxCR_EN;
  136.              SPI1->CR1 &= ~SPI_CR1_SPE;
  137. }
  138.  
  139. void UNMUTE(uint8_t INPUT_AUDIO_SELECTOR) {
  140.  
  141.  
  142.     if((INPUT_AUDIO_SELECTOR == INPUT_INLINE) | (INPUT_AUDIO_SELECTOR == INPUT_BLUETOOTH))
  143.  
  144.              DMA1_Stream0->CR |= DMA_SxCR_EN;
  145.              DMA1_Stream1->CR |= DMA_SxCR_EN;
  146.              SPI1->CR1 |= SPI_CR1_SPE;
  147.              SPI1->CR1 |= SPI_CR1_CSTART;
  148. }
  149.  
  150.  
  151.  
  152.  
  153.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement