Сообщение от
msd888
Все-таки дело 100% в прошивке 3+. Макс, надо просить Камиля начать работу над 4.0. Или нужна информация о таймингах, необходимых для ее работы - будем править плату тогда.
Есть и ложка дегтя. В СР/М контроллер постоянно в консоль кидает какой-то мусор типа : ^C $$$ ^B bbb ^B ^C ^B ^B 3#. Что это?
Конечно дело в прошивках. Там применены разные варианты алгоритмов считывания скан-кодов. И 4.0 версию писать не надо, ибо Камиль модификацию прошивки с прежним вариантом опроса сделал по моей просьбе еще в январе. Я же упоминал о ней - это v3.1m. И там же лежит текстовое описание сути проблемы. Цитирую оттуда полностью:
Код:
Особенность версии 3.1
======================
В существующей прошивке скан-код клавиатуры
выдается на шину Z80 командой movx @DPTR,A
Длительность сигнала /VWR при тактовой частоте
11.0592 МГц в режиме выдачи по команде movx = 0.5 мксек.
В это время данные из порта P0 микроконтроллера передаются
через регистр на шину данных Z80. При слишком коротком
импульсе (при высокой тактовой частоте МК) этого времени
недостаточно для удержания данных на шине Z80, что
приводит к неустойчивому считыванию скан-кода клавиатуры.
Обьясняется это тем, что с момента снятия /WAIT
процессора, до завершения цикла чтения порта клавиатуры
при тактовой частоте процессора Z80 = 3.5 MHz проходит
от 0.4 до 0.7 мксек (при независимом тактировании Z80
и МК). Этого явно не достаточно для надежного чтения
скан-кода выдаваемого МК на шину данных Z80.
Если управлять битом /VWR на прямую, длительность
при той-же тактовой получилась 1.2 мксек. Этого
вполне достаточно для устойчивой работы системы.
Тоесть сейчас сделано так:
if en_movx
movx @DPTR,A ; Снять /WAIT
else
mov P0,A ; Выдать код клавиатуры
clr VWR ;имитация /WR
setb VWR
endif
В исходнике предусмотрено отключение этой модификации
флагом en_movx
en_movx equ 1 ;1 - разрешена movx
;0 - прямое управление
В архиве вложены результаты компиляции программы
под разные тактовые частоты и с разным значением
флага en_movx.
at31_07.hex - F=7.00 MHz, en_movx = 0
at31_07m.hex - F=7.00 MHz, en_movx = 1
at31_11.hex - F=11.0592 MHz, en_movx = 0
at31_11m.hex - F=11.0592 MHz, en_movx = 1
caro
29/01/2018
В общем, немодифицированная 3.х прошивка и модифицированная v3.1m - тут, причем с исходниками: http://atmturbo.nedopc.com/download/...s/atm_at3x.zip
Осталось только разобраться с мусором в CP/M. Тут я ответить на вопрос, что это такое, не могу, ибо такого быть не должно.