Разве второй параметр в 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" будет одинаковым, поскольку размер системной страницы (без сомнения) больше, чем у обоих.