140 lines
4.5 KiB
C
140 lines
4.5 KiB
C
/* -*- mode: c; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4; coding: utf-8 -*- */
|
|
/************************************************************************************
|
|
** **
|
|
** UHSDR **
|
|
** a powerful firmware for STM32 based SDR transceivers **
|
|
** **
|
|
**---------------------------------------------------------------------------------**
|
|
** **
|
|
** File name: **
|
|
** Description: **
|
|
** Last Modified: **
|
|
** Licence: GNU GPLv3 **
|
|
************************************************************************************/
|
|
|
|
#include "uhsdr_boot_hw.h"
|
|
|
|
|
|
static GPIO_TypeDef* GPIO_PORT[LEDn] = {LEDGREEN_GPIO_PORT, LEDRED_GPIO_PORT, POWER_ON_GPIO_PORT, BACKLIGHT_ON_GPIO_PORT, TP_CS_PIO};
|
|
static const uint16_t GPIO_PIN[LEDn] = {LEDGREEN_PIN, LEDRED_PIN, POWER_ON_PIN, BACKLIGHT_ON_PIN, TP_CS};
|
|
|
|
static GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {BANDM_BUTTON_GPIO_PORT,POWER_BUTTON_GPIO_PORT, BANDP_BUTTON_GPIO_PORT};
|
|
|
|
static const uint16_t BUTTON_PIN[BUTTONn] = {BANDM_BUTTON_PIN,POWER_BUTTON_PIN, BANDP_BUTTON_PIN};
|
|
|
|
static const uint8_t BUTTON_IRQn[BUTTONn] = {BANDM_BUTTON_EXTI_IRQn,POWER_BUTTON_EXTI_IRQn,BANDP_BUTTON_EXTI_IRQn};
|
|
|
|
void mchfBl_PortClock(uint32_t port)
|
|
{
|
|
|
|
/* Enable the BUTTON Clock */
|
|
switch(port)
|
|
{
|
|
case (uint32_t)GPIOA:
|
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
|
break;
|
|
case (uint32_t)GPIOB:
|
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
|
break;
|
|
case (uint32_t)GPIOC:
|
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
|
break;
|
|
case (uint32_t)GPIOD:
|
|
__HAL_RCC_GPIOD_CLK_ENABLE();
|
|
break;
|
|
#if 0
|
|
case (uint32_t)GPIOE:
|
|
__HAL_RCC_GPIOE_CLK_ENABLE();
|
|
break;
|
|
case (uint32_t)GPIOF:
|
|
__HAL_RCC_GPIOF_CLK_ENABLE();
|
|
break;
|
|
case (uint32_t)GPIOG:
|
|
__HAL_RCC_GPIOG_CLK_ENABLE();
|
|
break;
|
|
case (uint32_t)GPIOH:
|
|
__HAL_RCC_GPIOH_CLK_ENABLE();
|
|
break;
|
|
case (uint32_t)GPIOI:
|
|
__HAL_RCC_GPIOI_CLK_ENABLE();
|
|
break;
|
|
#endif
|
|
}
|
|
}
|
|
|
|
void mchfBl_LEDInit(Led_TypeDef Led)
|
|
{
|
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|
|
|
mchfBl_PortClock((uint32_t)GPIO_PORT[Led]);
|
|
/* Enable the GPIO_LED Clock */
|
|
|
|
/* Configure the GPIO_LED pin */
|
|
GPIO_InitStructure.Pin = GPIO_PIN[Led];
|
|
GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
|
|
GPIO_InitStructure.Pull = GPIO_PULLUP;
|
|
GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
|
|
|
|
HAL_GPIO_Init(GPIO_PORT[Led], &GPIO_InitStructure);
|
|
}
|
|
|
|
void mchfBl_PinOn(Led_TypeDef Led)
|
|
{
|
|
GPIO_SetBits(GPIO_PORT[Led],GPIO_PIN[Led])
|
|
}
|
|
|
|
void mchfBl_PinOff(Led_TypeDef Led)
|
|
{
|
|
GPIO_ResetBits(GPIO_PORT[Led],GPIO_PIN[Led])
|
|
}
|
|
|
|
void mchfBl_PinToggle(Led_TypeDef Led)
|
|
{
|
|
GPIO_PORT[Led]->ODR ^= GPIO_PIN[Led];
|
|
}
|
|
|
|
void mchfBl_ButtonInit(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode)
|
|
{
|
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|
|
|
mchfBl_PortClock((uint32_t)BUTTON_PORT[Button]);
|
|
|
|
/* Configure Button pin as input */
|
|
GPIO_InitStructure.Mode = GPIO_MODE_INPUT;
|
|
GPIO_InitStructure.Pull = GPIO_PULLUP;
|
|
GPIO_InitStructure.Pin = BUTTON_PIN[Button];
|
|
GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
|
|
|
|
if (Button_Mode == BUTTON_MODE_EXTI)
|
|
{
|
|
/* Configure Button EXTI line */
|
|
GPIO_InitStructure.Mode = GPIO_MODE_EVT_FALLING;
|
|
|
|
|
|
/* Enable and set Button EXTI Interrupt to the lowest priority */
|
|
HAL_NVIC_EnableIRQ(BUTTON_IRQn[Button]);
|
|
HAL_NVIC_SetPriority(BUTTON_IRQn[Button],15,0);
|
|
}
|
|
HAL_GPIO_Init(BUTTON_PORT[Button], &GPIO_InitStructure);
|
|
}
|
|
|
|
uint32_t mchfBl_ButtonGetState(Button_TypeDef Button)
|
|
{
|
|
return HAL_GPIO_ReadPin(BUTTON_PORT[Button], BUTTON_PIN[Button]);
|
|
}
|
|
|
|
void mcHF_PowerOff()
|
|
{
|
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|
|
|
GPIO_InitStructure.Mode = GPIO_MODE_INPUT;
|
|
GPIO_InitStructure.Pull = GPIO_PULLUP;
|
|
GPIO_InitStructure.Pin = GPIO_PIN[PWR_HOLD];
|
|
GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
|
|
|
|
HAL_GPIO_Init(GPIO_PORT[PWR_HOLD], &GPIO_InitStructure);
|
|
|
|
while(1) { asm("nop"); }
|
|
// never reached
|
|
}
|