Ejemplo de I2C Code Composer Studio para MSP430G2553

1

He estado recorriendo los foros para una implementación completa de I2C para MSP430G2553 usando Code Composer Studio. Todo lo que puedo encontrar son fragmentos de código fuera de contexto o ejemplos de un solo byte.

Necesito averiguar cómo hacer lo siguiente usando Code Composer Studio 7x en un MSP430G2553 con I2C:

  1. Escriba un byte de datos en un registro específico.
  2. Necesito hacer lo anterior en 2 esclavos I2C diferentes.
  3. Necesito leer MÚLTIPLES bytes de un solo esclavo I2C.

Soy nuevo en la programación de controladores. He estado programando en Windows durante 20 años, pero la programación del controlador de bajo nivel es solo un gran cambio de paradigma para mí. Si alguien pudiera indicarme un buen ejemplo de las 3 operaciones anteriores que funcionarán en Code Composer Studio 7.x, estaría muy agradecido.

No le estoy pidiendo a alguien que escriba mi código. Solo tengo problemas con los conceptos básicos de cómo funcionan las cosas cuando se programan los controladores en CCS. Estoy acostumbrado a llamar a una función como:

SetPinMode(14,OUTPUT);

Lo anterior, cuando se llame, establecerá el pin 14 como un pin de salida.

Sin embargo, cuando veo algo en un ejemplo de TI como:

UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC;   // I2C Master, synchronous mode

No puedo darle ningún sentido. Todo está abreviado. Establecer valores es actuar como llamar a una función. Es agradable y compacto, pero para un tipo acostumbrado a llamar a una función con un nombre significativo, es incomprensible ... Parece un jibberish. No puedo leer ese código y averiguar qué partes de él están haciendo lo que ... Estoy pensando que podría necesitar alguna clase de 'Introducción a la Programación del Controlador' para ponerme en el modo de descifrar el código anterior.

Me parece que el mundo de la programación del controlador usa "mano corta" en lugar de funciones de llamada. Estoy seguro de que hay buenas razones para esto, pero es muy difícil de seguir cuando empiezas por primera vez. Cualquier ayuda útil con algunas explicaciones que sean útiles para alguien como yo que no sepa la respuesta sería muy apreciada.

Cualquiera puede decir que sabe cómo hacer algo. Una persona verdaderamente dotada puede enseñárselo a alguien que aún no lo sabe. Eso es lo que estoy pidiendo aquí. O al menos guíame a alguna fuente donde los ejemplos se alimentan con una cuchara para empezar. Simplemente no entiendo todo el paradigma en este punto, por lo que me cuesta descifrarlo ...

    
pregunta Curtis

2 respuestas

1

Es probable que también SetPinMode (14, SALIDA) también establezca un valor en el registro que controla el pin (en pseudocódigo: pin [14] .output = true ). En C eso se hace a menudo con aritmética binaria (manipulación de bits). Los registros en el MSP están asignados a la memoria, por lo que escribir en estas regiones de memoria predefinidas se escribe directamente en los registros de la máquina, a la que la máquina reacciona en consecuencia, como se explica en el conjunto de manuales de referencia (búsqueda por familia de chips y número de pieza). Para obtener una introducción al hardware, cualquier libro sobre MSP o microcontroladores de 8 bits en general debería ser suficiente.

Estoy seguro de que ya existen implementaciones de código abierto para I2C, por ejemplo, en msp430ware de TI, u otras bibliotecas de código abierto, para que no tenga que rodar la suya propia. Sin embargo, si intenta hacerlo, se espera que experimente, ya que la documentación oficial solo llega hasta el momento.

    
respondido por el vectorious
0

Los ejemplos de código de TI son todo lo que necesitas. slac485h (descarga de archivos zip) tiene varios ejemplos i2c para esclavos y maestros, lecturas únicas y múltiples, escrituras, etc. .

I2C en general es bastante simple y repetitivo. Escriba la dirección del dispositivo, luego la dirección de la página, luego el valor. Repita los valores de escritura hasta que envíe una parada. Para leer, es lo mismo. Sigue leyendo enviando un recibo hasta que hayas terminado, así que envías un nack. Eso es todo.

    
respondido por el Passerby

Lea otras preguntas en las etiquetas