Cómo lidiar con la entrada del teclado PS / 2 y las interrupciones de la CPU

0

En primer lugar, no estoy seguro de si este es el lugar adecuado para hacer esta pregunta o no. Fue aquí o en el sitio de intercambio de pila de Ciencias de la Computación, pero pensé que tal vez sería mejor publicarlo aquí, ya que parece una pregunta de menor nivel más sobre el diseño de circuitos que cualquier otra cosa.

Mi pregunta es acerca de dos cosas diferentes, el protocolo PS / 2 y la comunicación de dispositivo a host, y las interrupciones de la CPU relacionadas con la entrada PS / 2.

Solo he estado aprendiendo sobre electrónica y arquitectura de computadoras por unas semanas, así que tal vez me esté perdiendo algo obvio, pero me cuesta entender cómo saber cuándo se ha enviado un código de escaneo un teclado a una computadora y cómo tratar con la entrada después de que se haya enviado.

Lo que quiero decir con eso es que creo que entiendo el protocolo en papel, pero no estoy seguro de cómo se construiría como un circuito real.

Por lo que he aprendido hasta ahora, y por lo que entiendo por el protocolo, creo que debería poder simplemente conectar los cables VCC , GND , Clock y Data hasta un registro de cambios de algún tipo (SIPO?) y simplemente lea los datos de entrada del registro de cambios.

Si este es el caso, ¿cómo puedo saber si la entrada realmente llegó completamente al registro de desplazamiento? ¿Es suficiente simplemente conectar las salidas del registro de desplazamiento hasta un poco más de circuitos que verifiquen los bits start , stop y parity ?

Esto lleva a mi segunda pregunta acerca de las interrupciones de la CPU. Cuando he verificado que realmente tengo un código de escaneo completo desde el teclado, no estoy seguro de qué debo hacer con esa entrada cuando se trata de interrupciones de CPU.

Lo que quiero decir con eso es, ¿debo copiar los datos que se encuentran en el registro de turnos a RAM en algún lugar? ¿O debería la CPU simplemente acceder a los datos directamente en el registro de desplazamiento?

La razón por la que pregunto esto es porque no estoy seguro de si es posible que el registro de desplazamiento haya sido sobrescrito con algunos otros datos mientras la CPU está tratando de manejar la interrupción. Si esa es una posibilidad, entonces pensé que intentar copiar los datos en un lugar como RAM sería más seguro que intentar que la CPU solo leyera cada código de escaneo directamente / indirectamente del registro de desplazamiento.

Además, dado que algunos códigos de escaneo están formados por más de un byte de datos, no estoy seguro de que la lectura directa desde el registro de desplazamiento sea la forma correcta de hacerlo en primer lugar.

He intentado buscar información acerca de esto en Google, pero casi siempre obtengo resultados para los adaptadores PS / 2 o PlayStation 2, etc., por lo que, si alguien tiene alguna información sobre cómo tratar los datos de un PS / 2 teclado sería muy apreciado.

    
pregunta Jake Lucas

2 respuestas

2

Es posible que desee echar un vistazo a este adaptador I²C-PS / 2 , que deserializa el teclado PS / 2 Protocolo en la dirección de entrada en hardware puro.

    
respondido por el Janka
1

Si está utilizando un registro de cambios de hardware, el registro de cambios generalmente tiene un registro / bloqueo en el que se copian los contenidos del registro de cambios para la salida paralela. Este valor permanecerá estable hasta que el siguiente valor se desplace completamente al registro y se active la entrada LE (o equivalente).

Si está haciendo esto en un microcontrolador que no tiene soporte de hardware para PS / 2 o un puerto SPI lo suficientemente flexible para manejar las señales (raro), solo use una interrupción activada por el borde en la señal del reloj y genere un estado simple Máquina que cambia los datos a una ubicación de memoria temporal (o ubicaciones para valores más largos que la longitud de palabra del procesador) y luego realiza una copia de este valor una vez que se ha desplazado toda la secuencia.

Hay bibliotecas de código abierto PS / 2 disponibles para Arduino y otras plataformas, eche un vistazo al código fuente de esas y vea cómo funcionan.

    
respondido por el Dean Franks

Lea otras preguntas en las etiquetas