Предпочтительная альтернатива для управления GPIO осуществляется через BSP. Поскольку этот пакет поддержки BSP (плата поддержки платформ) выполняет всю работу для вас при настройке всех периферийных устройств на хорошие значения по умолчанию и позволяет вам вызвать функцию. Возможно, ваш BSP-выбор будет иметь функцию записи байта в 8-битный порт GPIO; ваш светодиод будет иметь только один бит. В этом случае ваш C-код может выглядеть так: (по крайней мере: он будет работать так же, как в наборах Luminary Micro).(Пример кода; требуется немного дополнительной работы, чтобы он скомпилировался, особенно на вашем комплекте).
/* 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);
}
Конечно, все это изложено; это может быть сделано в течение одной линии, как это:
#DEFINE SETLEDSTATE(led,state) GPIOPinWrite(LEDConfig[led].address, ~(1<<LEDConfig[led].bit),(state<<LEDConfig[led].bit))
это будет делать то же самое, но только имеет смысл, когда вы снилось битовые маски, и вы только хотите, чтобы переключить некоторые светодиоды для отладки реальной программы .. .
Альтернатива: голый металл. В этом случае вам нужно настроить все для себя. Для встраиваемых систем, вы должны быть осведомлены о контактном мультиплексирование и управления питанием (предполагая, что контроллер памяти и центрального процессора часы уже установлены!)
- инициализации: набор пин мультиплексирование таким образом, что функция, которую вы хотите контроль фактически отображается на упаковке.
- инициализация pheripheral (в данном случае либо УАППЫ, или функция GPIO на тот же штырь)
Вам повезло с этим? Вы вошли в систему, чтобы проверить это? – NoMoreZealots