230 likes | 425 Views
COMP541 Input Devices: Keyboards, Mice and Joysticks. Montek Singh Apr 16, 2012. Keyboard Interface. PS/2 Keyboard. Uses a synchronous serial protocol What does that mean? Each symbol is transmitted bit-by-bit 8 data bits + 3 control bits. Physical Interface. Two lines Clock (15-20KHz)
E N D
COMP541Input Devices: Keyboards, Mice and Joysticks Montek Singh Apr 16, 2012
PS/2 Keyboard • Uses a synchronous serial protocol • What does that mean? • Each symbol is transmitted bit-by-bit • 8 data bits + 3 control bits
Physical Interface • Two lines • Clock (15-20KHz) • Data • Normally high, asserted low • Read: • pp 13-14 of Nexys 3 manual
Protocol • Bidirectional • Kybd-to-host and host-to-kybd on same wires • CAPS LOCK light for example • Assert low • To send, keyboard starts clocking • sends successive bit on positive edge of clock • host reads bits on negative edges of clock • You shouldn’t need to send to kybd
Protocol • 11 bits • a start bit: always 0 • 8 bits of data • lsb first • one parity bit (odd) • a stop bit: always 1 • Clocked by keyboard • Value should be latched by FPGA on neg edge of keyboard clock Illustration from http://www.beyondlogic.org/keyboard/keybrd.htm
What is Sent • ASCII is not sent! • Scan codes for keys • Most keys have an 8-bit (single byte) scancode • Some have two bytes • A few have even more! • Most (not all, be careful!) keyboards use these scancodes: Illustration from Nexys 3 manual
Scan Codes • Normally translated by software • You remap your keys, for example • Software takes care of • Shift, caps lock, control
Some Scan Codes Long • Two code sequence common • Have a look at Break key!
Even More Complicated • Scan code generated when you press • And when you release • Two bytes: F0 followed by key scan code • Example: • Space pressed, 29 sent • Space released, F0 29 sent • If you hold key, scan code repeated
Resources • Information http://www.beyondlogic.org/keyboard/keybrd.htm • Scan codes http://www.barcodeman.com/altek/mule/scandoc.php • My Verilog for keyboard is on the class website
My Verilog • Have Verilog for keyboard • Have tested it with the FPGA kit; seems to work fine • To use: • You should memory-map the character code register • give the keyboard a memory address so the CPU can read it using lw instructions • Handle presses and releases appropriately in software • maybe add another register to indicate that a new character has arrived..??
Mouse • Very similar interface (clk & data) • But: 3 words sent w/ mouse movement or button press • Read • pp 14-15 of Nexys 3 manual
Movement • Movement is relative • XS, YS are sign (+ is up/right) • XV, YV are overflow (too fast) • L, R are buttons
Scroll Wheel, etc. • Extensions to original 2 button PS/2 mouse • See http://www.computer-engineering.org/ps2mouse/
Joystick (Courtesy Anselmo Lastra)
Atari 2600 Joystick (we only have 2-3) http://www.atariarchives.org
We Have Sega Joypads (we have 5-6) • Enhanced version with more buttons • Has mux • Select pin chooses first or second set of buttons, L/R http://pinouts.ru/data/genesiscontroller_pinout.shtml
Six Button Use • See • http://www.cs.cmu.edu/~chuck/infopg/segasix.txt • Use select to use buttons B & C • To use X, Y, Z, need to pulse select
NEXYS Mappings (PMOD JA) • We have to connect them using wires… PMOD JA is 10-pin connector nearest VGA connector
Suggestion • Create FF for Select • Memory map so you can set from CPU • Memory map the input signals • I would not latch them • Please power off when plugging or unplugging Sega joypads! • Careful when plugging in PCB
Links • http://pinouts.ru/data/JoystickAtari2600_pinout.shtml • http://pinouts.ru/data/genesiscontroller_pinout.shtml • http://www.epanorama.net/documents/joystick/ataristick.html • http://www.epanorama.net/documents/joystick/tvgames.html • http://www.cs.cmu.edu/~chuck/infopg/segasix.txt