L'alternative préférée pour contrôler un GPIO est via un BSP. Parce que ce BSP (package de support de carte) fait tout le travail pour vous en réglant tous les périphériques à de bonnes valeurs par défaut et vous permettant d'appeler une fonction. Peut-être que votre BSP de choix aura une fonction pour écrire un octet sur un port GPIO 8 bits; votre LED n'aura qu'un bit. Dans ce cas, votre code C pourrait ressembler à: (au moins: cela fonctionnera comme ceci sur les kits Luminary Micro).(Exemple de code, nécessite un peu de travail supplémentaire pour le faire compiler en particulier sur votre kit).
/* 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);
}
Bien sûr, tout est épelé; il peut être fait en une seule ligne comme celle-ci:
#DEFINE SETLEDSTATE(led,state) GPIOPinWrite(LEDConfig[led].address, ~(1<<LEDConfig[led].bit),(state<<LEDConfig[led].bit))
cela fera la même chose, mais n'a de sens que vous pouvez rêver des masques de bits, et que vous voulez pour passer des LED pour déboguer le programme réel ..
L'alternative: métal nu. Dans ce cas, vous devez tout configurer pour vous-même. Pour un système embarqué, vous devez être au courant de multiplexage des broches et gestion de l'alimentation (en supposant contrôleur de mémoire et horloges cpu sont déjà mis en place!)
initialisation
- : multiplexage broches réglé de telle manière que la fonction que vous souhaitez le contrôle est réellement mappé sur le paquet.
- initialisation de pheripheral (dans ce cas, soit un UART, ou une fonction GPIO sur la même broche)
Avez-vous eu de la chance avec ça? Vous êtes-vous connecté pour vérifier cela? – NoMoreZealots