martes, 26 de julio de 2016

Slither - 4 - usb mouse y encoder con edu-ciaa-nxp

Viene de  Slither - 3 - usb mouse con edu-ciaa-nxp

Ahora, hay que combinar el código del mouse [1] con el del encoder [2]. Esto está en [3].

La idea es que al llamar a Mouse_Tasks(), hay que avisarle que ha hecho el encoder.

Me imagino que la forma correcta de programarlo hubiese sido activar las interrupciones de los pines a donde conectemos el encoder y hacer la lógica correspondiente.

Sin embargo, a mi me parece que por como viene el ejemplo

   Mouse_Tasks();
   /* Sleep until next IRQ happens */
   __WFI();


lo que está ocurriendo es que se habilitó la interrupción de USB y cuando __WFI() lo detecta sigue con el bucle, o sea, no se está llamando a ninguna función por la interrupción.

O sea, yo tendría que habilitar las interrupciones sin darle un handler y poner algo como:

   Encoder_Tasks();
   Mouse_Tasks();
   /* Sleep until next IRQ happens */
   __WFI();


Probablemente tendría que agregar lógica en cada *_Tasks() para ver si me llamaron por mi interrupción o por otra.


Como no sé nada de interrupciones aún, voy a poner inline Encoder_Tasks() y mala suerte, ver como responde.

El código resultante es buena parte del encoder, pero tuve que modificar las firmas de Mouse_Tasks() y  Mouse_UpdateReport() para que reciban los valores del encoder.








[1] https://github.com/cpantel/ciaa/tree/master/slither.io/STANDALONE/usbDeviceHID_mouse

[2] https://github.com/cpantel/ciaa/tree/master/slither.io/encoder

[3] https://github.com/cpantel/ciaa/tree/master/slither.io/STANDALONE/usbDeviceHID_mouse_encoder

No hay comentarios:

Publicar un comentario