Ejemplo de I2C Code Composer Studio para MSP430G2553

He estado buscando en los foros 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. Escribe 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 nadie que escriba mi código. Solo tengo problemas con los conceptos básicos de cómo funcionan las cosas al programar controladores en CCS. Estoy acostumbrado a llamar a una función como:

SetPinMode(14,OUTPUT);

Lo anterior, cuando se llama, establecería 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 encontrarle ningún sentido. Está todo 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 una tontería. No puedo leer ese código y distinguir qué partes de él están haciendo qué... Estoy pensando que podría necesitar alguna clase de 'Introducción a la programación de controladores' para ponerme en el modo de descifrar el código anterior.

Me parece que el mundo de la programación de controladores usa 'taquigrafía' en lugar de funciones de llamada. Estoy seguro de que hay buenas razones para esto, pero es muy difícil de seguir cuando se empieza por primera vez. Cualquier ayuda útil con algunas explicaciones que serían útiles para alguien como yo que aún no sabe la respuesta sería muy apreciada.

Cualquiera puede decir que sabe 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 SON alimentados con cuchara para empezar. Simplemente no entiendo todo el paradigma en este punto, así que es difícil para mí descifrar...

Este no es un servicio de escritura de código. Lea el capítulo 17 de la Guía del usuario y los ejemplos de I²C de TI. Si no entiende alguna pieza de código en particular, haga una pregunta específica al respecto.
Encontrará que todas esas constantes/macros/nombres de registro 'abreviados' (generalmente) coinciden con los nombres de campo de bits o registros enumerados en la Guía del usuario (UG) y la Hoja de datos (DS) para cada uC. Aprendí rápidamente que cada vez que se programa para una TI uC, uno debe tener acceso constante tanto a la UG como a la DS. Debe estar familiarizado con las secciones relevantes de estos documentos incluso antes de comenzar a programar.

Respuestas (2)

SetPinMode(14, OUTPUT) también probablemente solo establezca un valor en el registro que controla el pin (en pseudocódigo: pin[14].output=true ). En C, eso a menudo se hace 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 es escribir directamente en los registros de la máquina, a los 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, por lo que no tendría que crear las suyas propias. Sin embargo, si lo intenta, se espera que experimente, ya que la documentación oficial solo llega hasta cierto punto.

Los ejemplos de código de TI son todo lo que necesita. slac485h (descarga de archivo zip) tiene varios ejemplos de i2c para esclavo y maestro, lecturas, escrituras únicas y múltiples, 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 la escritura de valores hasta que envíe una parada. Para leer, es lo mismo. Sigue leyendo enviando un acuse de recibo hasta que hayas terminado, así que envías un acuse de recibo. Eso es todo.

Ninguno de los ejemplos de TI muestra una condición de inicio repetida.