К вопросу об источнике сигнала тактовой частоты

К вопросу об источнике сигнала тактовой частоты


Итак, мне не удалось обеспечить для интерфейса I2S тактирование от входа I2S_CKIN, куда я планировал подключить внешний генератор.

Как я уже писал ранее, если для MCU использовать тактовую частоту 24576 кГц, то можно подобрать настройки PLL так, чтобы обеспечить и 98304 кГц тактовой частоты для I2S, и 48000 кГц – для USB:

Получить калиброванный сигнал частотой 24576 кГц можно с синтезатора si5351 из состава трансивера, но синтезатор управляется по шине I2C. Получаем замкнутый круг: чтобы получить сигнал тактовой частоты от синтезатора, MCU должен уже от него этот сигнал получать.

Проблема счастливо разрешилась включением в функцию main () трёх строчек кода между тэгами /* USER CODE BEGIN Init */ и  /* USER CODE END Init */ сразу после инициализации HAL, но ещё до настроек SystemClock:

int main(void) {

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */

  HAL_Init();

  /* USER CODE BEGIN Init */

__HAL_RCC_GPIOB_CLK_ENABLE();

MX_I2C1_Init ();

VFO_Init ();

 /* USER CODE END Init */

  /* Configure the system clock */

  SystemClock_Config();

...

}

Сразу после включения MCU работает от внутреннего источника HSI RC. Сигнал тактовой частоты 16 МГц от него подаётся на ядро и шины периферии, а следовательно, и на интерфейс I2C.

Для доступа к управлению синтезатором si5351 включаем тактирование порта B, к выводам которого подключен I2C, макросом __HAL_RCC_GPIOB_CLK_ENABLE(). Затем инициализируем I2C запуском функции MX_I2C1_Init (), а затем запускаем инициализацию синтезатора функцией VFO_Init ().

По окончанию этих процедур на выходе синтезатора, подключенному к входу RCC_OSC_IN микроконтроллера, появляется сигнал частотой 24576 кГц, который и будет использоваться в качестве сигнала тактовой частоты.

Про калибровку синтезатора я на Хабр уже писал.

Report Page