2016-10-27 10 views
0

У меня возник вопрос о новом Datasheet, который у меня есть для нового SoC. Скажем так базовый адрес 0x2014_0000GPIO Data Регистрация описания понимание

Вот страница

enter image description here

Так что же это значит с 0x3fC и 0x200?

Означает ли это, что если я читаю регистр 0x2014_0000, и он дает мне 0x3fc, чем я могу выполнять операции записи или чтения в соответствии с регистром направления для всех связанных GPIO. И если он читает 0x0, чем я ничего не могу сделать с данными (без чтения или записи)?

Всякий раз, когда я должен был прочитать данные из регистра я только должен был прочитать соответствующий бит, но это один путает меня @ _ @

Может быть кто-то может объяснить мне

Thx

ответ

1

Мое чтение this data sheet состоит в том, что PADDR является подмножеством адресной шины, а биты 9:2 маскируют операцию GPIO_DATA бит 7:0. Он говорит:

Так что независимые программные драйвера могут устанавливать свои GPIO биты без затрагивающей любых других контактов в одной операции записи, шина адреса используется в качестве маски на операции чтения/записи. Регистр данных эффективно охватывает 256 адресов в адресном пространстве. Используются восемь адресных линий : PADDR [9: 2].

Это означает, что вы можете написать GPIO_DATA в любой из 256 адресов, и только те биты, которые соответствуют с адресом будут записаны, и в самом деле таблица, которую показывают говорит, что GPIO_DATA отображается на смещениях 0x000 - 0x3FC так 256 местоположений находятся на этапе 4 (контрольные биты, полученные из адресной шины, сдвинуты дважды, чтобы сопоставить бит порта).

Так на ваш вопрос "что это значит с 0x3fC и 0x200?" Это описано на изображении, которое вы показываете: запись данных в эти смещения адреса повлияет на биты порта, упомянутые в тексте. В первом случае все они, во втором, только один из них.

Address  0x20140200 

PADDR  9  0 
      10000000xx 

GPIO_DATA 7  0 
      Nxxxxxxx 

Таким образом, только значение в бит 7 записывается на выход GPIO, остальные выходные биты GPIO сохраняются.

+0

Aha ok. Теперь я понимаю. Но я не знаю, почему это сделано так. Это немного запутанно. На других MCU вы делаете что-то вроде «PORTB = 1 << PIN7;» здесь я должен писать разные значения для разных адресов. В чем преимущество этого? – user3000289

+0

Это делается для того, чтобы независимые процессы, совместно использующие порт GPIO, не обращали внимания ни на одно использование порта. Альтернативой было бы прочитать текущее состояние, замаскировать биты не «мои» (блокируя использование другими процессами), а затем писать, тогда как это позволяет делать это с помощью одной записи. –

+0

Черт бы тебя побрал :) Да, это имеет смысл. благодаря – user3000289