как читать / писать регистр - PullRequest
0 голосов
/ 13 августа 2010

Я вижу некоторый код, который собирается читать / записывать некоторые периферийные регистры. Я вижу, что все операции записи выполняются с некоторыми задержками. Мне кажется, что SW нужно дождаться, пока значение вступит в силу на HW. Некоторые веб-страницы говорят, что регистр будет обновляться каждый такт. Я думаю, это причина ожидания. Ну, мои вопросы:

  1. Нужна ли операция чтения такая задержка? Если да, то когда SW хочет прочитать / записать один регистр, какова правильная последовательность для этого? Как

[DELAY]

tmp = some_register // read

some_register = tmp + 1 // write

[DELAY]

или

tmp = some_register // read

[DELAY]

some_register = tmp + 1 // write

[DELAY]

  1. Что если SW не имеет такой задержки после операции записи? Я на самом деле вижу, что некоторые операции записи без этой задержки могут работать должным образом на более медленном процессоре. Но когда код работает на более быстром процессоре, он терпит неудачу. Я думаю, что задержка является разумной. Мне просто нужно объяснить, почему он работает на более медленном процессоре.

  2. Я не очень знаком с функциональностью реестра. Любые полезные материалы или ссылки?

1 Ответ

0 голосов
/ 31 августа 2010

Задержка после записи.

  • чтение
  • запись
  • задержка

Аппаратное обеспечение;внешней последовательной плате потребуется некоторое время, чтобы все произошло.Процессоры могут записывать данные в регистры ввода-вывода очень быстро.Многие микросхемы ввода-вывода не принимают такие изменения часто.

Простейшими устройствами на портах ввода-вывода являются защелки, подключенные к светодиоду.Если вы напишите 1, свет горит.Если вы напишите 0, он уходит.Если вы запишете 0,1,0,1 в устройство быстрее, чем оно может изменить состояние, оно не будет обновляться.Скорость, с которой устройство может надежно принимать данные с шины данных компьютера, часто оказывается быстрее, чем это может изменить выходные данные в реальном мире.В устройствах ввода-вывода больше напряжения и ток, и для их изменения требуется больше времени, чем для слабых сигналов, необходимых для регистрации изменений.Чтобы снизить энергопотребление, многие устройства используют синхронизированные выходные выводы.Это связано с тем, что устройства CMOS (в наши дни CMOS - это обычная технология изготовления чипов) расходуют мощность, пропорциональную скорости изменения битов.Удерживание всех битов одинаково использует небольшую мощность.Изменения используют его.

Устройства с синхронизированным вводом-выводом (и последовательные порты являются окончательным случаем этого) будут меняться / обновляться только в следующие часы.

Когда вы используете последовательный порт для отправки последовательного портаданных, для передачи данных могут потребоваться миллионы тактовых импульсов процессора (если скорость (скорость передачи) последовательного порта установлена ​​на очень низкое значение)

Простейшая правильная задержка для простого последовательного порта - чтение«бит готовности» «регистра состояния», и когда он готов отправить еще один байт, запишите его.

В расширенном решении используются буферы и прерывания.Это немного сложнее для вас беспокоиться.

...