Очень долго пытался, но безуспешно, заставить работать клавиатуру с моей ПЛИСиной. В конце концов взял код интерфейса PS/2 из прилагаемого к плате самотеста, но и он не пошёл. Мистика, да и только. Но, как оказалось, причина была проста: я пробовал плату с двумя клавами, но они обе были универсальными, т.е. допускали подключение и по USB, и по PS/2. На компутере проблем никаких не возникало, а вот с ПЛИС (точней, с контроллером, который реализован для неё) эти клавы работать наотрез отказывались (хотя мыша, тоже универсальная, работала без проблем). Вчера сходил в магазин и купил клаву чисто PS/2 -- и она заработала сходу, причём как с "образцовым" контроллером, так и с моим собственными.
Кстати говоря, мой контроллер, несмотря на крайне малый опыт работы с ПЛИС, оказался эффективнее: почему-то в упомянутом самотесте для вычисления чётности принимаемых и отправляемых байтов используется ПЗУ, ну а я, естественно, использовал операцию "исключающее или". В результате мой контроллер занимает в ПЛИС чуть-чуть меньше места: на три триггера и две LUT, что в сумме экономит одну секцию (slice). Мелочь, а приятно :)
Правда, одна проблема осталась. Клава благополучно проглатывает команды FF, F2, ED и ещё некоторые. Однако при попытке выдать EE контроллер зависает, причём, как я выяснил с помощью дополнительной индикации на светодиодах, ещё до начала отправки самого байта, на стадии отправки стартового бита. В чём дело, пока не врублюсь. Из-за этой странности контроллер PS/2 пока что можно признать лишь условно годным к эксплуатации...
|