Die bevorzugte Alternative zur Steuerung eines GPIO ist über ein BSP. Weil dieses BSP (Board Support Package) alle Arbeit für Sie erledigt, indem es alle Peripheriegeräte auf gute Standardwerte setzt und Ihnen erlaubt, eine Funktion aufzurufen. Möglicherweise hat Ihr BSP eine Funktion, um ein Byte in einen 8-Bit-GPIO-Port zu schreiben; Ihre LED wird nur ein Bit haben. In diesem Fall könnte Ihr C-Code wie folgt aussehen: (zumindest wird es so funktionieren auf Luminary Micro Kits).(Beispielcode; erfordert etwas zusätzliche Arbeit, um es speziell auf Ihrem Kit kompilieren zu lassen).
/* each LED is addressed by an address (byte) and a bit-within-this-byte */
struct {
address, // address of IO register for LED port
bit // bit of LED
} LEDConfigPair;
struct LEDConfigPair LEDConfig[NUMBER_OF_LEDS] = {
{GPIO_PORTB_BASE,0}, // LED_0 is at port B0
{GPIO_PORTB_BASE,1} // LED_1 is at port B1
} ;
/* function LED_init configures the GPIOs where LEDs are connected as output */
led_init(void)
{
U32 i;
for(i=0;i<NUMBER_OF_LEDS;i++)
{
GPIODirModeSet(LEDConfig[i][0], LEDConfig[i][1], GPIO_DIR_MODE_OUT);
}
}
/* my LED function
set_led_state makes use of the BSP of Luminary Micro to access a GPIO function
Implementation: this BSP requires setting 8 port wide IO, so the function will calculate a mask (
*/
set_led_state(U8 led,bool state)
{
U8 andmask;
U8 setmask;
andmask = ~(1 << LEDConfig[led].bit);// a bitmask with all 1's except bit of LED
if (true == state)
{
setmask = (1 << LEDConfig[led].bit); // set bit for LED
} else
{
setmask = 0;
}
GPIOPinWrite(LEDConfig[led].address, andmask, setmask);
}
Natürlich ist das alles buchstabiert; es kann in einer einzelnen Zeilen wie diese geschehen:
#DEFINE SETLEDSTATE(led,state) GPIOPinWrite(LEDConfig[led].address, ~(1<<LEDConfig[led].bit),(state<<LEDConfig[led].bit))
dies das gleiche tun, aber nur dann sinnvoll, wenn Sie Bitmasken träumen können, und Sie wollen nur ein paar LED wechseln, das reale Programm zu debuggen ..
Die Alternative: blankes Metall. In diesem Fall müssen Sie alles für sich selbst einrichten. Für ein eingebettetes System, müssen Sie (sind bereits eingerichtet unter der Annahme, Speicher-Controller und CPU-Takte!) Bewusst Pin Multiplexing und Power-Management sein
- Initialisierung: set Pin Multiplexing derart, dass die gewünschte Funktion zu Steuerelement ist tatsächlich auf dem Paket zugeordnet. Rx oder Tx unter Verwendung von Stiften von der seriellen Schnittstelle
- Initialisierung von pheripheral (in diesem Fall entweder ein UART oder eine GPIO-Funktion auf dem gleichen Stift)
Hattest du Glück dabei? Hast du dich eingeloggt, um das zu überprüfen? – NoMoreZealots