Загрузка данных


#include <zephyr/init.h>
#include <fsl_clock.h>
#include <fsl_iomuxc.h>

static int force_mclk_init(void)
{
	/* Принудительно настраиваем пин GPIO_SD_B0_00 в режим вывода SAI2_MCLK */
	IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B0_00_SAI2_MCLK, 0U);
	IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_B0_00_SAI2_MCLK, 0x10B0U);

	/* Включаем тактирование самого модуля SAI2 в процессоре i.MX RT */
	CLOCK_EnableClock(kCLOCK_Sai2);

	/* Конфигурируем источник тактирования для SAI2 Root Clock 
	 * Настраиваем делители (преселекторы), чтобы на выходе MCLK получилось ровно ~12.288 МГц 
	 */
	CLOCK_SetMux(kCLOCK_Sai2Mux, 0); /* Выбор PLL4 (Audio PLL) в качестве источника */
	CLOCK_SetDiv(kCLOCK_Sai2PreDiv, 3); /* Предделитель */
	CLOCK_SetDiv(kCLOCK_Sai2Div, 7);    /* Основной делитель */

	/* Включаем вывод мастер-клока наружу через мастер-контроллер SAI */
	I2S2->TCSR |= I2S_TCSR_BCE_MASK; /* Enable Bit Clock */
	
	printk("Forced MCLK clock line generation enabled for SGTL5000\n");
	return 0;
}

/* Регистрируем функцию на этапе PRE_KERNEL_2. 
 * Она выполнится до того, как ядро Zephyr начнет опрашивать I2C-кодеки!
 */
SYS_INIT(force_mclk_init, PRE_KERNEL_2, 50);