Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * AUDIO_SELECTOR_FACTORY.c
- *
- * Created on: May 3, 2021
- * Author: Christopher
- */
- #include <dspFactory.h>
- #include <i2sFactory.h>
- #include <inputSourceFactory.h>
- #include <opcode.h>
- #include "stm32h753xx.h"
- void INPUT_AUDIO_SELECTOR (int INPUT_TYPE, int BIT_RATE, int SAMPLING_RATE) {
- RCC->APB2ENR |= (RCC_APB2ENR_SPI1EN);
- RCC->APB1LENR |= (RCC_APB1LENR_SPI3EN);
- //DECONFIG I2S
- SPI1->CR1 |= SPI_CR1_CSUSP;
- SPI3->CR1 |= SPI_CR1_CSUSP;
- while (((SPI1->CR1) & (SPI_CR1_CSTART)));
- while (((SPI3->CR1) & (SPI_CR1_CSTART)));
- DMA1_Stream0->CR &= ~DMA_SxCR_EN;
- DMA1_Stream1->CR &= ~DMA_SxCR_EN;
- DMA1_Stream3->CR &= ~DMA_SxCR_EN;
- SPI1->CR1 &= ~SPI_CR1_SPE;
- SPI3->CR1 &= ~SPI_CR1_SPE;
- RCC -> CR &= ~(RCC_CR_PLL2ON);
- //CONFIG I2S
- switch (SAMPLING_RATE) {
- case 192000:
- RCC -> PLLCKSELR &= ~(RCC_PLLCKSELR_DIVM2);
- RCC -> PLLCKSELR |= (RCC_PLLCKSELR_DIVM2_DIV10);
- RCC -> PLL2FRACR = 0;
- RCC -> PLL2FRACR = (RCC_PLL2FRACR_FRACN2_7209);
- RCC -> PLLCFGR &= ~((RCC_PLLCFGR_PLL2VCOSEL) |
- (RCC_PLLCFGR_PLL2RGE) |
- (RCC_PLLCFGR_PLL2FRACEN) |
- (RCC_PLLCFGR_DIVP2EN) |
- (RCC_PLLCFGR_DIVQ2EN) |
- (RCC_PLLCFGR_DIVR2EN));
- RCC -> PLLCFGR |= (RCC_PLLCFGR_PLL2VCOSEL_WIDE_RANGE) |
- (RCC_PLLCFGR_PLL2RGE_8MHz_16MHz) |
- (RCC_PLLCFGR_DIVP2EN) |
- (RCC_PLLCFGR_PLL2FRACEN);
- RCC -> PLL2DIVR &= ~((RCC_PLL2DIVR_N2) |
- (RCC_PLL2DIVR_P2));
- RCC -> PLL2DIVR |= (RCC_PLL2DIVR_N2_122) |
- (RCC_PLL2DIVR_P2_4);
- break;
- case 96000:
- RCC -> PLLCKSELR &= ~(RCC_PLLCKSELR_DIVM2);
- RCC -> PLLCKSELR |= (RCC_PLLCKSELR_DIVM2_DIV10);
- RCC -> PLL2FRACR = 0;
- RCC -> PLL2FRACR = (RCC_PLL2FRACR_FRACN2_7209);
- RCC -> PLLCFGR &= ~((RCC_PLLCFGR_PLL2VCOSEL) |
- (RCC_PLLCFGR_PLL2RGE) |
- (RCC_PLLCFGR_PLL2FRACEN) |
- (RCC_PLLCFGR_DIVP2EN) |
- (RCC_PLLCFGR_DIVQ2EN) |
- (RCC_PLLCFGR_DIVR2EN));
- RCC -> PLLCFGR |= (RCC_PLLCFGR_PLL2VCOSEL_WIDE_RANGE) |
- (RCC_PLLCFGR_PLL2RGE_8MHz_16MHz) |
- (RCC_PLLCFGR_DIVP2EN) |
- (RCC_PLLCFGR_PLL2FRACEN);
- RCC -> PLL2DIVR &= ~((RCC_PLL2DIVR_N2) |
- (RCC_PLL2DIVR_P2));
- RCC -> PLL2DIVR |= (RCC_PLL2DIVR_N2_122) |
- (RCC_PLL2DIVR_P2_8);
- break;
- case 48000:
- RCC -> PLLCKSELR &= ~(RCC_PLLCKSELR_DIVM2);
- RCC -> PLLCKSELR |= (RCC_PLLCKSELR_DIVM2_DIV4);
- RCC -> PLL2FRACR = 0;
- RCC -> PLL2FRACR = (RCC_PLL2FRACR_FRACN2_1835);
- RCC -> PLLCFGR &= ~((RCC_PLLCFGR_PLL2VCOSEL) |
- (RCC_PLLCFGR_PLL2RGE) |
- (RCC_PLLCFGR_PLL2FRACEN) |
- (RCC_PLLCFGR_DIVP2EN) |
- (RCC_PLLCFGR_DIVQ2EN) |
- (RCC_PLLCFGR_DIVR2EN));
- RCC -> PLLCFGR |= (RCC_PLLCFGR_PLL3VCOSEL_WIDE_RANGE) |
- (RCC_PLLCFGR_PLL3RGE_8MHz_16MHz) |
- (RCC_PLLCFGR_DIVP3EN) |
- (RCC_PLLCFGR_PLL3FRACEN);
- RCC -> PLL3DIVR &= ~((RCC_PLL3DIVR_N3) |
- (RCC_PLL3DIVR_P3));
- RCC -> PLL3DIVR |= (RCC_PLL3DIVR_N3_52) |
- (RCC_PLL3DIVR_P3_17);
- break;
- case 44100:
- RCC -> PLLCKSELR &= ~(RCC_PLLCKSELR_DIVM2);
- RCC -> PLLCKSELR |= (RCC_PLLCKSELR_DIVM2_DIV4);
- RCC -> PLL2FRACR = 0;
- RCC -> PLL2FRACR = (RCC_PLL2FRACR_FRACN2_1835);
- RCC -> PLLCFGR &= ~((RCC_PLLCFGR_PLL2VCOSEL) |
- (RCC_PLLCFGR_PLL2RGE) |
- (RCC_PLLCFGR_PLL2FRACEN) |
- (RCC_PLLCFGR_DIVP2EN) |
- (RCC_PLLCFGR_DIVQ2EN) |
- (RCC_PLLCFGR_DIVR2EN));
- RCC -> PLLCFGR |= (RCC_PLLCFGR_PLL2VCOSEL_WIDE_RANGE) |
- (RCC_PLLCFGR_PLL2RGE_8MHz_16MHz) |
- (RCC_PLLCFGR_DIVP2EN) |
- (RCC_PLLCFGR_PLL2FRACEN);
- RCC -> PLL2DIVR &= ~((RCC_PLL2DIVR_N2) |
- (RCC_PLL2DIVR_P2));
- RCC -> PLL2DIVR |= (RCC_PLL2DIVR_N2_28) |
- (RCC_PLL2DIVR_P2_10);
- break;
- }
- RCC -> D2CCIP1R &= ~(RCC_D2CCIP1R_SPI123SEL);
- RCC -> D2CCIP1R |= (RCC_D2CCIP1R_SPI123SEL_PLL2_P_CK);
- RCC -> CR &= ~(RCC_CR_PLL2ON);
- RCC -> CR |= (RCC_CR_PLL2ON);
- while (!((RCC -> CR) & (RCC_CR_PLL2RDY)));
- SPI1->I2SCFGR = 0x00;
- SPI1->CFG1 &= ~((SPI_CFG1_RXDMAEN) |
- (SPI_CFG1_TXDMAEN));
- SPI1->CFG1 |= (SPI_CFG1_RXDMAEN) |
- (SPI_CFG1_TXDMAEN);
- SPI1->I2SCFGR |= (SPI_I2SCFGR_MCKOE) |
- (SPI_I2SCFGR_I2SDIV_2) |
- (SPI_I2SCFGR_DATFMT_LEFT) |
- (SPI_I2SCFGR_I2SSTD_I2S) |
- (SPI_I2SCFGR_I2SCFG_MASTER_FULLDUPLEX) |
- (SPI_I2SCFGR_I2SMOD_I2S);
- SPI3->I2SCFGR = 0x00;
- SPI3->CFG1 &= ~((SPI_CFG1_RXDMAEN) |
- (SPI_CFG1_TXDMAEN));
- SPI3->CFG1 |= (SPI_CFG1_TXDMAEN);
- SPI3->I2SCFGR |= (SPI_I2SCFGR_MCKOE) |
- (SPI_I2SCFGR_I2SDIV_2) |
- (SPI_I2SCFGR_DATFMT_LEFT) |
- (SPI_I2SCFGR_I2SSTD_I2S) |
- (SPI_I2SCFGR_I2SCFG_MASTER_TRANSMIT) |
- (SPI_I2SCFGR_I2SMOD_I2S);
- switch (INPUT_TYPE) {
- case input_Source_Inline:
- /* SPI1->CR1 |= SPI_CR1_CSUSP;
- while (!((SPI1->CR1) & (SPI_CR1_CSTART)));
- DMA1_Stream0->CR &= ~DMA_SxCR_EN;
- DMA1_Stream1->CR &= ~DMA_SxCR_EN;
- SPI1->CR1 &= ~SPI_CR1_SPE; */
- break;
- case input_Source_Bluetooth:
- //Disable everything else besides BT
- break;
- }
- switch (BIT_RATE) {
- case 16:
- SPI1->I2SCFGR |= (SPI_I2SCFGR_DATLEN_16BIT);
- SPI1->I2SCFGR |= (SPI_I2SCFGR_CHLEN_32BIT);
- SPI3->I2SCFGR |= (SPI_I2SCFGR_DATLEN_16BIT);
- SPI3->I2SCFGR |= (SPI_I2SCFGR_CHLEN_32BIT);
- break;
- case 24:
- SPI1->I2SCFGR |= (SPI_I2SCFGR_DATLEN_24BIT);
- SPI1->I2SCFGR |= (SPI_I2SCFGR_CHLEN_32BIT);
- SPI3->I2SCFGR |= (SPI_I2SCFGR_DATLEN_24BIT);
- SPI3->I2SCFGR |= (SPI_I2SCFGR_CHLEN_32BIT);
- break;
- }
- DMA1_Stream0->CR |= DMA_SxCR_EN;
- DMA1_Stream1->CR |= DMA_SxCR_EN;
- DMA1_Stream3->CR |= DMA_SxCR_EN;
- SPI1->CR1 |= SPI_CR1_SPE;
- SPI1->CR1 |= SPI_CR1_CSTART;
- SPI3->CR1 |= SPI_CR1_SPE;
- SPI3->CR1 |= SPI_CR1_CSTART;
- SET_I2S_INTERRUPT();
- }
- void audioSelectorInlineHandler() {
- init_audioProfile(input_Source_Inline);
- INPUT_AUDIO_SELECTOR(input_Source_Inline, 24, 96000);
- }
- void audioSelectorBluetoothHandler() {
- //INPUT_AUDIO_SELECTOR(input_Source_Bluetooth, 16, 44100);
- }
Advertisement
Add Comment
Please, Sign In to add comment