global: define MINIF401 button/led pins
This commit is contained in:
parent
aff4275478
commit
a878a1ad9c
40
global.c
40
global.c
@ -132,9 +132,6 @@ char* b2s(uint64_t binary, uint8_t rjust)
|
||||
inline void led_on(void)
|
||||
{
|
||||
#if defined(LED_PIN)
|
||||
#if defined(BUSVOODOO)
|
||||
gpio_set_mode(GPIO_PORT(LED_PIN), GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO_PIN(LED_PIN)); // set LED pin push-pull
|
||||
#endif // BUSVOODOO
|
||||
#if defined(LED_ON) && LED_ON
|
||||
gpio_set(GPIO_PORT(LED_PIN), GPIO_PIN(LED_PIN));
|
||||
#else
|
||||
@ -147,14 +144,10 @@ inline void led_on(void)
|
||||
inline void led_off(void)
|
||||
{
|
||||
#if defined(LED_PIN)
|
||||
#if defined(BUSVOODOO)
|
||||
gpio_set_mode(GPIO_PORT(LED_PIN), GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, GPIO_PIN(LED_PIN)); // set LED pin to floating to disable LEDs
|
||||
#else
|
||||
#if defined(LED_ON) && LED_ON
|
||||
gpio_clear(GPIO_PORT(LED_PIN), GPIO_PIN(LED_PIN));
|
||||
#else
|
||||
gpio_set(GPIO_PORT(LED_PIN), GPIO_PIN(LED_PIN));
|
||||
#endif // BUSVOODOO
|
||||
#endif // LED_ON
|
||||
#endif // LED_PIN
|
||||
}
|
||||
@ -163,9 +156,6 @@ inline void led_off(void)
|
||||
inline void led_toggle(void)
|
||||
{
|
||||
#if defined(LED_PIN)
|
||||
#if defined(BUSVOODOO)
|
||||
gpio_set_mode(GPIO_PORT(LED_PIN), GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO_PIN(LED_PIN)); // set LED pin to push-pull
|
||||
#endif // BUSVOODOO
|
||||
gpio_toggle(GPIO_PORT(LED_PIN), GPIO_PIN(LED_PIN));
|
||||
#endif // LED_PIN
|
||||
}
|
||||
@ -249,28 +239,34 @@ void user_input_store(char c)
|
||||
|
||||
void board_setup(void)
|
||||
{
|
||||
#if defined(LED_PIN)
|
||||
// setup main clock
|
||||
#if defined(MINIF401)
|
||||
rcc_clock_setup_pll(&rcc_hse_25mhz_3v3[RCC_CLOCK_3V3_84MHZ]); // the MINIF401 uses an STM32F401 which can go up to 84 MHz, and the board has a 25 MHz crystal
|
||||
#else
|
||||
rcc_clock_setup_pll(&rcc_hsi_configs[RCC_CLOCK_3V3_84MHZ]); // use HSI which is present on all boards, and limit to 84MHz (supported by all STM32F4
|
||||
#endif
|
||||
|
||||
#if defined(LED_PIN) && defined(LED_ON)
|
||||
// setup LED
|
||||
rcc_periph_clock_enable(GPIO_RCC(LED_PIN)); // enable clock for LED
|
||||
#if defined(BUSVOODOO)
|
||||
gpio_set_mode(GPIO_PORT(LED_PIN), GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, GPIO_PIN(LED_PIN)); // set LED pin to floating to disable LEDs
|
||||
#else
|
||||
gpio_set_mode(GPIO_PORT(LED_PIN), GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO_PIN(LED_PIN)); // set LED pin to output push-pull do drive LED
|
||||
gpio_mode_setup(GPIO_PORT(LED_PIN), GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN(LED_PIN)); // set LED pin as output
|
||||
#if LED_ON // LED is on when sourcing
|
||||
gpio_set_output_options(GPIO_PORT(LED_PIN), GPIO_OTYPE_PP, GPIO_OSPEED_2MHZ, GPIO_PIN(LED_PIN)); // set LED pin output as push-pull
|
||||
#else // LED is on when sinking
|
||||
gpio_set_output_options(GPIO_PORT(LED_PIN), GPIO_OTYPE_OD, GPIO_OSPEED_2MHZ, GPIO_PIN(LED_PIN)); // set LED pin output as open-drain
|
||||
#endif
|
||||
led_off(); // switch off LED per default
|
||||
#endif // LED_PIN
|
||||
|
||||
// setup button
|
||||
#if defined(BUTTON_PIN)
|
||||
#if defined(BUTTON_PIN) && defined(BUTTON_PRESSED)
|
||||
rcc_periph_clock_enable(GPIO_RCC(BUTTON_PIN)); // enable clock for button
|
||||
gpio_set_mode(GPIO_PORT(BUTTON_PIN), GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, GPIO_PIN(BUTTON_PIN)); // set button pin to input
|
||||
rcc_periph_clock_enable(RCC_AFIO); // enable alternate function clock for external interrupt
|
||||
exti_select_source(GPIO_EXTI(BUTTON_PIN), GPIO_PORT(BUTTON_PIN)); // mask external interrupt of this pin only for this port
|
||||
#if defined(BUTTON_PRESSED) && BUTTON_PRESSED
|
||||
gpio_clear(GPIO_PORT(BUTTON_PIN), GPIO_PIN(BUTTON_PIN)); // pull down to be able to detect button push (go high)
|
||||
#if BUTTON_PRESSED // level goes high when pressed
|
||||
gpio_mode_setup(GPIO_PORT(BUTTON_PIN), GPIO_MODE_INPUT, GPIO_PUPD_PULLDOWN, GPIO_PIN(BUTTON_PIN)); // set GPIO to input and pull down
|
||||
exti_set_trigger(GPIO_EXTI(BUTTON_PIN), EXTI_TRIGGER_RISING); // trigger when button is pressed
|
||||
#else
|
||||
gpio_set(GPIO_PORT(BUTTON_PIN), GPIO_PIN(BUTTON_PIN)); // pull up to be able to detect button push (go low)
|
||||
#else // level goes low when pressed
|
||||
gpio_mode_setup(GPIO_PORT(BUTTON_PIN), GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN(BUTTON_PIN)); // set GPIO to input and pull up
|
||||
exti_set_trigger(GPIO_EXTI(BUTTON_PIN), EXTI_TRIGGER_FALLING); // trigger when button is pressed
|
||||
#endif
|
||||
exti_enable_request(GPIO_EXTI(BUTTON_PIN)); // enable external interrupt
|
||||
|
99
global.h
99
global.h
@ -599,86 +599,22 @@ int32_t adds32_safe(int32_t a, int32_t b);
|
||||
#define SPI_IRQ(x) CAT3(NVIC_SPI,x,_IRQ)
|
||||
/** get SPI ISR based on SPI identifier */
|
||||
#define SPI_ISR(x) CAT3(spi,x,_isr)
|
||||
/** get DMA based on SPI identifier */
|
||||
#define DMA_SPI(x) CAT2(DMA_SPI,x)
|
||||
#define DMA_SPI1 DMA1 /**< SPI1 is on DMA1 */
|
||||
#define DMA_SPI2 DMA1 /**< SPI2 is on DMA1 */
|
||||
#define DMA_SPI3 DMA2 /**< SPI3 is on DMA2 */
|
||||
/** get RCC for DMA based on SPI identifier */
|
||||
#define RCC_DMA_SPI(x) CAT2(RCC_DMA_SPI,x)
|
||||
#define RCC_DMA_SPI1 RCC_DMA1 /**< SPI1 is on DMA1 */
|
||||
#define RCC_DMA_SPI2 RCC_DMA1 /**< SPI2 is on DMA1 */
|
||||
#define RCC_DMA_SPI3 RCC_DMA2 /**< SPI3 is on DMA2 */
|
||||
/** get DMA channel for SPI TX based on SPI identifier */
|
||||
#define DMA_CHANNEL_SPI_TX(x) CAT3(DMA_CHANNEL_SPI,x,_TX)
|
||||
#define DMA_CHANNEL_SPI1_TX DMA_CHANNEL3 /**< SPI1 TX is on DMA channel 3 */
|
||||
#define DMA_CHANNEL_SPI2_TX DMA_CHANNEL5 /**< SPI2 TX is on DMA channel 5 */
|
||||
#define DMA_CHANNEL_SPI3_TX DMA_CHANNEL2 /**< SPI3 TX is on DMA channel 2 */
|
||||
/** get DMA channel for SPI RX based on SPI identifier */
|
||||
#define DMA_CHANNEL_SPI_RX(x) CAT3(DMA_CHANNEL_SPI,x,_RX)
|
||||
#define DMA_CHANNEL_SPI1_RX DMA_CHANNEL4 /**< SPI1 RX is on DMA channel 4 */
|
||||
#define DMA_CHANNEL_SPI2_RX DMA_CHANNEL2 /**< SPI2 RX is on DMA channel 2 */
|
||||
#define DMA_CHANNEL_SPI3_RX DMA_CHANNEL1 /**< SPI3 RX is on DMA channel 1 */
|
||||
/** get DMA NVIC IRQ for SPI TX based on SPI identifier */
|
||||
#define DMA_IRQ_SPI_TX(x) CAT3(NVIC_DMA_CHANNEL_IRQ_SPI,x,_TX)
|
||||
#define NVIC_DMA_CHANNEL_IRQ_SPI1_TX NVIC_DMA1_CHANNEL3_IRQ /**< SPI1 TX is on DMA 1 channel 3 */
|
||||
#define NVIC_DMA_CHANNEL_IRQ_SPI2_TX NVIC_DMA1_CHANNEL5_IRQ /**< SPI2 TX is on DMA 1 channel 5 */
|
||||
#define NVIC_DMA_CHANNEL_IRQ_SPI3_TX NVIC_DMA2_CHANNEL2_IRQ /**< SPI3 TX is on DMA 2 channel 2 */
|
||||
/** get DMA NVIC IRQ for SPI RX based on SPI identifier */
|
||||
#define DMA_IRQ_SPI_RX(x) CAT3(NVIC_DMA_CHANNEL_IRQ_SPI,x,_RX)
|
||||
#define NVIC_DMA_CHANNEL_IRQ_SPI1_RX NVIC_DMA1_CHANNEL4_IRQ /**< SPI1 RX is on DMA 1 channel 4 */
|
||||
#define NVIC_DMA_CHANNEL_IRQ_SPI2_RX NVIC_DMA1_CHANNEL2_IRQ /**< SPI2 RX is on DMA 1 channel 2 */
|
||||
#define NVIC_DMA_CHANNEL_IRQ_SPI3_RX NVIC_DMA2_CHANNEL1_IRQ /**< SPI3 RX is on DMA 2 channel 1 */
|
||||
/** get DMA ISR for SPI TX based on SPI identifier */
|
||||
#define DMA_ISR_SPI_TX(x) CAT3(DMA_CHANNEL_ISR_SPI,x,_TX)
|
||||
#define DMA_CHANNEL_ISR_SPI1_TX dma1_channel3_isr /**< SPI1 TX is on DMA 1 channel 3 */
|
||||
#define DMA_CHANNEL_ISR_SPI2_TX dma1_channel5_isr /**< SPI2 TX is on DMA 1 channel 5 */
|
||||
#define DMA_CHANNEL_ISR_SPI3_TX dma2_channel2_isr /**< SPI3 TX is on DMA 2 channel 2 */
|
||||
/** get DMA ISR for SPI RX based on SPI identifier */
|
||||
#define DMA_ISR_SPI_RX(x) CAT3(DMA_CHANNEL_ISR_SPI,x,_RX)
|
||||
#define DMA_CHANNEL_ISR_SPI1_RX dma1_channel4_isr /**< SPI1 RX is on DMA 1 channel 4 */
|
||||
#define DMA_CHANNEL_ISR_SPI2_RX dma1_channel2_isr /**< SPI2 RX is on DMA 1 channel 2 */
|
||||
#define DMA_CHANNEL_ISR_SPI3_RX dma2_channel1_isr /**< SPI3 RX is on DMA 2 channel 1 */
|
||||
/** @} */
|
||||
|
||||
/** @defgroup board_led board LED GPIO
|
||||
* @{
|
||||
*/
|
||||
#if defined(SYSTEM_BOARD) || defined(CORE_BOARD)
|
||||
#define LED_PIN PA1 /**< GPIO pin (pin 11) */
|
||||
#define LED_ON 0 /**< LED is on when pin is low */
|
||||
#elif defined(BLUE_PILL)
|
||||
#if defined(MINIF401)
|
||||
#define LED_PIN PC13 /**< GPIO pin */
|
||||
#define LED_ON 0 /**< LED is on when pin is low */
|
||||
#elif defined(BLACK_PILL)
|
||||
#define LED_PIN PB12 /**< GPIO pin */
|
||||
#define LED_ON 0 /**< LED is on when pin is low */
|
||||
#elif defined(MAPLE_MINI)
|
||||
#define LED_PIN PB1 /**< GPIO pin (pin 19) */
|
||||
#define LED_ON 1 /**< LED is on when pin is high */
|
||||
#elif defined(STLINKV2) // it's sometimes a STM32F101, but it seems to have all STM32F103 features
|
||||
/* on ST-Link V2 clone dongle in aluminum case LED is on pin PA9 (remap USART1_TX if used) */
|
||||
#define LED_PIN PA9 /**< GPIO pin */
|
||||
#define LED_ON 1 /**< the color and on level depends on the clone */
|
||||
#elif defined(BLASTER)
|
||||
#define LED_PIN PA5 /**< GPIO pin */
|
||||
#define LED_ON 0 /**< red LED on when low (green LED is on when device is powered) */
|
||||
#elif defined(BUSVOODOO)
|
||||
#define LED_PIN PA8 /**< GPIO pin */
|
||||
#define LED_ON 1 /**< blue LED is on when pin is high, red LED is on when pin is low, LED is off when LED is floating */
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
/** @defgroup board_button board user button GPIO
|
||||
* @{
|
||||
*/
|
||||
#if defined(MAPLE_MINI)
|
||||
/* on maple mini user button is on 32/PB8 */
|
||||
#define BUTTON_PIN PB8 /**< GPIO pin (pin PB8 on maple mini) */
|
||||
#define BUTTON_PRESSED 1 /**< pin is high when button is pressed */
|
||||
#elif defined(CORE_BOARD)
|
||||
/* on core board user button is on PA8 */
|
||||
#define BUTTON_PIN PA8 /**< GPIO pin (pin PA8) */
|
||||
#if defined(MINIF401)
|
||||
#define BUTTON_PIN PA0 /**< GPIO pin */
|
||||
#define BUTTON_PRESSED 0 /**< pin is low when button is pressed */
|
||||
#endif
|
||||
/** @} */
|
||||
@ -689,39 +625,12 @@ int32_t adds32_safe(int32_t a, int32_t b);
|
||||
#if defined(BUTTON_PIN) && defined(BUTTON_PRESSED)
|
||||
#define DFU_FORCE_PIN BUTTON_PIN /**< button pin */
|
||||
#define DFU_FORCE_VALUE BUTTON_PRESSED /**< start DFU when button is pressed on boot */
|
||||
#elif defined(BLASTER)
|
||||
#define DFU_FORCE_PIN PA8 /**< GPIO pin (pin PA8, not SWD and UART pin on debug port) */
|
||||
#define DFU_FORCE_VALUE 0 /**< short to nearby ground connection to force DFU */
|
||||
#elif defined(BUSVOODOO)
|
||||
#if BUSVOODOO_HARDWARE_VERSION==0
|
||||
/* on BusVoodoo v0 DFU input is on PC7 */
|
||||
#define DFU_FORCE_PIN PC7 /**< GPIO pin (pin PC7) */
|
||||
#define DFU_FORCE_VALUE 1 /**< pin is pulled low, and goes high when shorted with VUSB */
|
||||
#else
|
||||
/* on BusVoodoo vA DFU input is on PC4 */
|
||||
#define DFU_FORCE_PIN PC4 /**< GPIO pin (pin PC4) */
|
||||
#define DFU_FORCE_VALUE 1 /**< pin floating, set high when shorted with nearby VCC */
|
||||
#endif
|
||||
#else
|
||||
#define DFU_FORCE_PIN PB2 /**< BOOT1 pin */
|
||||
#define DFU_FORCE_VALUE 1 /**< often connected to 0 by default to start system memory when BOOT0 = 1 */
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
/** symbol for beginning of the application
|
||||
* @note this symbol will be provided by the linker script
|
||||
*/
|
||||
extern char __application_beginning;
|
||||
/** symbol for end of the application
|
||||
* @note this symbol will be provided by the linker script
|
||||
*/
|
||||
extern char __application_end;
|
||||
/** symbol for end of flash
|
||||
* @note this symbol will be provided by the linker script
|
||||
*/
|
||||
extern char __flash_end;
|
||||
/** flag set when board user button has been pressed/released */
|
||||
extern volatile bool button_flag;
|
||||
|
||||
/** symbol for the DFU magic word
|
||||
* @note this symbol will be provided by the linker script
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user