Guest User

Untitled

a guest
Jun 3rd, 2021
458
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.20 KB | None | 0 0
  1. /*
  2.  * AUDIO_SELECTOR_FACTORY.c
  3.  *
  4.  *  Created on: May 3, 2021
  5.  *      Author: Christopher
  6.  */
  7.  
  8. #include "stm32h753xx.h"
  9. #include "Opcode.h"
  10. #include "I2S_FACTORY.h"
  11.  
  12. void INPUT_AUDIO_SELECTOR (int INPUT_TYPE, int BIT_RATE, int SAMPLING_RATE) {
  13.     RCC->APB2ENR |= (RCC_APB2ENR_SPI1EN);
  14.     //DECONFIG I2S
  15.     SPI1->CR1 |= SPI_CR1_CSUSP;
  16.     while (((SPI1->CR1) & (SPI_CR1_CSTART)));
  17.     DMA1_Stream0->CR &= ~DMA_SxCR_EN;
  18.     DMA1_Stream1->CR &= ~DMA_SxCR_EN;
  19.     SPI1->CR1 &= ~SPI_CR1_SPE;
  20.     RCC -> CR &= ~(RCC_CR_PLL2ON);
  21.  
  22.     //CONFIG I2S
  23.  
  24.     switch (SAMPLING_RATE) {
  25.  
  26.     case 192000:
  27.  
  28.         RCC -> PLLCKSELR &= ~(RCC_PLLCKSELR_DIVM2);
  29.         RCC -> PLLCKSELR |=  (RCC_PLLCKSELR_DIVM2_DIV10);
  30.  
  31.         RCC -> PLL2FRACR = 0;
  32.         RCC -> PLL2FRACR = (RCC_PLL2FRACR_FRACN2_7209);
  33.  
  34.         RCC -> PLLCFGR   &= ~((RCC_PLLCFGR_PLL2VCOSEL) |
  35.                               (RCC_PLLCFGR_PLL2RGE)    |
  36.                               (RCC_PLLCFGR_PLL2FRACEN) |
  37.                               (RCC_PLLCFGR_DIVP2EN)    |
  38.                               (RCC_PLLCFGR_DIVQ2EN)    |
  39.                               (RCC_PLLCFGR_DIVR2EN));
  40.  
  41.         RCC -> PLLCFGR   |= (RCC_PLLCFGR_PLL2VCOSEL_WIDE_RANGE) |
  42.                             (RCC_PLLCFGR_PLL2RGE_8MHz_16MHz)    |
  43.                             (RCC_PLLCFGR_DIVP2EN)               |
  44.                             (RCC_PLLCFGR_PLL2FRACEN);
  45.  
  46.         RCC -> PLL2DIVR  &= ~((RCC_PLL2DIVR_N2) |
  47.                               (RCC_PLL2DIVR_P2));
  48.  
  49.         RCC -> PLL2DIVR  |= (RCC_PLL2DIVR_N2_122) |
  50.                             (RCC_PLL2DIVR_P2_4);
  51.                break;
  52.     case 96000:
  53.  
  54.         RCC -> PLLCKSELR &= ~(RCC_PLLCKSELR_DIVM2);
  55.         RCC -> PLLCKSELR |=  (RCC_PLLCKSELR_DIVM2_DIV10);
  56.  
  57.         RCC -> PLL2FRACR = 0;
  58.         RCC -> PLL2FRACR = (RCC_PLL2FRACR_FRACN2_7209);
  59.  
  60.         RCC -> PLLCFGR   &= ~((RCC_PLLCFGR_PLL2VCOSEL) |
  61.                               (RCC_PLLCFGR_PLL2RGE)    |
  62.                               (RCC_PLLCFGR_PLL2FRACEN) |
  63.                               (RCC_PLLCFGR_DIVP2EN)    |
  64.                               (RCC_PLLCFGR_DIVQ2EN)    |
  65.                               (RCC_PLLCFGR_DIVR2EN));
  66.  
  67.         RCC -> PLLCFGR   |= (RCC_PLLCFGR_PLL2VCOSEL_WIDE_RANGE) |
  68.                             (RCC_PLLCFGR_PLL2RGE_8MHz_16MHz)    |
  69.                             (RCC_PLLCFGR_DIVP2EN)               |
  70.                             (RCC_PLLCFGR_PLL2FRACEN);
  71.  
  72.         RCC -> PLL2DIVR  &= ~((RCC_PLL2DIVR_N2) |
  73.                               (RCC_PLL2DIVR_P2));
  74.  
  75.         RCC -> PLL2DIVR  |= (RCC_PLL2DIVR_N2_122) |
  76.                             (RCC_PLL2DIVR_P2_8);
  77.               break;
  78.     case 48000:
  79.  
  80.         RCC -> PLLCKSELR &= ~(RCC_PLLCKSELR_DIVM2);
  81.         RCC -> PLLCKSELR |=  (RCC_PLLCKSELR_DIVM2_DIV4);
  82.  
  83.         RCC -> PLL2FRACR = 0;
  84.         RCC -> PLL2FRACR = (RCC_PLL2FRACR_FRACN2_1835);
  85.  
  86.         RCC -> PLLCFGR   &= ~((RCC_PLLCFGR_PLL2VCOSEL) |
  87.                               (RCC_PLLCFGR_PLL2RGE)    |
  88.                               (RCC_PLLCFGR_PLL2FRACEN) |
  89.                               (RCC_PLLCFGR_DIVP2EN)    |
  90.                               (RCC_PLLCFGR_DIVQ2EN)    |
  91.                               (RCC_PLLCFGR_DIVR2EN));
  92.  
  93.         RCC -> PLLCFGR   |= (RCC_PLLCFGR_PLL2VCOSEL_WIDE_RANGE) |
  94.                             (RCC_PLLCFGR_PLL2RGE_8MHz_16MHz)    |
  95.                             (RCC_PLLCFGR_DIVP2EN)               |
  96.                             (RCC_PLLCFGR_PLL2FRACEN);
  97.  
  98.         RCC -> PLL2DIVR  &= ~((RCC_PLL2DIVR_N2) |
  99.                               (RCC_PLL2DIVR_P2));
  100.  
  101.         RCC -> PLL2DIVR  |= (RCC_PLL2DIVR_N2_52) |
  102.                             (RCC_PLL2DIVR_P2_17);
  103.                break;
  104.     case 44100:
  105.  
  106.         RCC -> PLLCKSELR &= ~(RCC_PLLCKSELR_DIVM2);
  107.         RCC -> PLLCKSELR |=  (RCC_PLLCKSELR_DIVM2_DIV4);
  108.  
  109.         RCC -> PLL2FRACR = 0;
  110.         RCC -> PLL2FRACR = (RCC_PLL2FRACR_FRACN2_1835);
  111.  
  112.         RCC -> PLLCFGR   &= ~((RCC_PLLCFGR_PLL2VCOSEL) |
  113.                               (RCC_PLLCFGR_PLL2RGE)    |
  114.                               (RCC_PLLCFGR_PLL2FRACEN) |
  115.                               (RCC_PLLCFGR_DIVP2EN)    |
  116.                               (RCC_PLLCFGR_DIVQ2EN)    |
  117.                               (RCC_PLLCFGR_DIVR2EN));
  118.  
  119.         RCC -> PLLCFGR   |= (RCC_PLLCFGR_PLL2VCOSEL_WIDE_RANGE) |
  120.                             (RCC_PLLCFGR_PLL2RGE_8MHz_16MHz)    |
  121.                             (RCC_PLLCFGR_DIVP2EN)               |
  122.                             (RCC_PLLCFGR_PLL2FRACEN);
  123.  
  124.         RCC -> PLL2DIVR  &= ~((RCC_PLL2DIVR_N2) |
  125.                               (RCC_PLL2DIVR_P2));
  126.  
  127.         RCC -> PLL2DIVR  |= (RCC_PLL2DIVR_N2_28) |
  128.                             (RCC_PLL2DIVR_P2_10);
  129.                break;
  130.  
  131.     }
  132.  
  133.     RCC -> D2CCIP1R &= ~(RCC_D2CCIP1R_SPI123SEL);
  134.     RCC -> D2CCIP1R |=  (RCC_D2CCIP1R_SPI123SEL_PLL2_P_CK);
  135.  
  136.     RCC -> CR &= ~(RCC_CR_PLL2ON);
  137.     RCC -> CR |=  (RCC_CR_PLL2ON);
  138.  
  139.     while (!((RCC -> CR) & (RCC_CR_PLL2RDY)));
  140.  
  141.  
  142.     SPI1->I2SCFGR = 0x00;
  143.     SPI1->CFG1 &= ~((SPI_CFG1_RXDMAEN) |
  144.                     (SPI_CFG1_TXDMAEN));
  145.  
  146.                      SPI1->CFG1 |= (SPI_CFG1_RXDMAEN) |
  147.                                    (SPI_CFG1_TXDMAEN);
  148.                      SPI1->I2SCFGR |= (SPI_I2SCFGR_MCKOE)              |
  149.                                       (SPI_I2SCFGR_I2SDIV_2)           |
  150.                                       (SPI_I2SCFGR_DATFMT_LEFT)        |
  151.                                       (SPI_I2SCFGR_I2SSTD_I2S)         |
  152.                                       (SPI_I2SCFGR_I2SCFG_MASTER_FULL) |
  153.                                       (SPI_I2SCFGR_I2SMOD_I2S);
  154.  
  155.     switch (INPUT_TYPE) {
  156.  
  157.     case INPUT_INLINE:
  158.  
  159.         /* SPI1->CR1 |= SPI_CR1_CSUSP;
  160.          while (!((SPI1->CR1) & (SPI_CR1_CSTART)));
  161.          DMA1_Stream0->CR &= ~DMA_SxCR_EN;
  162.          DMA1_Stream1->CR &= ~DMA_SxCR_EN;
  163.          SPI1->CR1 &= ~SPI_CR1_SPE; */
  164.  
  165.         break;
  166.  
  167.  
  168.     case INPUT_BLUETOOTH:
  169.          //Disable everything else besides BT
  170.         break;
  171.     }
  172.  
  173.     switch (BIT_RATE) {
  174.  
  175.     case 16:
  176.             SPI1->I2SCFGR |= (SPI_I2SCFGR_DATLEN_16BIT);
  177.             SPI1->I2SCFGR |= (SPI_I2SCFGR_CHLEN_32BIT);
  178.             break;
  179.  
  180.     case 24:
  181.             SPI1->I2SCFGR |= (SPI_I2SCFGR_DATLEN_24BIT);
  182.             SPI1->I2SCFGR |= (SPI_I2SCFGR_CHLEN_32BIT);
  183.             break;
  184.  
  185.         }
  186.  
  187.      DMA1_Stream0->CR |= DMA_SxCR_EN;
  188.      //DMA1_Stream1->CR |= DMA_SxCR_EN;
  189.      SPI1->CR1 |= SPI_CR1_SPE;
  190.      SPI1->CR1 |= SPI_CR1_CSTART;
  191.      SET_I2S_INTERRUPT();
  192.  
  193. }
  194.  
Advertisement
Add Comment
Please, Sign In to add comment