1) написал инициализацию I2S для STM32F407 и получил странный результат - мне нужно, чтобы процессор генерил сигнал тактирования (MCK - мастер клок) для аудиокодека. Генерация идет (на выходе МСК, 63 нога есть сигнал с частотой 5644800 Гц ) только в режиме, когда контроллер мастер-приемник. А вот когда он мастер-передатчик генерации нет. В даташите ничего про это не нашел, почему так? И еще - не совсем понял про режим полного дуплекса для I2S - можно ли (а может и нужно!?) считывать данные с соответствующего регистра данных SPI?
2) Настраиваю ДМА контроллер и непонятно что такое за параметры MBURST и PBURST. Из описания смутно понял, что они используются когда пишешь из периферии в память не постоянно (например по одному байту из SPI), а пачками -по 4, 8, 16 и т.д. байт. Прав ли я? При работе ДМА ставится ли ядро процессора под ХОЛД или нет?
Привожу код инициализации I2S:
CODE
void I2S_init (void)
{
/*Настройка I2S
частота дискретизации 22050Гц
f(VCO clock) = f(PLLI2S clock input) * (PLLI2SN / PLLM)
f(PLL I2S clock output) = f(VCO clock) / PLLI2SR
*/
RCC->AHB1ENR|=RCC_AHB1ENR_GPIOCEN;//включил GPIOC
GPIOC->MODER|=GPIO_MODER_MODER6_1;//выход AF
GPIOC->AFR[0]|=0x05000000;//AF5-MCKI2S
RCC->AHB1ENR|=RCC_AHB1ENR_GPIOBEN;//включил GPIOB
GPIOB->MODER|=GPIO_MODER_MODER12_1;//выход AF
GPIOB->MODER|=GPIO_MODER_MODER13_1;//выход AF
GPIOB->MODER|=GPIO_MODER_MODER14_1;//выход AF
GPIOB->MODER|=GPIO_MODER_MODER15_1;//выход AF
GPIOB->AFR[1]|=0x55550000;//AF5-I2S/SPI
RCC->PLLI2SCFGR=0;//обнуляю
RCC->PLLI2SCFGR|=PLLI2SN(429);//
RCC->PLLI2SCFGR|=PLLI2SR(4);//
RCC->CR|=RCC_CR_PLLI2SON;//Включил PLL I2S
#ifndef SIMULATOR
while ((RCC->CR&RCC_CR_PLLI2SRDY)!=RCC_CR_PLLI2SRDY);//пока заработает PLL
#endif
RCC->APB1ENR|=RCC_APB1ENR_SPI2EN;//включил Spi2
SPI2->I2SCFGR|=SPI_I2SCFGR_I2SMOD;//включил I2S
SPI2->I2SCFGR|=SPI_I2SCFGR_DATLEN_0;//24бит данные
SPI2->I2SCFGR|=SPI_I2SCFGR_CHLEN;//32бит длина данных
SPI2->I2SPR=I2SDIV(9);//
SPI2->I2SPR|=I2SODD(1);//
SPI2->I2SCFGR|=I2SCFG(3);//Режим Мастер - применик
SPI2->I2SPR|=I2SMCKOE(1);//выход Мастер клока
SPI2->I2SCFGR|=SPI_I2SCFGR_I2SE;//включил SPI
}
{
/*Настройка I2S
частота дискретизации 22050Гц
f(VCO clock) = f(PLLI2S clock input) * (PLLI2SN / PLLM)
f(PLL I2S clock output) = f(VCO clock) / PLLI2SR
*/
RCC->AHB1ENR|=RCC_AHB1ENR_GPIOCEN;//включил GPIOC
GPIOC->MODER|=GPIO_MODER_MODER6_1;//выход AF
GPIOC->AFR[0]|=0x05000000;//AF5-MCKI2S
RCC->AHB1ENR|=RCC_AHB1ENR_GPIOBEN;//включил GPIOB
GPIOB->MODER|=GPIO_MODER_MODER12_1;//выход AF
GPIOB->MODER|=GPIO_MODER_MODER13_1;//выход AF
GPIOB->MODER|=GPIO_MODER_MODER14_1;//выход AF
GPIOB->MODER|=GPIO_MODER_MODER15_1;//выход AF
GPIOB->AFR[1]|=0x55550000;//AF5-I2S/SPI
RCC->PLLI2SCFGR=0;//обнуляю
RCC->PLLI2SCFGR|=PLLI2SN(429);//
RCC->PLLI2SCFGR|=PLLI2SR(4);//
RCC->CR|=RCC_CR_PLLI2SON;//Включил PLL I2S
#ifndef SIMULATOR
while ((RCC->CR&RCC_CR_PLLI2SRDY)!=RCC_CR_PLLI2SRDY);//пока заработает PLL
#endif
RCC->APB1ENR|=RCC_APB1ENR_SPI2EN;//включил Spi2
SPI2->I2SCFGR|=SPI_I2SCFGR_I2SMOD;//включил I2S
SPI2->I2SCFGR|=SPI_I2SCFGR_DATLEN_0;//24бит данные
SPI2->I2SCFGR|=SPI_I2SCFGR_CHLEN;//32бит длина данных
SPI2->I2SPR=I2SDIV(9);//
SPI2->I2SPR|=I2SODD(1);//
SPI2->I2SCFGR|=I2SCFG(3);//Режим Мастер - применик
SPI2->I2SPR|=I2SMCKOE(1);//выход Мастер клока
SPI2->I2SCFGR|=SPI_I2SCFGR_I2SE;//включил SPI
}
Прошу ответить на мои вопросы.