В микроконтроллерах серии Atmel SAM-D21 многие периферийные устройства используют тактовую частоту, которая является асинхронной по отношению к основной тактовой частоте ЦП, и доступ к этим периферийным устройствам должен проходить через логику синхронизации; на периферийных устройствах, часы которых работают медленнее, чем время процессора, это может привести к большим задержкам. Например, если RTC настроен на использование тактовой частоты 1024 Гц (что, как представляется, является намерением проекта), а процессор работает на частоте 48 МГц, чтение регистра «текущего времени» приведет к тому, что логика шины вставит более 200 000 состояний ожидания (минимум из пяти циклов тактовой частоты 1024 Гц). Хотя процессор может выдать запрос на чтение, выполнить какой-то другой несвязанный код и вернуть более 200 000 циклов позже, чтобы извлечь время, похоже, нет никакого способа на самом деле прочитать время быстрее.
По моему пониманию синхронизации, однобитовая схема синхронизации будет задерживать сигнал на 2-3 такта тактового генератора; Синхронизация многобитовой величины немного сложнее, но существует множество подходов, которые могут гарантировать надежное поведение в течение пяти циклов тактового сигнала назначения, если он быстрее, чем тактовый генератор источника, и всего на несколько циклов больше, если это не так. Что бы сделал Atmel SAM-D21, для синхронизации которого потребовалось бы шесть тактов в исходной тактовой области, и какие факторы будут благоприятствовать конструкции, задержки синхронизации которой настолько велики, что требуют прерывания «сделано синхронизацией», а не того, который обеспечивает Задержки синхронизации достаточно короткие, чтобы сделать такие прерывания ненужными?
источник
Ответы:
Это другой способ сделать что-то для меня, я привык к своей архитектуре, где мои регистры либо на тактовой частоте моего процессора, либо, по крайней мере, на половине тактовой частоты. Итак, вы пишете свои регистры, и они сразу готовы. Возможно, они делают это таким образом для экономии энергии? Если они размещают периферийные регистры в своем собственном очень медленном домене тактов, возможно, им не нужно просыпаться и запускать тактовый генератор или тактовую частоту процессора, а продолжать обновлять значения на периферии.
Если это так, то вы могли бы записать регистр в свой супер медленный периферийный блок, затем отключить остров питания для всего процессора или тактового генератора и позволить медленному синхронизатору читать его до тех пор, пока он не будет счастлив, а затем прерывать процессор, чтобы вывести его из строя. сна.
В качестве альтернативы это может позволить вам втиснуть максимальное количество инструкций в свое время бодрствования, вместо того, чтобы вращать шесть циклов и ждать каждой записи.
Относительно того, почему они используют так много циклов синхронизации, это может быть паранойей, или они могут соответствовать какому-то высокому стандарту надежности для одного из своих клиентов. Не могу сказать наверняка, но знаю, что видел клиентов с такими требованиями, как у каждого барана должен быть ecc, предустановка на заданное значение и т. Д.
Я думаю, что это не окончательный ответ, но это мои мысли после просмотра таблицы.
источник