OSDev

для всех
Текущее время: 28 мар 2024, 19:47

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: PS/2 контроллер клавиатуры
СообщениеДобавлено: 07 июл 2017, 10:04 

Зарегистрирован: 12 апр 2017, 10:25
Сообщения: 25
Смотрю код драйвера linux i8042.c. Там есть функция ожидания для чтения и другая для записи, которые в цикле читают порт 64h, анализируют биты OBF и IBF соответственно. В этих функциях реализован таймаут, если не ошибаюсь 500 мс. Таймаут реализован на функции udelay (тупая задержка на основе цикла).
На реальном железе, у меня время ожидания ответа контроллера максимальное получилось 24-25 мс (посылка команды AA self-test). Таймаут сделал ограничением количества чтений порта. Одно чтение порта 64h 1,6 мкс. Вообщем 50 мс таймаут.
У кого есть какие соображения насчёт времени таймаута?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PS/2 контроллер клавиатуры
СообщениеДобавлено: 08 июл 2017, 00:32 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Да, примерно так. А лучше задействовать таймер, т.к. процессоры, чипсеты да ещё виртуалки сильно разные по скорости.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PS/2 контроллер клавиатуры
СообщениеДобавлено: 08 июл 2017, 15:44 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Мкс путаете с мс.
Контролёр интерфейса путаете с контролёром клавиатуры.
Цитата:
Одно чтение порта 64h 1,6 мкс.

Одно чтение с ISA(LPC) составляет 0.125 мкс. Эта задержка обусловленна опорной частотой 8МГц. И её можно наблюдать при чтение со свободного адресса.
Посмотрел по интеловскому даташитам чтения с порта 64h составляет от 1,2 до 9,8 мкс. У других фирм может и быстрее работать.
http://radio-hobby.org/uploads/datashee ... 8042ah.pdf

Что касается паузы в 500 мкс. То это время чтения одного байта с контролёра клавиатуры. Один байт кодируется 11 бодами. Стартовый бод, затем 8 бод данных, бод чётности, и стоповый. Итого 11 бод. С паузой в 50 мкс. 50*11=550. мкс.
Это для старых контролёров 8042 у которых входной и выходной буфер был общим. Драйверу приходилось ждать пока он получит байт от клавиатуры. Потом этот аппоратный косяк 8042 исправели.

А AA-Self-test это тест контролёра интерфейса 8042, а не контролёра клавиатуры поэтому он отрабатывает быстрее.

Кстати ROM 8042 контролёра.
http://www.halicery.com/8042/8042_1503033.TXT
Можно посмотреть, что делает код самотестирования. И почему ответ на чтение длится несколько мкс.

А эмулятору вообще времена побоку. Хотя борщ вроде что-то симулирует.

По поводу пустого цикла. Если хочешь можешь сделать параллельное исполнение через прерывание таймера.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PS/2 контроллер клавиатуры
СообщениеДобавлено: 10 июл 2017, 08:58 

Зарегистрирован: 12 апр 2017, 10:25
Сообщения: 25
В linux задержка 500 мс. Таймаут для ps/2 устройства. Нет отдельного таймаута для контроллера.
Сам я хочу сделать отдельную задержку для контроллера 50 мс.
За документацию спасибо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PS/2 контроллер клавиатуры
СообщениеДобавлено: 02 сен 2017, 19:14 

Зарегистрирован: 12 апр 2017, 10:25
Сообщения: 25
Вообщем не всё так просто с этим контроллером. Написал небольшую тестовую программу. Замысел был проверить работу контроллера при получении и одновременной отправке данных. Программа загружает в контроллер байт конфигурации 04h (запрет прерываний от клавиатуры и мыши, отключение трансляции скан кодов клавиатуры). Ну и в цикле читает порт 64h, если есть данные, читает их из порта 60h и выводит на экран данные и номер порта (бит AUX) статуса. В определённый момент программа отправляет команду контроллеру d4h, а затем команду мыши. В это же самое время приходят скан коды от клавиатуры и байты от мыши. От клавиатуры и мыши идут по три байта.
В общем в виртуалке vmware и на двух компьютерах всё работает. Но на другом компьютере иногда после отправки команды мыши, следующий скан код от клавиатуры приходит как будто от мыши (бит AUX равен 1). Что не есть хорошо.
Видимо такая особенность контроллера.
Думаю нужно отключать порт клавиатуры, перед отправкой данных мыши. После отправки данных, включать обратно. Аналогично при отправке данных клавиатуре. Как это будет работать, ещё не проверял.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PS/2 контроллер клавиатуры
СообщениеДобавлено: 06 сен 2017, 22:55 

Зарегистрирован: 12 апр 2017, 10:25
Сообщения: 25
Цитата:
Думаю нужно отключать порт клавиатуры, перед отправкой данных мыши. После отправки данных, включать обратно.

Проверил, глюки исчезли.
Цитата:
Аналогично при отправке данных клавиатуре.

Ещё не проверял.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PS/2 контроллер клавиатуры
СообщениеДобавлено: 13 сен 2017, 23:08 

Зарегистрирован: 12 апр 2017, 10:25
Сообщения: 25
pavia писал(а):
Кстати ROM 8042 контролёра.
http://www.halicery.com/8042/8042_1503033.TXT

Посмотрел код, многие вопросы прояснились.
Только контроллер для AT, не для PS/2. Но сам принцип работы контроллера понятен - опрос в цикле битов IBF и OBF. И соответственно либо исполнение команды/отправка данных клавиатуре, либо чтение байта из клавиатуры (в случае готовности клавиатуры к отправке скан-кодов).


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB