Guest User

Untitled

a guest
Dec 5th, 2020
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 9.20 KB | None | 0 0
  1. void init_I2S_Bluetooth(int * RxBuff_bluetooth, int * TxBuff_bluetooth) {
  2.  
  3.     //Setting Clock for 48MHz
  4.         //N = 122
  5.         //P = 16
  6.         //M = 10
  7.         //FRACT = 7209
  8.  
  9.         // RCC_PLL2DIVR
  10.         // MASKING:
  11.         RCC -> PLL2DIVR &= ~RCC_PLL2DIVR_P2;
  12.         RCC -> PLL2DIVR &= ~RCC_PLL2DIVR_N2;
  13.         // WRITING:
  14.         RCC -> PLL2DIVR |= RCC_PLL2DIVR_P2_DIV16; // P
  15.         RCC -> PLL2DIVR |= RCC_PLL2DIVR_N2_MULT122; // N
  16.  
  17.         // RCC_PLLCKSELR
  18.         // MASKING:
  19.         RCC -> PLLCKSELR &= ~RCC_PLLCKSELR_DIVM2;
  20.         // WRITING:
  21.         RCC -> PLLCKSELR |= RCC_PLLCKSELR_DIVM2_DIV10; // M
  22.  
  23.         // RCC_PLL2FRACR
  24.         // MASKING:
  25.         RCC -> PLL2FRACR &= ~RCC_PLL2FRACR_FRACN2;
  26.         // WRITING:
  27.         RCC -> PLL2FRACR |= RCC_PLL2FRACR_FRACN_7209; // FRAC
  28.  
  29.         // RCC_PLLCFGR
  30.         // MASKING:
  31.         RCC -> PLLCFGR &= ~RCC_PLLCFGR_DIVP2EN;
  32.         RCC -> PLLCFGR &= ~RCC_PLLCFGR_PLL2RGE;
  33.         RCC -> PLLCFGR &= ~RCC_PLLCFGR_PLL2VCOSEL;
  34.         RCC -> PLLCFGR &= ~RCC_PLLCFGR_PLL2FRACEN;
  35.         // WRITING:
  36.         RCC -> PLLCFGR |= RCC_PLLCFGR_DIVP2EN;
  37.         RCC -> PLLCFGR |= RCC_PLLCFGR_PLL2RGE_4_8;
  38.         RCC -> PLLCFGR |= RCC_PLLCFGR_PLL2VCOSEL_192_836;
  39.         RCC -> PLLCFGR |= RCC_PLLCFGR_PLL2FRACEN;
  40.  
  41.         // RCC_CR
  42.         // MASKING:
  43.         RCC -> CR &= ~RCC_CR_PLL2ON;
  44.         // WRITING:
  45.         RCC -> CR |= RCC_CR_PLL2ON;
  46.         // WAITING:
  47.         while (((RCC -> CR) & (RCC_CR_PLL2RDY)) == 0){};
  48.  
  49.         // ENALBING CLOCKS
  50.  
  51.         // RCC_AHB4ENR
  52.         // MASKING:
  53.         RCC -> AHB4ENR &= ~ RCC_AHB4ENR_GPIOAEN;
  54.         RCC -> AHB4ENR &= ~ RCC_AHB4ENR_GPIOCEN;
  55.  
  56.         // WRITING:
  57.         RCC -> AHB4ENR |= RCC_AHB4ENR_GPIOAEN;
  58.         RCC -> AHB4ENR |= RCC_AHB4ENR_GPIOCEN;
  59.  
  60.         // RCC_APB2ENR
  61.         // MASKING:
  62.         RCC ->APB1LENR &= ~RCC_APB1LENR_SPI3EN;
  63.         // WRITING:
  64.         RCC -> APB1LENR |= RCC_APB1LENR_SPI3EN;
  65.  
  66.         // CHANGING CLOCKS OF PERIPHERALS
  67.         // RCC_D2CCIP1R
  68.         // MASKING;
  69.        RCC -> D2CCIP1R &= ~RCC_D2CCIP1R_SPI123SEL;
  70.         // WRITING:
  71.         RCC -> D2CCIP1R |=  RCC_D2CCIP1R_SPI123SEL_PLL2_P_CK;
  72.  
  73.         // CHANGING GPIO PINS TO ALETERNATIVE
  74.             // GPIOx_MODER
  75.             // MASKING
  76.             GPIOC -> MODER &= ~GPIO_MODER_MODE10; //PC10: SCLK
  77.             GPIOC -> MODER &= ~GPIO_MODER_MODE11; //PC11: MISO
  78.             GPIOC -> MODER &= ~GPIO_MODER_MODE12; //PC12: MOSI
  79.             GPIOA -> MODER &= ~GPIO_MODER_MODE15; //PA15: LRCLK
  80.             GPIOC -> MODER &= ~GPIO_MODER_MODE7;  //PC07: MCLK
  81.  
  82.             // WRITING:
  83.             GPIOC -> MODER |= GPIO_MODER_MODE10_ALT; //PC10: SCLK
  84.             GPIOC -> MODER |= GPIO_MODER_MODE11_ALT; //PC11: MISO
  85.             GPIOC -> MODER |= GPIO_MODER_MODE12_ALT; //PC12: MOSI
  86.             GPIOA -> MODER |= GPIO_MODER_MODE15_ALT; //PA15: LRCLK
  87.             GPIOC -> MODER |= GPIO_MODER_MODE7_ALT; //PC07: MCLK
  88.  
  89.  
  90.             //SETTING ALT FUNCTIONS TO PINS
  91.             // GPIOx_AFRL
  92.             // MASKING:
  93.             GPIOC -> AFR[1] &= ~GPIO_AFRH_AFSEL10_AF6; //PC10: SCLK
  94.             GPIOC -> AFR[1] &= ~GPIO_AFRH_AFSEL11_AF6; //PC11: MISO
  95.             GPIOC -> AFR[1] &= ~GPIO_AFRH_AFSEL12_AF6; //PC12: MOSI
  96.             GPIOA -> AFR[1] &= ~GPIO_AFRH_AFSEL15_AF6; //PA15: LRCLK
  97.             GPIOC -> AFR[0] &= ~GPIO_AFRL_AFSEL7_AF6;  //PA07: MCLK
  98.  
  99.             // WRITING;
  100.             GPIOC -> AFR[1] |= GPIO_AFRH_AFSEL10_AF6; //PC10: SCLK
  101.             GPIOC -> AFR[1] |= GPIO_AFRH_AFSEL11_AF6; //PC11: MISO
  102.             GPIOC -> AFR[1] |= GPIO_AFRH_AFSEL12_AF6; //PC12: MOSI
  103.             GPIOA -> AFR[1] |= GPIO_AFRH_AFSEL15_AF6; //PA15: LRCLK
  104.             GPIOC -> AFR[0] |= GPIO_AFRL_AFSEL7_AF6;  //PA7:  MCLK
  105.  
  106.  
  107.             // ENABLING DMA1
  108.                 // RCC_AHB1ENR
  109.                 // MASKING:
  110.                 RCC -> AHB1ENR &= ~RCC_AHB1ENR_DMA1EN;
  111.                 // WRITING:
  112.                 RCC -> AHB1ENR |= RCC_AHB1ENR_DMA1EN;
  113.  
  114.                 // MASKING:
  115.                   //DMAMUX1_Channel4 -> CCR &= ~DMAMUX_CxCR_DMAREQ_ID;
  116.                   DMAMUX1_Channel5 -> CCR &= ~DMAMUX_CxCR_DMAREQ_ID;
  117.                   // WRITING:
  118.                  // DMAMUX1_Channel4 -> CCR |= DMAMUX_CxCR_DMAREQ_ID_SPI3_Rx; //Rx
  119.                   DMAMUX1_Channel5 -> CCR |= DMAMUX_CxCR_DMAREQ_ID_SPI3_Tx; //Tx
  120.  
  121.                   // DMA1_Stream0_CR
  122.                         // DMA1_Stream1_CR
  123.                         // MASKING:
  124.                         DMA1_Stream4 -> CR &= ~DMA_SxCR_CT;
  125.                         DMA1_Stream4 -> CR &= ~DMA_SxCR_PL;
  126.                         DMA1_Stream4 -> CR &= ~DMA_SxCR_MSIZE;
  127.                         DMA1_Stream4 -> CR &= ~DMA_SxCR_PSIZE;
  128.                         DMA1_Stream4 -> CR &= ~DMA_SxCR_MINC;
  129.                         DMA1_Stream4 -> CR &= ~DMA_SxCR_CIRC;
  130.                         DMA1_Stream4 -> CR &= ~DMA_SxCR_DIR;
  131.                         DMA1_Stream4 -> CR &= ~DMA_SxCR_PFCTRL;
  132.                         DMA1_Stream4 -> CR &= ~DMA_SxCR_TCIE;
  133.                         DMA1_Stream4 -> CR &= ~DMA_SxCR_HTIE;
  134.  
  135.                         DMA1_Stream5 -> CR &= ~DMA_SxCR_CT;
  136.                         DMA1_Stream5 -> CR &= ~DMA_SxCR_PL;
  137.                         DMA1_Stream5 -> CR &= ~DMA_SxCR_MSIZE;
  138.                         DMA1_Stream5 -> CR &= ~DMA_SxCR_PSIZE;
  139.                         DMA1_Stream5 -> CR &= ~DMA_SxCR_MINC;
  140.                         DMA1_Stream5 -> CR &= ~DMA_SxCR_CIRC;
  141.                         DMA1_Stream5 -> CR &= ~DMA_SxCR_DIR;
  142.                         DMA1_Stream5 -> CR &= ~DMA_SxCR_PFCTRL;
  143.                         // WRITING:
  144.                         DMA1_Stream4 -> CR |= DMA_SxCR_CT_MEM0;
  145.                         DMA1_Stream4 -> CR |= DMA_SxCR_PL_Very_High;
  146.                         DMA1_Stream4 -> CR |= DMA_SxCR_MSIZE_32BIT;
  147.                         DMA1_Stream4 -> CR |= DMA_SxCR_PSIZE_32BIT;
  148.                         DMA1_Stream4 -> CR |= DMA_SxCR_MINC;
  149.                         DMA1_Stream4 -> CR |= DMA_SxCR_PINC;
  150.                         DMA1_Stream4 -> CR |= DMA_SxCR_CIRC;
  151.                         DMA1_Stream4 -> CR |= DMA_SxCR_DIR_M_TO_M;
  152.                         DMA1_Stream4 -> CR |= DMA_SxCR_PFCTRL_DMAFLOW;
  153.                         DMA1_Stream4 -> CR |= DMA_SxCR_TCIE;
  154.                         DMA1_Stream4 -> CR |= DMA_SxCR_HTIE;
  155.  
  156.                         DMA1_Stream5 -> CR |= DMA_SxCR_CT_MEM0;
  157.                         DMA1_Stream5 -> CR |= DMA_SxCR_PL_Very_High;
  158.                         DMA1_Stream5 -> CR |= DMA_SxCR_MSIZE_16BIT;
  159.                         DMA1_Stream5 -> CR |= DMA_SxCR_PSIZE_32BIT;
  160.                         DMA1_Stream5 -> CR |= DMA_SxCR_MINC;
  161.                         DMA1_Stream5 -> CR |= DMA_SxCR_CIRC;
  162.                         DMA1_Stream5 -> CR |= DMA_SxCR_DIR_M_TO_P;
  163.                         DMA1_Stream5 -> CR |= DMA_SxCR_PFCTRL_DMAFLOW;
  164.  
  165.                         // DMA_SxNDTR
  166.                         // WRITING:
  167.                         DMA1_Stream4 -> NDTR = 0x400;
  168.                         DMA1_Stream5 -> NDTR = 0x400;
  169.  
  170.                         // DMA_SxPAR
  171.                         // WRITING:
  172.                         //DMA1_Stream4 -> PAR = (int) & SPI3 -> RXDR;
  173.                         DMA1_Stream4 -> PAR = (int) sinewave;
  174.                         DMA1_Stream5 -> PAR = (int) & SPI3 -> TXDR;
  175.  
  176.                         // DMA_SxM0AR
  177.                         // WRITING:
  178.                         DMA1_Stream4 -> M0AR = (int) RxBuff_bluetooth;
  179.                         DMA1_Stream5 -> M0AR = (int) TxBuff_bluetooth;
  180.  
  181.                         // DMA_SxCR
  182.                         // WRITING:
  183.                         DMA1_Stream4 -> CR |= DMA_SxCR_EN;
  184.                         DMA1_Stream5 -> CR |= DMA_SxCR_EN;
  185.  
  186.                         // Setting up the SPI/I2S Peripheral
  187.                            // MASKING:
  188.                            SPI3 -> I2SCFGR &= ~SPI_I2SCFGR_MCKOE;
  189.                            SPI3 -> I2SCFGR &= ~SPI_I2SCFGR_ODD;
  190.                            SPI3 -> I2SCFGR &= ~SPI_I2SCFGR_I2SDIV;
  191.                            SPI3 -> I2SCFGR &= ~SPI_I2SCFGR_DATFMT;
  192.                            SPI3 -> I2SCFGR &= ~SPI_I2SCFGR_WSINV;
  193.                            SPI3 -> I2SCFGR &= ~SPI_I2SCFGR_DATLEN;
  194.                            SPI3 -> I2SCFGR &= ~SPI_I2SCFGR_CHLEN;
  195.                            SPI3 -> I2SCFGR &= ~SPI_I2SCFGR_CKPOL;
  196.                            SPI3 -> I2SCFGR &= ~SPI_I2SCFGR_I2SSTD;
  197.                            SPI3 -> I2SCFGR &= ~SPI_I2SCFGR_I2SCFG;
  198.                            SPI3 -> I2SCFGR &= ~SPI_I2SCFGR_I2SMOD;
  199.                            SPI3 -> CFG1    &= ~SPI_CFG1_RXDMAEN;
  200.                            SPI3 -> CFG1    &= ~SPI_CFG1_TXDMAEN;
  201.                            SPI3 -> CFG1    &= ~SPI_CFG1_FTHLV;
  202.  
  203.                            // WRITING:
  204.                            SPI3 -> I2SCFGR |= SPI_I2SCFGR_MCKOE;
  205.                            SPI3 -> I2SCFGR |= SPI_I2SCFGR_ODD_MULT2;
  206.                            SPI3 -> I2SCFGR |= SPI_I2SCFGR_I2SDIV_2;
  207.                            SPI3 -> I2SCFGR |= SPI_I2SCFGR_WSINV_I2S;
  208.                            SPI3 -> I2SCFGR |= SPI_I2SCFGR_DATALEN_24BIT;
  209.                            //SPI3 -> I2SCFGR |= SPI_I2SCFGR_FIXCH;
  210.                            SPI3 -> I2SCFGR |= SPI_I2SCFGR_CKPOL_FALL_RISE;
  211.                            SPI3 -> I2SCFGR |= SPI_I2SCFGR_I2SSTD_I2STAND;
  212.                            SPI3 -> I2SCFGR |= SPI_I2SCFGR_CHNEL_32BIT_WIDE;
  213.                            SPI3 -> I2SCFGR |= SPI_I2SCFGR_I2SCFG_MASTER_TRANSMIT;
  214.                            SPI3 -> I2SCFGR |= SPI_I2SCFGR_I2SMOD_I2S_PCM_MODE;
  215.                            SPI3 -> I2SCFGR |= SPI_I2SCFGR_DATFMT_LAlign;
  216.                            //SPI1 -> I2SCFGR |= SPI_CFG1_FTHLV_2_Data;
  217.                            //SPI3 -> CFG1 |= SPI_CFG1_RXDMAEN;
  218.                           SPI3 -> CFG1 |= SPI_CFG1_TXDMAEN;
  219.                           /* SPI3 ->  CR1 |= SPI_CR1_SPE;
  220.                            SPI3 ->  CR1 |= SPI_CR1_CSTART;*/
  221.  
  222.  
  223. }
  224.  
Add Comment
Please, Sign In to add comment