Что происходит, когда я пишу в регистр с отображением в памяти? - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь познакомиться с микроконтроллерами AVR.Я немного запутался в том, как на самом деле работают регистры с отображением в памяти.

Я использую avr-libc и программирую на C. Глядя на источники avr-libc, есть много внутренних регистров, доступ к которым осуществляется через запись / чтение.SRAM локации.Когда я пишу в область памяти регистра, действительно ли этот байт в SRAM перезаписывается, а затем асинхронно копируется в регистр?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 21 декабря 2018

Маловероятно, что каждый регистр специальных функций (SFR) на самом деле имеет то, что можно считать байтом в SRAM.Многие регистры имеют нереализованные биты, или биты только для чтения, или биты, которые вы очищаете, записывая 1, или делаете что-то совершенно особенное, когда вы читаете или пишете из них.Разработчикам чипов потребовались бы специальные схемы для реализации всех этих вариантов поведения.Помещение фактического байта оперативной памяти перед этим просто добавит усложнение и стоимость.

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

Однако мы никогда не сможем сказать, потому что кремниевая конструкция чипов AVR не имеет открытого источника.Вы получите более точные ответы, если спросите о чем-то, что можно протестировать, например, «сколько циклов требуется для записи в такой-то регистр, чтобы иметь эффект».

0 голосов
/ 22 декабря 2018

Краткий ответ: это зависит.

Длинный ответ: когда вы записываете в регистр отображения памяти в C, компилятор выдает те же инструкции, что и при любом другом доступе к памяти (загрузка / сохранение / перемещение / и т. Д.).Процессор будет выполнять доступ к памяти по адресу, как обычно, в случае записи он будет записывать адрес регистра во внутреннюю шину, активировать строб записи и затем выводить нужные данные в строки данных.автобуса.

Здесь все становится сложнее.Выходные данные могут быть направлены на любую другую схему в MCU: они действительно могут быть сохранены в структуре SRAM или FIFO, но они могут быть просто заблокированы или «зарегистрированы» защелками и триггерами, или они могут быть даже просто направленыгде-то без хранения.В большинстве случаев запись, скорее всего, регистрируется синхронно (что может быть или не быть SRAM), но это не гарантируется, и лучше проверить таблицу данных или справочное руководство по вашей конкретной микросхеме на конкретные регистры, которые вас интересуют.

0 голосов
/ 21 декабря 2018

Когда я записываю в область памяти регистра, действительно ли этот байт в SRAM перезаписывается, а затем асинхронно копируется в регистр?

Байт в SRAM фактически перезаписывается;регистр просто отражает изменение немедленно.И наоборот.

Вы можете считать эти регистры псевдонимом для местоположения SRAM.Или вы можете думать в этих местах SRAM как комнаты с двумя дверями - одна из коридора (шина SRAM), а другая из другого коридора (имена регистров).

Процессор использует разные инструкции для доступа к одному и тому же местоположению, в зависимости от указанного режима адресации, но, в конце концов, доступ к тому же местоположению.Поскольку ЦП выполняет одну инструкцию за раз, не существует «асинхронного» механизма;В любом случае, местоположение изменяется, и следующая инструкция ЦП видит новое значение.

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

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

Для этого вы также можете, например, GoogleЯ нашел это: https://electronics.stackexchange.com/questions/165321/avr-why-io-registers-have-io-addresses-and-sram-adresses

...