Могу ли я динамически изменять входную тактовую частоту AT91SAM3X8E?

Фон:

Я пытаюсь использовать микроконтроллер AT91SAM3X8E (для совместимости с Arduino Due) для создания USB для я 2 С интерфейс. Большинство я 2 С Для кодеков требуются главные часы, М С л К "=" 256 * Б С л К где BCLK — битовая синхронизация, которая, в свою очередь, Б С л К "=" 64 * Ф с . Это было бы тривиально сгенерировать, если бы я имел дело только с одной частотой выборки, но я хотел бы сохранить совместимость для всех распространенных значений (44,1 кГц, 48 кГц, 88,2 кГц, 96 кГц, 196 кГц).

Я планирую использовать синхронный последовательный контроллер (SSC) микроконтроллера для этой задачи, для которой он очень хорошо подходит.

Проблема:

Все я 2 С тактовые сигналы должны быть кратны частоте дискретизации, которая варьируется между двумя наборами - кратными 44,1 кГц и кратными 48 кГц. Это означает, что часы, управляющие последовательным контроллером, должны динамически переключаться между двумя значениями. Сначала я подумал, что наилучшим вариантом будет управление тактовым сигналом последовательного контроллера с соответствующей частотой, но это не позволяет использовать динамическое разделение тактового сигнала для поддержки разных частот дискретизации. Я пришел к выводу (возможно, ошибочному), что мне нужно иметь возможность переключать главные часы микроконтроллера, чтобы решить все эти проблемы.

Вопрос:

Может ли AT91SAM3X8E поддерживать динамическое изменение часов, которые он получает на выводе XIN, или это вызовет ошибки во время выполнения? Если да, то есть ли способ их обойти (например, временно использовать RC-генератор)?

Ответы (1)

Я ничего не знаю об этом AT91SAM3X8Eконкретно, но я угадаю ответ, основываясь на своих знаниях об ИС.

Теоретически нет никаких причин, по которым вы не сможете динамически изменять основную тактовую частоту в цифровой схеме. С чем вы должны быть осторожны, так это с тем, что во время переключения у вас не может быть двух последовательных нарастающих фронтов, которые нарушают максимальную частоту устройства. Если вы представляете себе переключение с одной формы волны на другую, когда часы «переключены с» падают, а часы «переключены на» растут, то вы можете получить период синхронизации для одного цикла, который может быть намного меньше, чем период любого из часов. Это приведет к сбою времени на нескольких путях и оставит ваш микро в недопустимом состоянии.

Если у вас есть какой-то способ гарантировать, что вы можете правильно синхронизировать переход между часами, не создавая такого импульса, я не думаю, что это проблема.

Отличный момент, о котором я даже не подумал, спасибо! Я предполагаю, что если бы я оставил первый генератор включенным и переключился (временно) на внутренний генератор перед его выключением, я мог бы избежать этого состояния.