Estoy desarrollando un pequeño programa para controlar el módulo de evaluación de TI DRV2605LEVM-MD , similar a la consola de control de TI Haptics, pero específica para esta placa. Consiste en un microcontrolador MSP430, un TCA9548A i2c switch y 8 DRV2605 controladores de motores hápticos conectados al conmutador.
Aunque en realidad soy capaz de hacer que los motores funcionen y jueguen los efectos, me cuesta mucho descubrir cómo leer los registros del conductor a través del interruptor.
Mi mala idea de un conmutador i2c es básicamente un ic donde puede activar o desactivar cualquier canal para enviar comunicaciones i2c a los esclavos, por lo que mi enfoque hasta ahora era:
A) Habilitar los canales necesarios
B) Configure esos canales como salidas
C) Activar los canales deseados
D) Enviar la consulta i2c al esclavo conectado al canal activo.
Esto ha funcionado hasta ahora sin problemas, pero ahora necesito leer de ese canal en lugar de escribir, y no he podido hacer que funcione con el mismo enfoque.
Al leer la documentación del switch, he encontrado la siguiente descripción de registro:
Registro 0: El registro del puerto de entrada (registro 0) refleja los niveles lógicos entrantes de los pines, independientemente de si el pin está Definido como una entrada o una salida por el registro de configuración. Sólo actúa sobre la operación de lectura. Escribe a estos Los registros no tienen efecto. El valor predeterminado, X, está determinado por el nivel lógico aplicado externamente. Antes de una operación de lectura, se envía una transmisión de escritura con el byte de comando para indicar al dispositivo I 2 C que A continuación se accede al registro del puerto de entrada.
Registro 1: El registro del puerto de salida (registro 1) muestra los niveles lógicos de salida de los pines definidos como salidas por el Registro de configuración. Los valores de bit en este registro no tienen efecto en los pines definidos como entradas. A su vez, lee de este el registro refleja el valor que está en el flip-flop que controla la selección de salida, no el valor de pin real.
Registro 2: El registro de inversión de polaridad (registro 2) permite la inversión de polaridad de los pines definidos como entradas por la configuración registro. Si se establece un bit en este registro (escrito con 1), se invierte la polaridad del pin del puerto correspondiente. Si un poco en esto el registro se borra (escrito con un 0), se mantiene la polaridad original del pin del puerto correspondiente.
Registro 3: El registro de configuración (registro 3) configura las direcciones de los pines de E / S. Si un bit en este registro se establece en 1, el pin de puerto correspondiente se habilita como entrada con un controlador de salida de alta impedancia. Si un poco en este registro es borrado a 0, el pin del puerto correspondiente se habilita como salida.
Entonces, creo que comprendo al menos lo que hacen los registros 2 y 3: el registro 3 se usa para indicar al conmutador si va a utilizar un canal como salida (escritura) o entrada (lectura), y registro 2 invierte ese comportamiento. Pero para los dos primeros registros, no tengo ni idea.
Sé que necesito escribir en el registro 1 para habilitar ese canal, luego configurarlo como escritura de E / S para el registro 3 y, finalmente, escribir directamente en el conmutador para activar el canal, pero esto es para una operación de escritura . Raw-write es un concepto que no entiendo, ya que esta es mi primera experiencia con i2c y todo lo que he leído hasta ahora involucra la escritura de registros.
¿Alguien puede ayudar con esto?