![]() |
|
|
![]()
|
|
| ABCD |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 28.3.2007 Репутация: нет Всего: нет |
Здравствуйте уважаемые программисты!
Имеется самодельное микропроцессорное устройство. К нему подключена IBM совместимая клавиатура с использованием клавиатурного контроллера i8042. Клавиатура прекрасно передаёт скан-коды в систему, но возникла небольшая проблемка. При исследовании стандартных команд управления клавиатурой (описанных в популярной литературе, популярными авторами) оказалось что из всех команд работает только команда сброса и самотестирования клавиатуры -FFh. Такая интересная команда как EDh – управление светодиодными индикаторами работает только на двух из семи проверенных мной клавиатур разных производителей. Все клавиатуры исправные. Что ли у разных клавиатур разные команды управления? Может кто сталкивался с такой проблемой, помогите пожалуйста разобраться. Подскажите, где найти систему команд управления клавиатурой. С уважением Михаил |
|||
|
||||
| Dude03 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.4.2006 Репутация: нет Всего: 6 |
Проблема в том, что контроллер клавы медленная штука. И чтобы дождатся ответа, надо подождать чуток=).
Например так: jmp $+2 jmp $+2 вроде хватало всегда. Может причина и не в этом=) Это сообщение отредактировал(а) Dude03 - 29.3.2007, 23:32 |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 1 Всего: 207 |
у меня вот была проблема: IRQ1 генерировался по 4 раза на каждое нажатие/отпускание клавиши
дело в том, что контроллер клавиатуры медленнее чем ядро процессора работает и пока до него доходил EOI (что дескать обработка прерывания завершилась) он (контроллер) еще 3 раза успевал послать сигнал по IRQ1 даже jmp, который предложил Dude03 может не спасти мне пришлось цикл делать, чтобы процессор затормозить
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Dude03 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.4.2006 Репутация: нет Всего: 6 |
||||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 1 Всего: 207 |
loop - 4 микрооперации (декодирование за такт не всегда получится даже при наличие свободного декодера) dec, jnz - по 1-ой микрооперации -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| CALL |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 29.3.2007 Репутация: нет Всего: нет |
Расскажу немного как я пытаюсь программно управлять клавиатурой.
Скажем мне необходимо в определённый момент времени Включить один из тёх индикаторов на клавиатуре, например CapsLock Пишу следующую последовательность команд: KBD1: IN AL,61h ;В моём устройстве регистр состояния клавиатуры ;находится по адресу 61h (не как у IBM AT 64h), так проще ;было сделать дешифратор адреса. AND AL,02h ;Проверяем состояние входного буфера если ещё JNZ KBD1 ;не освободился , ждём и проверяем готовность. MOV AL,0EDh ;Если готов к принятию следующей команды OUT 60h,AL ;отправляем её во входной буфер контроллера 8042 KBD2: IN AL,61h ;Проверяю разряд 1, если 0 значит контроллер 8042 AND AL,02h ;заглотил отправленную команду и ели она предназначалась ;клавиатуре, переслал её по назначению и готов к принятию ;следующей команды или байта данных. JNZ KBD2 ;Если ещё не готов, ждём и проверяем готовность. MOV AL,4h ;Если готов к принятию второго байта команды OUT 60h,AL ;отправляем его так же во входной буфер 8042, ;а он перешлёт его в клавиатуру. Всё вроде правильно, но это работает не на всех клавиатурах. |
|||
|
||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |