Периферия
Как и обещал расскажу про ps/2 клавиатуру.
У меня эмулятор клавиатуры вынесен на отдельную плату. На этой же плате реализован бипер и музыкальный сопроцессор. Вся эта периферия реализована на CPLD Altera MAX2, а опрос клавиатуры производит микроконтроллер. В моём случае это stm32f103c8. Знаю, что это мягко говоря, излишне, просто он у меня был. Забегая наперёд, скажу, что достаточно микроконтроллера с 8-10 свободными ножками и одним внешним пребыванием, например attiny2313 и старше.
Порт сопроцессора и бипер просто описаны на языке verilog, как комбинационная логика, то есть я просто описал схему обычного спектрума. А вот клавиатура немножко по-сложнее.
Она состоит из дух частей: микроконтроллёра, который опрашивает клавиатуру и эмулятора матрицы клавиатуры, которая представляет из себя 40-разрядный регистр.
Сразу скажу, со стороны мк всё сделано максимально просто, никакой обратной связи, только опрос кнопок. При каждом тактовом импульсе клавиатуры, срабатывает внешнее прерывание мк, в котором последовательно собирается байт скан кода. А в основном цикле программы идёт опрос двух флагов: флаг готовности скан кода, который устанавливается, когда собраны все восемь его бит, и флаг кода отжатия, который устанавливается при получении кода отжатия клавиш (f0). Далее, если флаг готовности установлен, то на выходном порте мк формируется номер клавиши в двоичном коде, проверяется флаг отжатия, если установлен, то на ножке данных устанавливается единица, если нет, то нуль. Затем формируется стробирующий импульс. И так далее по кругу.
Со стороны cpld по спадающему фронту стробирующего импульса просто идёт запись нуля или единицы в соответствующий бит 40-разрядного регистра, который с помощью логической развязки соединён с шиной адреса и данных процессора.
Выглядит это всё вот так (извиняюсь за качество снимка):
Также на этой плате выведен порт кемпстон джойстика, тоже сделан на ПЛИС. Пока его не тестировал. В планах сделать его на стрелках клавиатуры.
Кто-то скажет, зачем такие сложности? Всё просто - никаких waito-в на любой частоте. Хоть на ста мегагерцах. МК будет неспешно собирать скан коды, а ПЛИС имитировать матрицу спектрумовской клавиатуры, то есть, просто замыкание и размыкание соответствующих линий процессора.
P.S.Если кому-то будет интересно, могу поделиться схемами, платами и прошивками. Могу даже переписать прошивка для avr микроконтроллера. Правда, схему рисовал с головы и плата двухсторонняя. Не каждый возьмется за её изготовление.
Комментарии
Трекбэков
Всего трекбэков 0
Ссылка трекбэка: