firmware/stm32/bootloader/gpio.c
2020-11-18 14:19:14 -05:00

88 lines
2.0 KiB
C

/*
* (c) Copyright 2018 by Coinkite Inc. This file is covered by license found in COPYING-CC.
*
* gpio.c -- setup and control GPIO pins (and one button)
*
*/
#include "basics.h"
#include "gpio.h"
#include "stm32l4xx_hal.h"
// PB8 - connected DFU (boot0) line, so easier to read
#define DFU_BTN_PIN GPIO_PIN_8
#define DFU_BTN_PORT GPIOB
// PA0 - onewire bus for 508a
#define ONEWIRE_PIN GPIO_PIN_0
#define ONEWIRE_PORT GPIOA
// gpio_setup()
//
// set directions, lock critical ones, etc.
//
void
gpio_setup(void)
{
// NOTES:
// - try not to limit PCB changes for future revs; leave unused unchanged.
// - oled_setup() uses pins on PA6 thru PA8
// enable clock to that part of chip
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
{ // DFU button
GPIO_InitTypeDef setup = {
.Pin = DFU_BTN_PIN,
.Mode = GPIO_MODE_INPUT,
.Pull = GPIO_NOPULL,
.Speed = GPIO_SPEED_FREQ_LOW,
.Alternate = 0,
};
HAL_GPIO_Init(DFU_BTN_PORT, &setup);
}
{ // Onewire bus pin used for ATECC508A comms
GPIO_InitTypeDef setup = {
.Pin = ONEWIRE_PIN,
.Mode = GPIO_MODE_AF_OD,
.Pull = GPIO_NOPULL,
.Speed = GPIO_SPEED_FREQ_MEDIUM,
.Alternate = GPIO_AF8_UART4,
};
HAL_GPIO_Init(ONEWIRE_PORT, &setup);
}
#if 0
{ // DEBUG only: Row1 = PB13
GPIO_InitTypeDef setup = {
.Pin = GPIO_PIN_13,
.Mode = GPIO_MODE_OUTPUT_PP,
.Pull = GPIO_NOPULL,
.Speed = GPIO_SPEED_FREQ_HIGH,
.Alternate = 0,
};
HAL_GPIO_Init(GPIOB, &setup);
}
// elsewhere...
//HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, 1);
//HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, 0);
#endif
}
// dfu_button_pressed()
//
// sample the DFU button
//
bool
dfu_button_pressed(void)
{
return (HAL_GPIO_ReadPin(DFU_BTN_PORT, DFU_BTN_PIN) == GPIO_PIN_SET);
}
// EOF