Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Программирование под Unix/Linux > Запись в порт |
Автор: hente 1.4.2009, 10:56 | ||
Здраствуйте![]()
описание: Считываю байт из регистра с данным адресом потом выставляю необходимый бит, и опять записываю но вот после записи считываю байт а он без изменений как будто строки 20 и небыло перед этим резервирую эти адреса портов ф-ей reque_regoin() в чеи может быть проблемв? |
Автор: xvr 1.4.2009, 13:16 |
А что за девайс там висит? Может он так и должен реагировать? |
Автор: hente 1.4.2009, 13:39 |
UART |
Автор: xvr 1.4.2009, 14:29 |
Там висит Line Control регистр. Должен писаться и читаться. Можно глянуть на код? |
Автор: MAKCim 1.4.2009, 16:37 |
мож задержку (udelay из ядра, yield из юзер-спейс) перед повторным считыванием сделать? |
Автор: hente 2.4.2009, 04:57 | ||
ядро 2.6.21.5 вот исходник ![]()
|
Автор: hente 2.4.2009, 05:22 |
к стате вчера пришла идея: аможет другие модули зарезервировали эти регстры...так вот перекомпилировал ядро отключив (поставил "модуль") все что связано с последовательным портом как раз после этого и начало выдавать "FF", а до того при чтении выдавало "00"...вот правильно ли я мыслю? |
Автор: MAKCim 2.4.2009, 08:31 |
hente, насколько я вижу, ты записываешь 0 в порт 0x02fb почему при чтении ты должен получить FF? это логика устройства? Добавлено через 3 минуты и 21 секунду посмотри спецификацию на чипсет обычно есть два диапазона адресов I/O: настриваемый и legacy legacy диапазон распределен между legacy устройствами и статичен настриваемый позволяет динамически резервировать для PCI устройств пространство адресов I/O |
Автор: hente 2.4.2009, 10:38 |
в том тот и проблема почему когда я туда записываю "0"(любой байт) получаю "FF"...??????? 0x02fb-как я понял эт регист управления COM2 портом (0x2f8) там по определенным битам включается прерывания на IRQ 3, вообще проблема в том что приведенный выше код не отлавливает прерывания от COM2 (ну или UART) зато если меняю в request_irq() первый параметр(номер прерывания ) то клавиатурные прерывания без проблем ловятся. Устройство подключено и работает!...под другой ОС (WIN) гружусь все в норме... очень большая просьба к помощи, от людей которые с этим сталкивалися. |
Автор: xvr 2.4.2009, 14:10 |
Похоже нету там у тебя порта ![]() |
Автор: andrew_121 2.4.2009, 18:04 |
В старые добрые времена кодил под DOS драйвер звуковухи. Так вот. Там, для инициализации нужно было записать значение, считать, произвести битовую операцию, и обратно записать. Так вот что было не так как писалось в даташите на микруху. При попытке считать значение, оно считывалось таким же. Исправить проблему получилось только введением цикла в момент считывания, который продолжался до тех пор, пока считываемое значение не изменилось. И все, вуаля! |