Работа с зарезервированными битами регистра микросхемы ARM - PullRequest
3 голосов
/ 13 марта 2012

Я работаю с регистрами ARM Cortex M3. В документации некоторые биты могут быть «зарезервированы». Мне неясно, как я должен обращаться с этими зарезервированными битами при записи в регистры.

Эти зарезервированные биты вообще доступны для записи? Должен ли я быть осторожным, чтобы не трогать их? Произойдет ли что-нибудь плохое, если я коснусь их?

Ответы [ 5 ]

5 голосов
/ 13 марта 2012

Это классическая проблема встроенного мира относительно того, что делать с зарезервированными битами!Во-первых, вы должны НЕ писать в него случайным образом, чтобы ваш код не стал переносимым.Что происходит, когда архитектура назначает новое значение зарезервированным битам в будущем?Ваш код сломается.Таким образом, лучшая мантра при работе с регистрами, имеющими зарезервированные биты, это Read-Modify-Write.то есть читать содержимое регистра, изменять только те биты, которые вы хотите , а затем записывать обратно значение, чтобы зарезервированные биты не были затронуты (нетронуты, не означает, что мы не записываем в них, но в том смысле, что мы записалито, что было там раньше)

Например, скажем, есть регистр, в котором только LSBit имеет значение, а все остальные зарезервированы.Я бы сделал это

ldr r0,=memoryAddress
ldr r1,[r0]
orr r1,r1,#1
str r1,[r0]
2 голосов
/ 13 марта 2012

Read-Modify-Write должно работать большую часть времени, , однако есть случаи, когда зарезервированные биты не определены при чтении, но должны быть записаны с определенным значением. Смотрите этот пост из группы LPC2000 (вся тема тоже довольно интересная). Поэтому всегда внимательно проверяйте документы, а также любые имеющиеся ошибки. Если у вас есть сомнения или документы неясны, не стесняйтесь обращаться к производителю.

2 голосов
/ 13 марта 2012

Если в документации нет другой подсказки, напишите ноль.Вы не можете избежать записи в несколько зарезервированных битов, разбросанных по 32-битному регистру.

1 голос
/ 13 марта 2012

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

На чипах, над которыми я работаюЯ удостоверяюсь, что недокументированные (для клиента), но не неиспользованные биты помечены каким-либо образом, чтобы отличаться от других неиспользованных битов.Мы обычно помечаем неиспользуемые / зарезервированные биты как ноль, и эти другие биты получают имя, и a должен записывать это значение.Не все поставщики делают это.

Суть в том, что нет никакой гарантии, допустим, что во всех документациях и примерах программ есть ошибки, и вам нужно прорваться, чтобы выяснить, что правильно, а что нет.Независимо от того, по какому пути вы пойдете (чтение, изменение, запись, запись нулей и т. Д.), Время от времени вы будете ошибаться, и вам придется заново выполнять код, чтобы соответствовать изменениям оборудования.Я настоятельно рекомендую, чтобы, если у поставщика был какой-либо идентификатор чипа, чтобы ваше программное обеспечение считывало этот идентификатор, и если это идентификатор, с которым вы не тестировали свой код, объявляйте ошибку и не программируйте эту часть.В производственном тестировании задолго до того, как покупатель увидит продукт, будет обнаружено изменение детали, и программное обеспечение будет вовлечено в понимание причины замены детали, поскольку разрешение, являющееся альтернативной деталью, несовместимо и отклонено, или изменения программного обеспечения и т. Д.

0 голосов
/ 13 марта 2012

Зарезервировано в большинстве случаев означает, что они не используются в этом чипе, но они могут использоваться на функциональных устройствах (другая линейка продуктов). (Большинство производителей микросхем производят один периферийный драйвер и используют его для всех имеющихся микросхем. Таким образом, в основном это копирование прошлой работы и меньше изменений для ошибок) В большинстве случаев не имеет значения, записываете ли вы зарезервированные биты в периферийные регистры это потому, что к нему не приложена логика.

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

...