eDroid: Приступаем к интерфейсам
Медленно, но верно роботостроительный план воплощается в жизнь. Прежде чем писать прошивку и разводить плату — нужно определиться, какие «ноги» контроллера за что будут отвечать. Что же, приступим.
LPT-порт
Что такое LPT-порт — знают все. Для тех кто забыл — напомним.
Итак, LPT — это такой большой разъем сзади компьютера. Раньше к нему подключался принтер, теперь же принтеры обычно подключают через USB, но LPT еще кое-где остался. С точки зрения программиста этот порт хорош тем, что он по сути — обычный регистр. Изменился логический уровень на выходе — изменилось значение в регистре. И обратно — изменяем значение в регистре, изменится и логический уровень на выходе. Вот каноническая картинка, которая есть повсюду в Интернете и с которой начинал практически каждый, державший в руках паяльник:
Собственно, из картинки все понятно — имеется три регистра, один отвечает за управляющие сигналы компьютера (Control), другой за данные (Data) и третий за ответные сигналы подключенного к LPT устройства (Status). Мы решили не углубляться в дебри двунаправленной передачи данных, а ограничиться наиболее простым вариантом — передача данных от компьютера к контроллеру через Data, сигнал «данные выставлены» — также в Data и ответные слова контроллера — в Status. Регистр Control не используется. Запрета никакого на его использование нет, исключительно давние воспоминания одного из авторов этого проекта — при изменении значения в Control система считала, что что-то подключили и начинала сама менять значения этого регистра. Дело давнее, память хранит очень смутные воспоминания, тем не менее решили не наступать на потенциальные грабли и ограничиться 7 битами данных регистра Data + 1 бит «данные выставлены» того же регистра.
Протокол взаимодействия
С разрядностью определились, теперь надо придумать слова, которыми будут обмениваться контроллер и компьютер, и порядок обмена этими словами. Иными словами — разработать протокол взаимодействия. Что же, приступим!