Ich verwende ein Launchpad, um einen MSP430G2553-Controller zu programmieren. Ich benutze es zum Debuggen. Dieser Controller hat 20 Pins. Das Endziel hier ist jedoch, mein Programm auf einem MSP430G2553IPW28R-Controller auszuführen. Dieser Controller hat 28 statt 20 Pins.
Ich verwende die Pins P3.0 und P3.1 auf dem 28-Pin-Controller für einige LEDs. Und mein Launchpad-Controller hat diese Pins nicht. Ich muss feststellen, auf welchem Controller der Code ausgeführt wird.
Ich werde die JTAG-Pins meines Launchpads verwenden, um den 28-Pin-Controller zu programmieren. Die Frage ist also, wie ich programmgesteuert feststellen kann, auf welchem der beiden Controller mein Code ausgeführt wird, und eine Art #define einrichten kann, um die Pins P3.0, P3.1 zu verwenden, wenn sie auf dem 28-Pin-Controller und den Pins ausgeführt werden P2.1 und P2.2 bei Ausführung auf dem Launchpad-Controller. Ich möchte nicht jedes Mal Codezeilen kommentieren und auskommentieren, wenn ich von einem Prozessor zum anderen wechsle ...
Bitte beachten Sie, dass ich Energia als meine Entwicklungsumgebung verwende.
Je nach Projektkomplexität und Größe der MCU verwende ich 1 bis 3 Pins für die "PCB-Identifikation" mit externen Pulldown-Widerständen. Widerstände werden je nach Platinenrevision bestückt. Die Anwendung innerhalb der MCU betrachtet diese Pins beim Start und bestimmt, was zu tun ist.
Es hilft noch mehr, wenn Sie mehrere Produkte mit einigen Unterschieden haben, die es Ihnen ermöglichen, ein einzelnes Binärabbild für alle Hardwareversionen zu haben.
IMHO ist die am meisten bevorzugte Option, in der Dokumentation nach einer Chip-ID zu suchen. Die meisten modernen Chips bieten ein internes Register mit Chiptyp und Revision. Sie könnten das verwenden, um Ihre Logik voranzutreiben.
Für die MSP430-Familie konnte ich einige Kern-IDs in der BSL-Dokumentation (Seite 37) finden. Diese beschränken sich jedoch nur auf die Familie der Chips und unterscheiden nicht zwischen Chippaketen. Sie können immer noch versuchen, zu testen und zu überprüfen, ob es Unterschiede gibt.
Alternativ könnten Sie physische Board-Änderungen verwenden, wie z. B. das Hinzufügen von Pull-Up/Downs an bestimmten Pins, die softwaregetestet werden können, oder das Binden von Pins niedrig/hoch.
Die folgende Methode zeigt Ihnen, ob ein Pin auf dem Controller vorhanden ist. Um also festzustellen, ob wir einen 20- oder einen 28-Pin-Controller verwenden, wählen Sie einen Digital-Pin aus, der > 20 ist, und übergeben Sie ihn als Parameter an die Funktion unten. Wenn es wahr zurückgibt, haben Sie einen 28-Pin-Controller. Wenn es falsch zurückgibt, haben Sie einen 20-Pin-Controller. Ich habe dies mit meinem MSP430G2553 Launchpad getestet und habe folgende Ergebnisse:
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;
}
Hier ist die Ausgabe für LaunchPad mit MSP430G2553 (20 Pin):
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
Hier ist die Ausgabe für MSP430G2553 (28 Pin):
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
Ich musste mit Pin 8 beginnen, weil es mir nicht gefiel, als ich versuchte, 2-7 als Ausgangspins zu setzen :-) Wie auch immer, der Punkt ist, dass Sie versuchen können, Pin 23 als Ausgangspin zu setzen und seinen Wert zu schreiben und zu lesen um festzustellen, ob der von Ihnen verwendete Chip ein 20-Pin-Chip ist oder mehr als 20 Pins hat. Ich habe keinen 32-Pin-Chip, aber ich würde mir vorstellen, dass Sie an einem Pin größer als 28 testen könnten, um festzustellen, ob es sich um einen 32-Pin-Chip handelt.
Nun, nach allem, was ich gesagt habe. Seit ich dies geschrieben habe, habe ich entdeckt, dass es jetzt 28-Pin-Unterstützung auf GitHub gibt. Ich benutze es jetzt und beziehe mich auf Pins mit ihrer richtigen P3_0, P2_0-Notation anstatt direkt auf die Pin-Nummer, und das scheint jetzt gut zu funktionieren.
Passant
Passant
Das Photon
Passant