Может быть, кто-то конфигурировал порты ввода/вывода?
В инструкциях от nuvoton есть примеры, которые используют функции inpw outpw.
Эта команда должна сконфигурировать порт С
outpw(0xB000000C, inpw(0xB000000C) & 0xFFFFFFF3);
Но при загрузке модуля в систему он говорит, что не знает таких символов.
Если использовать библиотеку asm/io.h и функции inw() outw(), или писать на этот адрес через указатель, то:
unable to handle request at virtual address b000000c
Кто-нибудь уже делал что-то подобное? Или, может быть, кто-то знает другой способ сконфигурировать порты?
я бы посоветовал пробовать не через INPW/OUTPW работать, а почитать местный ФАК и освоить работу через MMAP - там есть отличный пример
на мой взгляд, так более удобно начинать работу с регистрами и управлением пинами
я немного работал в этом направление, правда писал софтинки прямо на платах (9260 и NUC950) - никаких проблем не возникало
технология компиляции кросскомпиллером на старшем брате и перенос бинарника на плату на форуме есть
update вот для 9260, вполне работает на nuc950
[url=http://wiki.starterkit.ru/чтение-запись_физических_адресов_в_linux]линк на wiki[/url]
Попробовал сделать как в предложенном примере. Даёт работать только с пользовательской памятью. Для адресов, указанных как регистры для настройки портов, выдаёт ошибку. Точно не надо использовать эти функции внутри модуля ядра?
можно еще вот так управлять пинами из драйвера - на мой взгляд достаточно безопасно и наглядно, но немного тормозно..
это куски из действующего драйвера, лишние хидеры лучше убрать
инициализируем нужные пины, соответствие смотрим в DS:
и дрыгаем ими :)
или считываем состояние на входе пина
перед попыткой занятия нужного пина желательно проанализировать "в какой группе он состоит" "не отвалится ли поддержка периферии при использование пина"
Спасибо, функции работают. :) Ещё вопрос, хотя, он. наверно, к теме не относиться. Какую функцию использовать для задержки в милисекундах? (до нескольких секунд) и в какой библиотеке?