Estoy usando un Launchpad para programar un controlador MSP430G2553. Lo uso para depurar. Este controlador tiene 20 pines. Sin embargo, el objetivo final aquí es ejecutar mi programa en un controlador MSP430G2553IPW28R. Este controlador tiene 28 pines en lugar de 20.
Estoy usando los pines P3.0 y P3.1 en el controlador de 28 pines para algunos LED. Y mi controlador Launchpad no tiene esos pines. Necesito determinar en qué controlador se está ejecutando el código.
Usaré los pines JTAG de mi plataforma de lanzamiento para programar el controlador de 28 pines. Entonces, la pregunta es, ¿cómo puedo determinar mediante programación en cuál de los 2 controladores se está ejecutando mi código y poner algún tipo de #define para usar los pines P3.0, P3.1 cuando se ejecuta en el controlador de 28 pines y los pines? P2.1 y P2.2 cuando se ejecuta en el controlador Launchpad. No quiero comentar y descomentar líneas de código cada vez que cambio de un procesador a otro...
Tenga en cuenta que estoy usando Energia como mi entorno de desarrollo.
Según la complejidad del proyecto y el tamaño de la MCU, uso de 1 a 3 pines para la "identificación de PCB" con resistencias desplegables externas. Las resistencias se montan según la revisión de la placa. La aplicación dentro de la MCU mira estos pines al inicio y determina qué hacer.
Ayuda aún más si tiene varios productos con algunas diferencias que le permiten tener una sola imagen binaria para todas las revisiones de hardware.
En mi humilde opinión, la opción más preferida es buscar una identificación de chip en la documentación. La mayoría de los chips modernos proporcionan un registro interno con el tipo de chip y la revisión. Podrías usar eso para impulsar tu lógica.
Para la familia MSP430, he podido encontrar algunas identificaciones principales en la documentación de BSL (página 37). Sin embargo, estos solo se limitan a la matriz familiar y no distinguen entre paquetes de chips. Aún puede intentar probar y verificar si hay alguna diferencia.
Alternativamente, puede usar cambios físicos en la placa, como agregar pull-up/downs en ciertos pines que pueden probarse con software o atar pines bajo/alto.
El método a continuación le dirá si existe un pin en el controlador. Entonces, para determinar si estamos usando un controlador de 20 o 28 pines, seleccione un pin digital que sea > 20 y páselo como parámetro a la función a continuación. Si devuelve verdadero, tiene un controlador de 28 pines. Si devuelve falso, tiene un controlador de 20 pines. Probé esto usando mi MSP430G2553 Launchpad y obtuve los siguientes resultados:
showPinExistence(2);
showPinExistence(3);
showPinExistence(5);
showPinExistence(6);
showPinExistence(7);
showPinExistence(8);
showPinExistence(11);
showPinExistence(15);
showPinExistence(18);
showPinExistence(21);
showPinExistence(22);
showPinExistence(23);
void showPinExistence(int pin)
{
Serial.print("Pin ");
Serial.print(pin);
Serial.print(" Exists: ");
Serial.println(pinExists(pin)?"True":"False");
Serial.flush();
}
bool pinExists(int pin)
{
bool lowResult;
bool highResult;
pinMode(pin, OUTPUT);
digitalWrite(pin, LOW);
lowResult = digitalRead(pin);
digitalWrite(pin, HIGH);
highResult = digitalRead(pin);
return lowResult != highResult;
}
Aquí está la salida para LaunchPad con MSP430G2553 (20 pines):
Pin 2 Exists: True
Pin 3 Exists: True
Pin 5 Exists: True
Pin 6 Exists: True
Pin 7 Exists: True
Pin 8 Exists: True
Pin 11 Exists: True
Pin 15 Exists: True
Pin 18 Exists: True
Pin 21 Exists: False
Pin 22 Exists: False
Pin 23 Exists: False
Aquí está la salida para MSP430G2553 (28 pines):
Pin 8 Exists: True
Pin 9 Exists: True
Pin 10 Exists: True
Pin 11 Exists: True
Pin 12 Exists: True
Pin 13 Exists: True
Pin 14 Exists: True
Pin 15 Exists: True
Pin 16 Exists: True
Pin 17 Exists: True
Pin 18 Exists: True
Pin 19 Exists: True
Pin 20 Exists: True
Pin 21 Exists: True
Pin 22 Exists: True
Pin 23 Exists: True
Tuve que comenzar con el pin 8 porque no me gustó cuando intenté configurar 2-7 como pines de salida :-) De todos modos, el punto es que puedes intentar configurar el pin 23 como un pin de salida y escribir y leer su valor para determinar si el chip que está utilizando es de 20 pines o si tiene más de 20 pines. No tengo un chip de 32 pines, pero me imagino que podría probar en un pin mayor a 28 para determinar si es un chip de 32 pines.
Ahora, después de TODO lo que he dicho. Desde que escribí esto, descubrí que ahora hay soporte de 28 pines en GitHub. Ahora lo estoy usando y me refiero a los pines con su notación P3_0, P2_0 adecuada en lugar de directamente por el número de pin y parece estar funcionando bien ahora.
Transeúnte
Transeúnte
el fotón
Transeúnte