Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void init_I2S_Bluetooth(int * RxBuff_bluetooth, int * TxBuff_bluetooth) {
- //Setting Clock for 48MHz
- //N = 122
- //P = 16
- //M = 10
- //FRACT = 7209
- // RCC_PLL2DIVR
- // MASKING:
- RCC -> PLL2DIVR &= ~RCC_PLL2DIVR_P2;
- RCC -> PLL2DIVR &= ~RCC_PLL2DIVR_N2;
- // WRITING:
- RCC -> PLL2DIVR |= RCC_PLL2DIVR_P2_DIV16; // P
- RCC -> PLL2DIVR |= RCC_PLL2DIVR_N2_MULT122; // N
- // RCC_PLLCKSELR
- // MASKING:
- RCC -> PLLCKSELR &= ~RCC_PLLCKSELR_DIVM2;
- // WRITING:
- RCC -> PLLCKSELR |= RCC_PLLCKSELR_DIVM2_DIV10; // M
- // RCC_PLL2FRACR
- // MASKING:
- RCC -> PLL2FRACR &= ~RCC_PLL2FRACR_FRACN2;
- // WRITING:
- RCC -> PLL2FRACR |= RCC_PLL2FRACR_FRACN_7209; // FRAC
- // RCC_PLLCFGR
- // MASKING:
- RCC -> PLLCFGR &= ~RCC_PLLCFGR_DIVP2EN;
- RCC -> PLLCFGR &= ~RCC_PLLCFGR_PLL2RGE;
- RCC -> PLLCFGR &= ~RCC_PLLCFGR_PLL2VCOSEL;
- RCC -> PLLCFGR &= ~RCC_PLLCFGR_PLL2FRACEN;
- // WRITING:
- RCC -> PLLCFGR |= RCC_PLLCFGR_DIVP2EN;
- RCC -> PLLCFGR |= RCC_PLLCFGR_PLL2RGE_4_8;
- RCC -> PLLCFGR |= RCC_PLLCFGR_PLL2VCOSEL_192_836;
- RCC -> PLLCFGR |= RCC_PLLCFGR_PLL2FRACEN;
- // RCC_CR
- // MASKING:
- RCC -> CR &= ~RCC_CR_PLL2ON;
- // WRITING:
- RCC -> CR |= RCC_CR_PLL2ON;
- // WAITING:
- while (((RCC -> CR) & (RCC_CR_PLL2RDY)) == 0){};
- // ENALBING CLOCKS
- // RCC_AHB4ENR
- // MASKING:
- RCC -> AHB4ENR &= ~ RCC_AHB4ENR_GPIOAEN;
- RCC -> AHB4ENR &= ~ RCC_AHB4ENR_GPIOCEN;
- // WRITING:
- RCC -> AHB4ENR |= RCC_AHB4ENR_GPIOAEN;
- RCC -> AHB4ENR |= RCC_AHB4ENR_GPIOCEN;
- // RCC_APB2ENR
- // MASKING:
- RCC ->APB1LENR &= ~RCC_APB1LENR_SPI3EN;
- // WRITING:
- RCC -> APB1LENR |= RCC_APB1LENR_SPI3EN;
- // CHANGING CLOCKS OF PERIPHERALS
- // RCC_D2CCIP1R
- // MASKING;
- RCC -> D2CCIP1R &= ~RCC_D2CCIP1R_SPI123SEL;
- // WRITING:
- RCC -> D2CCIP1R |= RCC_D2CCIP1R_SPI123SEL_PLL2_P_CK;
- // CHANGING GPIO PINS TO ALETERNATIVE
- // GPIOx_MODER
- // MASKING
- GPIOC -> MODER &= ~GPIO_MODER_MODE10; //PC10: SCLK
- GPIOC -> MODER &= ~GPIO_MODER_MODE11; //PC11: MISO
- GPIOC -> MODER &= ~GPIO_MODER_MODE12; //PC12: MOSI
- GPIOA -> MODER &= ~GPIO_MODER_MODE15; //PA15: LRCLK
- GPIOC -> MODER &= ~GPIO_MODER_MODE7; //PC07: MCLK
- // WRITING:
- GPIOC -> MODER |= GPIO_MODER_MODE10_ALT; //PC10: SCLK
- GPIOC -> MODER |= GPIO_MODER_MODE11_ALT; //PC11: MISO
- GPIOC -> MODER |= GPIO_MODER_MODE12_ALT; //PC12: MOSI
- GPIOA -> MODER |= GPIO_MODER_MODE15_ALT; //PA15: LRCLK
- GPIOC -> MODER |= GPIO_MODER_MODE7_ALT; //PC07: MCLK
- //SETTING ALT FUNCTIONS TO PINS
- // GPIOx_AFRL
- // MASKING:
- GPIOC -> AFR[1] &= ~GPIO_AFRH_AFSEL10_AF6; //PC10: SCLK
- GPIOC -> AFR[1] &= ~GPIO_AFRH_AFSEL11_AF6; //PC11: MISO
- GPIOC -> AFR[1] &= ~GPIO_AFRH_AFSEL12_AF6; //PC12: MOSI
- GPIOA -> AFR[1] &= ~GPIO_AFRH_AFSEL15_AF6; //PA15: LRCLK
- GPIOC -> AFR[0] &= ~GPIO_AFRL_AFSEL7_AF6; //PA07: MCLK
- // WRITING;
- GPIOC -> AFR[1] |= GPIO_AFRH_AFSEL10_AF6; //PC10: SCLK
- GPIOC -> AFR[1] |= GPIO_AFRH_AFSEL11_AF6; //PC11: MISO
- GPIOC -> AFR[1] |= GPIO_AFRH_AFSEL12_AF6; //PC12: MOSI
- GPIOA -> AFR[1] |= GPIO_AFRH_AFSEL15_AF6; //PA15: LRCLK
- GPIOC -> AFR[0] |= GPIO_AFRL_AFSEL7_AF6; //PA7: MCLK
- // ENABLING DMA1
- // RCC_AHB1ENR
- // MASKING:
- RCC -> AHB1ENR &= ~RCC_AHB1ENR_DMA1EN;
- // WRITING:
- RCC -> AHB1ENR |= RCC_AHB1ENR_DMA1EN;
- // MASKING:
- //DMAMUX1_Channel4 -> CCR &= ~DMAMUX_CxCR_DMAREQ_ID;
- DMAMUX1_Channel5 -> CCR &= ~DMAMUX_CxCR_DMAREQ_ID;
- // WRITING:
- // DMAMUX1_Channel4 -> CCR |= DMAMUX_CxCR_DMAREQ_ID_SPI3_Rx; //Rx
- DMAMUX1_Channel5 -> CCR |= DMAMUX_CxCR_DMAREQ_ID_SPI3_Tx; //Tx
- // DMA1_Stream0_CR
- // DMA1_Stream1_CR
- // MASKING:
- DMA1_Stream4 -> CR &= ~DMA_SxCR_CT;
- DMA1_Stream4 -> CR &= ~DMA_SxCR_PL;
- DMA1_Stream4 -> CR &= ~DMA_SxCR_MSIZE;
- DMA1_Stream4 -> CR &= ~DMA_SxCR_PSIZE;
- DMA1_Stream4 -> CR &= ~DMA_SxCR_MINC;
- DMA1_Stream4 -> CR &= ~DMA_SxCR_CIRC;
- DMA1_Stream4 -> CR &= ~DMA_SxCR_DIR;
- DMA1_Stream4 -> CR &= ~DMA_SxCR_PFCTRL;
- DMA1_Stream4 -> CR &= ~DMA_SxCR_TCIE;
- DMA1_Stream4 -> CR &= ~DMA_SxCR_HTIE;
- DMA1_Stream5 -> CR &= ~DMA_SxCR_CT;
- DMA1_Stream5 -> CR &= ~DMA_SxCR_PL;
- DMA1_Stream5 -> CR &= ~DMA_SxCR_MSIZE;
- DMA1_Stream5 -> CR &= ~DMA_SxCR_PSIZE;
- DMA1_Stream5 -> CR &= ~DMA_SxCR_MINC;
- DMA1_Stream5 -> CR &= ~DMA_SxCR_CIRC;
- DMA1_Stream5 -> CR &= ~DMA_SxCR_DIR;
- DMA1_Stream5 -> CR &= ~DMA_SxCR_PFCTRL;
- // WRITING:
- DMA1_Stream4 -> CR |= DMA_SxCR_CT_MEM0;
- DMA1_Stream4 -> CR |= DMA_SxCR_PL_Very_High;
- DMA1_Stream4 -> CR |= DMA_SxCR_MSIZE_32BIT;
- DMA1_Stream4 -> CR |= DMA_SxCR_PSIZE_32BIT;
- DMA1_Stream4 -> CR |= DMA_SxCR_MINC;
- DMA1_Stream4 -> CR |= DMA_SxCR_PINC;
- DMA1_Stream4 -> CR |= DMA_SxCR_CIRC;
- DMA1_Stream4 -> CR |= DMA_SxCR_DIR_M_TO_M;
- DMA1_Stream4 -> CR |= DMA_SxCR_PFCTRL_DMAFLOW;
- DMA1_Stream4 -> CR |= DMA_SxCR_TCIE;
- DMA1_Stream4 -> CR |= DMA_SxCR_HTIE;
- DMA1_Stream5 -> CR |= DMA_SxCR_CT_MEM0;
- DMA1_Stream5 -> CR |= DMA_SxCR_PL_Very_High;
- DMA1_Stream5 -> CR |= DMA_SxCR_MSIZE_16BIT;
- DMA1_Stream5 -> CR |= DMA_SxCR_PSIZE_32BIT;
- DMA1_Stream5 -> CR |= DMA_SxCR_MINC;
- DMA1_Stream5 -> CR |= DMA_SxCR_CIRC;
- DMA1_Stream5 -> CR |= DMA_SxCR_DIR_M_TO_P;
- DMA1_Stream5 -> CR |= DMA_SxCR_PFCTRL_DMAFLOW;
- // DMA_SxNDTR
- // WRITING:
- DMA1_Stream4 -> NDTR = 0x400;
- DMA1_Stream5 -> NDTR = 0x400;
- // DMA_SxPAR
- // WRITING:
- //DMA1_Stream4 -> PAR = (int) & SPI3 -> RXDR;
- DMA1_Stream4 -> PAR = (int) sinewave;
- DMA1_Stream5 -> PAR = (int) & SPI3 -> TXDR;
- // DMA_SxM0AR
- // WRITING:
- DMA1_Stream4 -> M0AR = (int) RxBuff_bluetooth;
- DMA1_Stream5 -> M0AR = (int) TxBuff_bluetooth;
- // DMA_SxCR
- // WRITING:
- DMA1_Stream4 -> CR |= DMA_SxCR_EN;
- DMA1_Stream5 -> CR |= DMA_SxCR_EN;
- // Setting up the SPI/I2S Peripheral
- // MASKING:
- SPI3 -> I2SCFGR &= ~SPI_I2SCFGR_MCKOE;
- SPI3 -> I2SCFGR &= ~SPI_I2SCFGR_ODD;
- SPI3 -> I2SCFGR &= ~SPI_I2SCFGR_I2SDIV;
- SPI3 -> I2SCFGR &= ~SPI_I2SCFGR_DATFMT;
- SPI3 -> I2SCFGR &= ~SPI_I2SCFGR_WSINV;
- SPI3 -> I2SCFGR &= ~SPI_I2SCFGR_DATLEN;
- SPI3 -> I2SCFGR &= ~SPI_I2SCFGR_CHLEN;
- SPI3 -> I2SCFGR &= ~SPI_I2SCFGR_CKPOL;
- SPI3 -> I2SCFGR &= ~SPI_I2SCFGR_I2SSTD;
- SPI3 -> I2SCFGR &= ~SPI_I2SCFGR_I2SCFG;
- SPI3 -> I2SCFGR &= ~SPI_I2SCFGR_I2SMOD;
- SPI3 -> CFG1 &= ~SPI_CFG1_RXDMAEN;
- SPI3 -> CFG1 &= ~SPI_CFG1_TXDMAEN;
- SPI3 -> CFG1 &= ~SPI_CFG1_FTHLV;
- // WRITING:
- SPI3 -> I2SCFGR |= SPI_I2SCFGR_MCKOE;
- SPI3 -> I2SCFGR |= SPI_I2SCFGR_ODD_MULT2;
- SPI3 -> I2SCFGR |= SPI_I2SCFGR_I2SDIV_2;
- SPI3 -> I2SCFGR |= SPI_I2SCFGR_WSINV_I2S;
- SPI3 -> I2SCFGR |= SPI_I2SCFGR_DATALEN_24BIT;
- //SPI3 -> I2SCFGR |= SPI_I2SCFGR_FIXCH;
- SPI3 -> I2SCFGR |= SPI_I2SCFGR_CKPOL_FALL_RISE;
- SPI3 -> I2SCFGR |= SPI_I2SCFGR_I2SSTD_I2STAND;
- SPI3 -> I2SCFGR |= SPI_I2SCFGR_CHNEL_32BIT_WIDE;
- SPI3 -> I2SCFGR |= SPI_I2SCFGR_I2SCFG_MASTER_TRANSMIT;
- SPI3 -> I2SCFGR |= SPI_I2SCFGR_I2SMOD_I2S_PCM_MODE;
- SPI3 -> I2SCFGR |= SPI_I2SCFGR_DATFMT_LAlign;
- //SPI1 -> I2SCFGR |= SPI_CFG1_FTHLV_2_Data;
- //SPI3 -> CFG1 |= SPI_CFG1_RXDMAEN;
- SPI3 -> CFG1 |= SPI_CFG1_TXDMAEN;
- /* SPI3 -> CR1 |= SPI_CR1_SPE;
- SPI3 -> CR1 |= SPI_CR1_CSTART;*/
- }
Add Comment
Please, Sign In to add comment