Рекомендую не включать в архив папку DB - размер архива уменьшится на порядок.Цитата:
Сообщение от ewgeny7
Вид для печати
Рекомендую не включать в архив папку DB - размер архива уменьшится на порядок.Цитата:
Сообщение от ewgeny7
1. Думаю, не следует все порты лепить по адресам друг за другом. Надо как-то делить на функциональные группы и между ними делать запас адресов для будущих расширений.
2. Как и для USART, для KBRD тоже необходимо прерывание, и так же бит для его вкл./выкл.. Если есть прерывание, то порт со скан-кодом можно не обнулять. Там будет код последней нажатой клавиши. И пусть уже программа сама ставит флаги и определяет что там было нажато.
3. Может быть все прерывания свести в один порт, где D7=EI, т.е. разрешает/запрещает все прерывания контроллера? Другие биты этого порта включают всё по отдельности.
4. НЕ совсем понял: Int50 у нас чем-либо отключается (кроме команды EI), или долбит сразу после подачи питания? Хреново, если это прерывание не имеет наружного вывода и подсоединено к кадровой внутри ПЛИС на постоянно. Это не есть хорошо, раз это прерывание не возможно задействовать для других целей! Может быть сделать вывод, а импульс кадровой подключать/отключать через битик в каком-то порту?
Как скажете. Куда скажете- туда и приколочу.
А каков глубинный смысл этих сканкодов вообще? Особенно учитывая, что читаются правильно фактически только однобайтные коды, для двух-трехбайтных видим только последний.
Приделаем и прерывание, приоритет вероятно лучше разместить между USART и INT50 (у USART по понятным причинам самый высокий).
Ответ в пункте 1.
Отключается битом Д6 порта FB. Это стандарт.
По умолчанию (сбросу) отключено.
Посмотрел по-диагонали. В табличке в документе все однобайтовые коды кроме кнопки F7 - семибитные.
Все двухбайтные коды = <префикс E0>+семибитный код.
Соответственно, просматривается простейшее решение:
- если пришел байт не равный E0 (однобайтный сканкод), передаем его на F766 (или другой порт какой вы с pvlad решите) без изменений.
- если пришел байт E0, то его не передаем, а следующий за ним передаем на F766 с битом D7 установленным в "1" (семибитный код + 80h)
Получим в одном байте покрытие для практически всех сканкодов.
Естесственно семибитные. Установленный старший бит означает отпускание соответствующей клавиши (если конечно это не E0 и не FA).
---------- Post added at 21:32 ---------- Previous post was at 21:30 ----------
Не вся. С таким подходом ты не различишь обычные стрелки и соответствующие клавиши на нумпаде.
Ну да, кроме ScrollLock, CapsLock, NumLock. У них коды двухбайтные, а последний - всегда FA.