Разве второй параметр в ioremap() дает размер в количестве бит для регистра Linux?

Мой микроконтроллер NEC имеет 8-битный регистр контроллера таймера. Нужно ли передавать 8 во втором параметре ioremap?

После прочтения спецификации я узнал следующее свойство.

Address    |Function Register Name   |Symbol   |R/W Manipulatable Bits   |Default Val

FFFFF590H  |TMP0 control register 0  |TP0CTL0  |R/W √ √                  |00H

Итак, я считаю, что физический адрес, по которому отображается регистр таймера TP0CTL0, равен 0xFFFFF590.

Теперь я переназначаю этот регистр следующим образом. Прочитав подробное описание, я узнал, что регистр имеет 8-битный размер.

В спецификации сказано: "Регистр TPnCTL0 - это 8-битный регистр, который управляет работой TMPn".

Это правильно? Я использую базовый адрес как 0xFFFFF590, а размер этого регистра составляет 8 бит. Таким образом, я назвал размер 8-битным. Это правильно? Является ли второй параметр ioremap_nocache размером с бит? Является ли мой следующий API правильным? Правильно ли я использовал параметры в функции - ioremap_nocache.

void * tp0ctl0 = ioremap_nocache (0xFFFFF590, 8);

Далее я делаю следующее -

unsigned int val =  ioread8(tp0ctl0);
val = 2;
iowrite8(val, tp0ctl0);

Пожалуйста, поправьте меня здесь. Пожалуйста, дайте мне знать, правильно ли я использую API или нет, основываясь на информации о микроконтроллере.

1 ответ

Решение

Размер, заданный для ioremap_*, указан в байтах, а не в битах. Цель этой функции - сопоставить физическое адресное пространство с виртуальным адресом ядра, поэтому все, что больше нуля и меньше или равно размеру системной страницы, будет эквивалентно.

Учитывая информацию, которую вы предоставили выше, ioremap_nocache(0xFFFFF590, 1) было бы на самом деле правильно. Но эффект "1" против "8" будет одинаковым, поскольку размер системной страницы (без сомнения) больше, чем у обоих.

Другие вопросы по тегам