Важная информация

User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 17

Тема: Быстродействующая софтовая обработка протокола клавы PS/2 на процессоре ВМ2.

  1. #1
    Moderator Аватар для MM
    Регистрация
    20.04.2013
    Адрес
    г. Павловский Посад
    Сообщений
    4,133
    Спасибо Благодарностей отдано 
    470
    Спасибо Благодарностей получено 
    519
    Поблагодарили
    412 сообщений
    Mentioned
    42 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Быстродействующая софтовая обработка протокола клавы PS/2 на процессоре ВМ2.

    Уважаемые господа, предлагаю по возможности привести примеры софтовой обработки протокола PS/2 клавы в составе М-ЭВМ на DEC - процессоре. Для конкретизации - предположим, имеется регистр 177632, в котором бит со значением 020000 - тактовый сигнал с клавы, бит
    со значением 010000 - данные с клавы. Соответственно, при отсуствии сигнала в указанных битах содержится программное значение "0", а при приходе сигнала - "1". Другие биты регистра заняты др. задачами. Частота данных ( тактового сигнала с клавы ) - порядка 40 кгц, быстродействие процессора - МС1201.02. Можно использовать все регисты и всё ОЗУ ( десятки килобайт ). Привязка к какой-либо ОС - ненужна. Можно еще и прерывание "100" вектора задействовать.
    Блог : http://collectingrd.kxk.ru/ . В ЛС прошу не писать, все сообщения [email protected]

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Member
    Регистрация
    25.11.2015
    Адрес
    г. Москва
    Сообщений
    192
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    14 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если верить википедиям, что КР1801ВМ1 выполнял 500к операций регистр-регистр, то обработку одного бита нужно осуществить прочитав/записав не более 10-12 слов из памяти, включая операции чтения кода программы. При этом чтобы не потерять битики нужно отслеживать оба состояния тактового сигнала. Возможное решение: повесить тактовый сигнал на 15 или 7 бит и проверять командой TST/TSTB, после чего делать условный переход, ну а данные повесить на 0 или 7 бит, считывать командой MOVB, после чего командой ROR или ROL сдвигать в старшую часть регистра накопителя. Если 177632 предварительно положить в регистр, то на каждый шаг потребуется прочитать два слова программы и одно слово/байт из регистра, то есть в 10-12 слов мы укладываемся. Единственный сложный момент заключается в том, что пока мы входим в прерывание, стартовый бит скорее всего уже пролетит и времени на сохранение регистров наверно уже не останется. Тут возможен вариант, ничего не сохраняя, просто читать регистр() и складывать в стек, чтобы по времени полностью перекрыть передачу байта, ну а потом, сохранив состояние программы, вытаскивать и разбираться где какой бит. Если какие-то обработчики запрещают прерывания, то чтобы байты не пролетали мимо, есть вариант удерживать тактовый сигнал в низком уровне, как будто мы собираемся что-то начать передавать, а в тот момент когда мы готовы принять байт отпускать его на некоторое время и следить не начнёт ли клавиатура передачу, но делать это нужно будет достаточно часто, чтобы у клавиатуры буфер не переполнился.

    add: посмотрел не про тот процессор, учитывая что ВМ2 раза в два шустрее, то задача несколько упрощается.
    Последний раз редактировалось blackmirror; 10.06.2016 в 13:11.

  4. #3
    Master Аватар для svinka
    Регистрация
    18.02.2016
    Адрес
    г. Москва
    Сообщений
    618
    Спасибо Благодарностей отдано 
    33
    Спасибо Благодарностей получено 
    46
    Поблагодарили
    40 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А почему программно, а не аппаратно?
    Контроллер клавиатуры Интел 8042 и его клоны, наверное, дают в подарок на радиорынке. Работает хорошо и легко вешается на МПИ.
    К тому же сразу будет контроллер PS/2 мыши. Протокол реализует двунаправленный. Можно лампочками поморгать.
    Если аппаратно самому, то вроде должен заработать трехрублевый КР580ВВ51 в асинхронном режиме (8бит данных+четнечет+1 стоп) с внешним клоком прям с PS/2 разъема (тока клок инвертировать надо).
    И на МПИ сядет. И обвязки почти не надо (кроме инвертора и пары резюков). Ног не 40, а 28 всего-то.
    Другие подходящие контроллеры асинхронных последовательных портов подобрать не удалось, потому что надо, чтоб умел работать с внешним клоком x1, а они все x16 хотят...
    Последний раз редактировалось svinka; 14.06.2016 в 02:51.

  5. #4
    Moderator Аватар для MM
    Регистрация
    20.04.2013
    Адрес
    г. Павловский Посад
    Сообщений
    4,133
    Спасибо Благодарностей отдано 
    470
    Спасибо Благодарностей получено 
    519
    Поблагодарили
    412 сообщений
    Mentioned
    42 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    О существовании 8042 я в курсе не первый десяток лет.
    Дело в некотрой недоставаемости годной i8042 / W83C42 в Москве по вменяемым ценам в к-ве от 5 шт. одинаковых.
    В Митино единственный продавец этих БИС не в курсе о существовании цен ниже 500 руб, да и то они у него - в общем, из мусорки...
    Блог : http://collectingrd.kxk.ru/ . В ЛС прошу не писать, все сообщения [email protected]

  6. #5
    Master Аватар для svinka
    Регистрация
    18.02.2016
    Адрес
    г. Москва
    Сообщений
    618
    Спасибо Благодарностей отдано 
    33
    Спасибо Благодарностей получено 
    46
    Поблагодарили
    40 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А какое время входа в обработчик прерывания на реально работающей вм2? Если по клоку с PS/2 вызывался бы наш обработчик, где бы мы ногой подергали и на осциллографе увидели, как с запасом по времени. А если до следующего клока время есть - то мы очередной бит задвинем и выйдем из прерывания. В прерывание нас занесет 1+8+1+1 раз.
    11 состояний у автомата 0(старт)-1-2-3-4-5-6-7-8-9(четнечет)-10(стоп). Нужна переменная где хранится номер состояния.
    И разобраться с запретом-разрешением прерываний внутри нашего обработчика. Прерываний на ножках процессора вроде несколько, а программного управления контроллером нету.
    Если с прерываниями гибкости нету, то по-первому клоку нас занесет в наш обработчик где мы программным опросом отследим изменения клока (10раз) и каждый раз будем делать действие, соответствующее номеру клока в протоколе - то ли бит с шины данных считывать и сдвигать рез-тат, то ли паритет проверять или сохранять результат. При программном опросе с условным переходом нужно не зависнуть...

    Но лучше сначала посмотреть на осциллографе и оценить времянку.
    Последний раз редактировалось svinka; 14.06.2016 в 04:47.

  7. #6
    Member
    Регистрация
    25.11.2015
    Адрес
    г. Москва
    Сообщений
    192
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    14 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    svinka, осциллограф тут особо не нужен, за 1 бит (при скорости 40 кГц) процессор(10 МГц) успеет выполнить примерно 25 операций выборки/чтения/записи. 2 операции уйдёт на сохранение счётчика команд и флагов, в конце одна уйдёт на выборку команды возврата и 2 на восстановление счётчика и флагов, итого получается 5. Еще 5 операций нужно зарезервировать на завершение выполнения команды основной программы, потому что возможна команда, требующая 3 операции выборки, 2 чтения и 1 запись. В итоге остаётся 15 операций на полезную работу. Минимум 1 операция это команда перехода на обработку нужного бита, 4 операции понадобятся на правку этой команды, остаётся 10 операций. Всё что мы в данном случае успеем, это прочитать регистр с очередным битом и положить его в память, а собирать полученный байт придётся в конце. Для основной программы мы выигрываем порядка 10 операций на каждый бит, которые потом потеряем на сдвиге байта, чтении бита из памяти, наложении маски и добавлении к байту. В общем, одно прерывание, собирающее полученный байт сразу, ничуть не хуже, чем прерывание на каждый бит.

  8. #7
    Master Аватар для svinka
    Регистрация
    18.02.2016
    Адрес
    г. Москва
    Сообщений
    618
    Спасибо Благодарностей отдано 
    33
    Спасибо Благодарностей получено 
    46
    Поблагодарили
    40 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А Я НАШЕЛ ИНФУ ЧТО СКОРОСТЬ ТАМ ДОЛЖНА БЫТЬ ОТ 10 ДО 16КГЦ

  9. #8
    Member
    Регистрация
    25.11.2015
    Адрес
    г. Москва
    Сообщений
    192
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    14 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    svinka, в первом сообщении автор заявляет 40кгц, зачем ему столько не ясно, возможно в современных компах порт ускорили, в русском инете вообще упоминаются 80 и 300кгц. Задачу сильно может упростить промежуточный контроллер, если за такую идею не закидают помидорами. Даже при сохранении последовательного обмена, можно снизить нагрузку на ВМ2, если принимать от него синхронизацию. То есть контроллер складывает байты в буфер, выставляет запрос прерывания, ВМ2 выдаёт синхроимпульсы и считывает байт, а контроллер запрос прерывания снимает.

  10. #9
    Moderator Аватар для MM
    Регистрация
    20.04.2013
    Адрес
    г. Павловский Посад
    Сообщений
    4,133
    Спасибо Благодарностей отдано 
    470
    Спасибо Благодарностей получено 
    519
    Поблагодарили
    412 сообщений
    Mentioned
    42 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от blackmirror Посмотреть сообщение
    svinka, в первом сообщении автор заявляет 40кгц, зачем ему столько не ясно, возможно в современных компах порт ускорили, в русском инете вообще упоминаются 80 и 300кгц. ...
    Вот это да !
    Я то смотрю - какие там 30 кгц ! Там при самом скоростном дампе состояния порта проходит 3-4 слова и биты меняют значение !
    Кстати, намерил тут, что с условием до-и-после ветвления процессор ВМ2 имеет быстродействие в районе ВМ1 ( подозревается 250 т. ком в 1 сек ) - более точно напишу на днях. А лимон натягивает за счет конвеера - когда команды без ветвления в цепочке.
    Методика дампа :
    002000 : 012700 003000 012701 001000 012702 177632 011220 077102
    Блог : http://collectingrd.kxk.ru/ . В ЛС прошу не писать, все сообщения [email protected]

  11. #10
    Master Аватар для svinka
    Регистрация
    18.02.2016
    Адрес
    г. Москва
    Сообщений
    618
    Спасибо Благодарностей отдано 
    33
    Спасибо Благодарностей получено 
    46
    Поблагодарили
    40 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от blackmirror Посмотреть сообщение
    svinka, в первом сообщении автор заявляет 40кгц, зачем ему столько не ясно
    Автору хватило бы и 10

Страница 1 из 2 12 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Аюша-80 - компьютер на процессоре 580ВМ80
    от rw6hrm в разделе Разработка электроники
    Ответов: 0
    Последнее: 29.04.2016, 16:15
  2. Обработка звука на iBook
    от megabyte в разделе Apple
    Ответов: 3
    Последнее: 01.01.2011, 22:39

Ваши права

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