[FL-1351] Wiegand read fix (#483)
* App accessor: fix external interrupts binding. Hal: removed InterruptTypeExternalInterrupt. * GPIO hal: add ex and simple init functions to F6 target * GPIO hal: add dummy alt fn to F6 target * RFID hal: update gpio hal usage * F5,F6: synchronize targets, backport VCP fixes, cleanup. Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
parent
89d1b0546e
commit
eac8626c8c
@ -28,6 +28,9 @@ void AccessorApp::run(void) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
scenes[current_scene]->on_exit(this);
|
scenes[current_scene]->on_exit(this);
|
||||||
|
|
||||||
|
wiegand.end();
|
||||||
|
onewire_master.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
AccessorApp::AccessorApp()
|
AccessorApp::AccessorApp()
|
||||||
|
@ -35,18 +35,14 @@ bool WIEGAND::available() {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void input_isr(void* _pin, void* _ctx) {
|
static void input_isr_d0(void* _ctx) {
|
||||||
// interrupt manager get us pin constant, so...
|
|
||||||
uint32_t pin = (uint32_t)_pin;
|
|
||||||
WIEGAND* _this = static_cast<WIEGAND*>(_ctx);
|
WIEGAND* _this = static_cast<WIEGAND*>(_ctx);
|
||||||
|
_this->ReadD0();
|
||||||
|
}
|
||||||
|
|
||||||
if(pin == gpio_ext_pa6.pin) {
|
static void input_isr_d1(void* _ctx) {
|
||||||
_this->ReadD0();
|
WIEGAND* _this = static_cast<WIEGAND*>(_ctx);
|
||||||
}
|
_this->ReadD1();
|
||||||
|
|
||||||
if(pin == gpio_ext_pa7.pin) {
|
|
||||||
_this->ReadD1();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WIEGAND::begin() {
|
void WIEGAND::begin() {
|
||||||
@ -60,11 +56,19 @@ void WIEGAND::begin() {
|
|||||||
const GpioPin* pinD0 = &gpio_ext_pa6;
|
const GpioPin* pinD0 = &gpio_ext_pa6;
|
||||||
const GpioPin* pinD1 = &gpio_ext_pa7;
|
const GpioPin* pinD1 = &gpio_ext_pa7;
|
||||||
|
|
||||||
hal_gpio_init(pinD0, GpioModeInterruptFall, GpioPullNo, GpioSpeedLow); // Set D0 pin as input
|
hal_gpio_init_simple(pinD0, GpioModeInterruptFall); // Set D0 pin as input
|
||||||
hal_gpio_init(pinD1, GpioModeInterruptFall, GpioPullNo, GpioSpeedLow); // Set D1 pin as input
|
hal_gpio_init_simple(pinD1, GpioModeInterruptFall); // Set D1 pin as input
|
||||||
|
|
||||||
api_interrupt_add(
|
hal_gpio_add_int_callback(pinD0, input_isr_d0, this);
|
||||||
input_isr, InterruptTypeExternalInterrupt, this); // Hardware interrupt - high to low pulse
|
hal_gpio_add_int_callback(pinD1, input_isr_d1, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WIEGAND::end() {
|
||||||
|
hal_gpio_remove_int_callback(&gpio_ext_pa6);
|
||||||
|
hal_gpio_remove_int_callback(&gpio_ext_pa7);
|
||||||
|
|
||||||
|
hal_gpio_init_simple(&gpio_ext_pa6, GpioModeAnalog);
|
||||||
|
hal_gpio_init_simple(&gpio_ext_pa7, GpioModeAnalog);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WIEGAND::ReadD0() {
|
void WIEGAND::ReadD0() {
|
||||||
|
@ -4,6 +4,7 @@ class WIEGAND {
|
|||||||
public:
|
public:
|
||||||
WIEGAND();
|
WIEGAND();
|
||||||
void begin();
|
void begin();
|
||||||
|
void end();
|
||||||
bool available();
|
bool available();
|
||||||
unsigned long getCode();
|
unsigned long getCode();
|
||||||
unsigned long getCodeHigh();
|
unsigned long getCodeHigh();
|
||||||
|
@ -14,7 +14,6 @@ typedef enum {
|
|||||||
InterruptTypeComparatorTrigger,
|
InterruptTypeComparatorTrigger,
|
||||||
InterruptTypeTimerOutputCompare,
|
InterruptTypeTimerOutputCompare,
|
||||||
InterruptTypeTimerUpdate,
|
InterruptTypeTimerUpdate,
|
||||||
InterruptTypeExternalInterrupt,
|
|
||||||
} InterruptType;
|
} InterruptType;
|
||||||
|
|
||||||
/** Interrupt callback type */
|
/** Interrupt callback type */
|
||||||
|
@ -86,6 +86,11 @@ void Error_Handler(void);
|
|||||||
#define iBTN_GPIO_Port GPIOB
|
#define iBTN_GPIO_Port GPIOB
|
||||||
#define iBTN_Pin GPIO_PIN_14
|
#define iBTN_Pin GPIO_PIN_14
|
||||||
|
|
||||||
|
#define USART1_TX_Pin GPIO_PIN_6
|
||||||
|
#define USART1_TX_Port GPIOB
|
||||||
|
#define USART1_RX_Pin GPIO_PIN_7
|
||||||
|
#define USART1_RX_Port GPIOB
|
||||||
|
|
||||||
#define SPI_D_MISO_GPIO_Port GPIOC
|
#define SPI_D_MISO_GPIO_Port GPIOC
|
||||||
#define SPI_D_MISO_Pin GPIO_PIN_2
|
#define SPI_D_MISO_Pin GPIO_PIN_2
|
||||||
#define SPI_D_MOSI_GPIO_Port GPIOB
|
#define SPI_D_MOSI_GPIO_Port GPIOB
|
||||||
|
@ -4,12 +4,12 @@ void MX_GPIO_Init(void) {
|
|||||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
|
|
||||||
/* GPIO Ports Clock Enable */
|
/* GPIO Ports Clock Enable */
|
||||||
__HAL_RCC_GPIOC_CLK_ENABLE();
|
|
||||||
__HAL_RCC_GPIOH_CLK_ENABLE();
|
|
||||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
|
||||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
__HAL_RCC_GPIOE_CLK_ENABLE();
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
__HAL_RCC_GPIOD_CLK_ENABLE();
|
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOE_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOH_CLK_ENABLE();
|
||||||
|
|
||||||
/*Configure GPIO pin Output Level */
|
/*Configure GPIO pin Output Level */
|
||||||
HAL_GPIO_WritePin(GPIOA, RF_SW_0_Pin|RF_SW_1_Pin, GPIO_PIN_RESET);
|
HAL_GPIO_WritePin(GPIOA, RF_SW_0_Pin|RF_SW_1_Pin, GPIO_PIN_RESET);
|
||||||
@ -135,13 +135,22 @@ void MX_GPIO_Init(void) {
|
|||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||||
HAL_GPIO_Init(CC1101_CS_GPIO_Port, &GPIO_InitStruct);
|
HAL_GPIO_Init(CC1101_CS_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
/* EXTI interrupt init*/
|
/* Enable all NVIC lines related to gpio */
|
||||||
|
HAL_NVIC_SetPriority(EXTI0_IRQn, 5, 0);
|
||||||
|
HAL_NVIC_EnableIRQ(EXTI0_IRQn);
|
||||||
|
|
||||||
HAL_NVIC_SetPriority(EXTI1_IRQn, 5, 0);
|
HAL_NVIC_SetPriority(EXTI1_IRQn, 5, 0);
|
||||||
HAL_NVIC_EnableIRQ(EXTI1_IRQn);
|
HAL_NVIC_EnableIRQ(EXTI1_IRQn);
|
||||||
|
|
||||||
|
HAL_NVIC_SetPriority(EXTI2_IRQn, 5, 0);
|
||||||
|
HAL_NVIC_EnableIRQ(EXTI2_IRQn);
|
||||||
|
|
||||||
HAL_NVIC_SetPriority(EXTI3_IRQn, 5, 0);
|
HAL_NVIC_SetPriority(EXTI3_IRQn, 5, 0);
|
||||||
HAL_NVIC_EnableIRQ(EXTI3_IRQn);
|
HAL_NVIC_EnableIRQ(EXTI3_IRQn);
|
||||||
|
|
||||||
|
HAL_NVIC_SetPriority(EXTI4_IRQn, 5, 0);
|
||||||
|
HAL_NVIC_EnableIRQ(EXTI4_IRQn);
|
||||||
|
|
||||||
HAL_NVIC_SetPriority(EXTI9_5_IRQn, 5, 0);
|
HAL_NVIC_SetPriority(EXTI9_5_IRQn, 5, 0);
|
||||||
HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
|
HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
|
||||||
|
|
||||||
|
@ -1,121 +1,55 @@
|
|||||||
/**
|
|
||||||
******************************************************************************
|
|
||||||
* @file usart.c
|
|
||||||
* @brief This file provides code for the configuration
|
|
||||||
* of the USART instances.
|
|
||||||
******************************************************************************
|
|
||||||
* @attention
|
|
||||||
*
|
|
||||||
* <h2><center>© Copyright (c) 2021 STMicroelectronics.
|
|
||||||
* All rights reserved.</center></h2>
|
|
||||||
*
|
|
||||||
* This software component is licensed by ST under Ultimate Liberty license
|
|
||||||
* SLA0044, the "License"; You may not use this file except in compliance with
|
|
||||||
* the License. You may obtain a copy of the License at:
|
|
||||||
* www.st.com/SLA0044
|
|
||||||
*
|
|
||||||
******************************************************************************
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
#include "usart.h"
|
#include "usart.h"
|
||||||
|
|
||||||
/* USER CODE BEGIN 0 */
|
|
||||||
|
|
||||||
/* USER CODE END 0 */
|
|
||||||
|
|
||||||
UART_HandleTypeDef huart1;
|
UART_HandleTypeDef huart1;
|
||||||
|
|
||||||
/* USART1 init function */
|
void MX_USART1_UART_Init(void) {
|
||||||
|
huart1.Instance = USART1;
|
||||||
|
huart1.Init.BaudRate = 115200;
|
||||||
|
huart1.Init.WordLength = UART_WORDLENGTH_8B;
|
||||||
|
huart1.Init.StopBits = UART_STOPBITS_1;
|
||||||
|
huart1.Init.Parity = UART_PARITY_NONE;
|
||||||
|
huart1.Init.Mode = UART_MODE_TX_RX;
|
||||||
|
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
||||||
|
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
|
||||||
|
huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
|
||||||
|
huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
|
||||||
|
huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
|
||||||
|
|
||||||
void MX_USART1_UART_Init(void)
|
if (HAL_UART_Init(&huart1) != HAL_OK) {
|
||||||
{
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
huart1.Instance = USART1;
|
if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK) {
|
||||||
huart1.Init.BaudRate = 115200;
|
Error_Handler();
|
||||||
huart1.Init.WordLength = UART_WORDLENGTH_8B;
|
}
|
||||||
huart1.Init.StopBits = UART_STOPBITS_1;
|
|
||||||
huart1.Init.Parity = UART_PARITY_NONE;
|
|
||||||
huart1.Init.Mode = UART_MODE_TX_RX;
|
|
||||||
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
|
||||||
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
|
|
||||||
huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
|
|
||||||
huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
|
|
||||||
huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
|
|
||||||
if (HAL_UART_Init(&huart1) != HAL_OK)
|
|
||||||
{
|
|
||||||
Error_Handler();
|
|
||||||
}
|
|
||||||
if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
|
|
||||||
{
|
|
||||||
Error_Handler();
|
|
||||||
}
|
|
||||||
if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
|
|
||||||
{
|
|
||||||
Error_Handler();
|
|
||||||
}
|
|
||||||
if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
|
|
||||||
{
|
|
||||||
Error_Handler();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK) {
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK) {
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
|
void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) {
|
||||||
{
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
|
if(uartHandle->Instance==USART1) {
|
||||||
|
|
||||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
__HAL_RCC_USART1_CLK_ENABLE();
|
||||||
if(uartHandle->Instance==USART1)
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
{
|
GPIO_InitStruct.Pin = USART1_TX_Pin|USART1_RX_Pin;
|
||||||
/* USER CODE BEGIN USART1_MspInit 0 */
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
/* USER CODE END USART1_MspInit 0 */
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
/* USART1 clock enable */
|
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
|
||||||
__HAL_RCC_USART1_CLK_ENABLE();
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
}
|
||||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
|
||||||
/**USART1 GPIO Configuration
|
|
||||||
PB6 ------> USART1_TX
|
|
||||||
PB7 ------> USART1_RX
|
|
||||||
*/
|
|
||||||
GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
|
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
||||||
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
|
|
||||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
|
||||||
|
|
||||||
/* USER CODE BEGIN USART1_MspInit 1 */
|
|
||||||
|
|
||||||
/* USER CODE END USART1_MspInit 1 */
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
|
void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) {
|
||||||
{
|
if(uartHandle->Instance==USART1) {
|
||||||
|
__HAL_RCC_USART1_CLK_DISABLE();
|
||||||
if(uartHandle->Instance==USART1)
|
HAL_GPIO_DeInit(GPIOB, USART1_TX_Pin|USART1_RX_Pin);
|
||||||
{
|
}
|
||||||
/* USER CODE BEGIN USART1_MspDeInit 0 */
|
|
||||||
|
|
||||||
/* USER CODE END USART1_MspDeInit 0 */
|
|
||||||
/* Peripheral clock disable */
|
|
||||||
__HAL_RCC_USART1_CLK_DISABLE();
|
|
||||||
|
|
||||||
/**USART1 GPIO Configuration
|
|
||||||
PB6 ------> USART1_TX
|
|
||||||
PB7 ------> USART1_RX
|
|
||||||
*/
|
|
||||||
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6|GPIO_PIN_7);
|
|
||||||
|
|
||||||
/* USER CODE BEGIN USART1_MspDeInit 1 */
|
|
||||||
|
|
||||||
/* USER CODE END USART1_MspDeInit 1 */
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* USER CODE BEGIN 1 */
|
|
||||||
|
|
||||||
/* USER CODE END 1 */
|
|
||||||
|
|
||||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
|
||||||
|
@ -18,9 +18,4 @@ void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef* htim) {
|
|||||||
/* Timer update event */
|
/* Timer update event */
|
||||||
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim) {
|
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim) {
|
||||||
api_interrupt_call(InterruptTypeTimerUpdate, htim);
|
api_interrupt_call(InterruptTypeTimerUpdate, htim);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* External interrupt event */
|
|
||||||
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
|
|
||||||
api_interrupt_call(InterruptTypeExternalInterrupt, (void*)(uint32_t)GPIO_Pin);
|
|
||||||
}
|
|
@ -152,7 +152,7 @@ void MX_GPIO_Init(void) {
|
|||||||
GPIO_InitStruct.Pin = CC1101_CS_Pin;
|
GPIO_InitStruct.Pin = CC1101_CS_Pin;
|
||||||
HAL_GPIO_Init(CC1101_CS_GPIO_Port, &GPIO_InitStruct);
|
HAL_GPIO_Init(CC1101_CS_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
/* EXTI interrupt init*/
|
/* Enable all NVIC lines related to gpio */
|
||||||
HAL_NVIC_SetPriority(EXTI0_IRQn, 5, 0);
|
HAL_NVIC_SetPriority(EXTI0_IRQn, 5, 0);
|
||||||
HAL_NVIC_EnableIRQ(EXTI0_IRQn);
|
HAL_NVIC_EnableIRQ(EXTI0_IRQn);
|
||||||
|
|
||||||
|
@ -41,11 +41,28 @@ static uint8_t hal_gpio_get_pin_num(const GpioPin* gpio) {
|
|||||||
return pin_num;
|
return pin_num;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void hal_gpio_init_simple(const GpioPin* gpio, const GpioMode mode) {
|
||||||
|
hal_gpio_init(gpio, mode, GpioPullNo, GpioSpeedLow);
|
||||||
|
}
|
||||||
|
|
||||||
void hal_gpio_init(
|
void hal_gpio_init(
|
||||||
const GpioPin* gpio,
|
const GpioPin* gpio,
|
||||||
const GpioMode mode,
|
const GpioMode mode,
|
||||||
const GpioPull pull,
|
const GpioPull pull,
|
||||||
const GpioSpeed speed) {
|
const GpioSpeed speed) {
|
||||||
|
// we cannot set alternate mode in this function
|
||||||
|
furi_assert(mode != GpioModeAltFunctionPushPull);
|
||||||
|
furi_assert(mode != GpioModeAltFunctionOpenDrain);
|
||||||
|
|
||||||
|
hal_gpio_init_ex(gpio, mode, GpioPullNo, GpioSpeedLow, GpioAltFnUnused);
|
||||||
|
}
|
||||||
|
|
||||||
|
void hal_gpio_init_ex(
|
||||||
|
const GpioPin* gpio,
|
||||||
|
const GpioMode mode,
|
||||||
|
const GpioPull pull,
|
||||||
|
const GpioSpeed speed,
|
||||||
|
const GpioAltFn alt_fn) {
|
||||||
uint32_t sys_exti_port = GET_SYSCFG_EXTI_PORT(gpio->port);
|
uint32_t sys_exti_port = GET_SYSCFG_EXTI_PORT(gpio->port);
|
||||||
uint32_t sys_exti_line = GET_SYSCFG_EXTI_LINE(gpio->pin);
|
uint32_t sys_exti_line = GET_SYSCFG_EXTI_LINE(gpio->pin);
|
||||||
uint32_t exti_line = GET_EXTI_LINE(gpio->pin);
|
uint32_t exti_line = GET_EXTI_LINE(gpio->pin);
|
||||||
@ -112,27 +129,19 @@ void hal_gpio_init(
|
|||||||
LL_GPIO_SetPinMode(gpio->port, gpio->pin, LL_GPIO_MODE_ANALOG);
|
LL_GPIO_SetPinMode(gpio->port, gpio->pin, LL_GPIO_MODE_ANALOG);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
__enable_irq();
|
|
||||||
}
|
|
||||||
|
|
||||||
void hal_gpio_init_alt(
|
if(mode == GpioModeAltFunctionPushPull || mode == GpioModeAltFunctionOpenDrain) {
|
||||||
const GpioPin* gpio,
|
// enable alternate mode
|
||||||
const GpioMode mode,
|
LL_GPIO_SetPinMode(gpio->port, gpio->pin, LL_GPIO_MODE_ALTERNATE);
|
||||||
const GpioPull pull,
|
|
||||||
const GpioSpeed speed,
|
|
||||||
const GpioAltFn alt_fn) {
|
|
||||||
hal_gpio_init(gpio, mode, pull, speed);
|
|
||||||
|
|
||||||
__disable_irq();
|
// set alternate function
|
||||||
// enable alternate mode
|
if(hal_gpio_get_pin_num(gpio) < 8) {
|
||||||
LL_GPIO_SetPinMode(gpio->port, gpio->pin, LL_GPIO_MODE_ALTERNATE);
|
LL_GPIO_SetAFPin_0_7(gpio->port, gpio->pin, alt_fn);
|
||||||
|
} else {
|
||||||
// set alternate function
|
LL_GPIO_SetAFPin_8_15(gpio->port, gpio->pin, alt_fn);
|
||||||
if(hal_gpio_get_pin_num(gpio) < 8) {
|
}
|
||||||
LL_GPIO_SetAFPin_0_7(gpio->port, gpio->pin, alt_fn);
|
|
||||||
} else {
|
|
||||||
LL_GPIO_SetAFPin_8_15(gpio->port, gpio->pin, alt_fn);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
__enable_irq();
|
__enable_irq();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -153,6 +153,8 @@ typedef enum {
|
|||||||
GpioAltFn14LPTIM2 = 14, /*!< LPTIM2 Alternate Function mapping */
|
GpioAltFn14LPTIM2 = 14, /*!< LPTIM2 Alternate Function mapping */
|
||||||
|
|
||||||
GpioAltFn15EVENTOUT = 15, /*!< EVENTOUT Alternate Function mapping */
|
GpioAltFn15EVENTOUT = 15, /*!< EVENTOUT Alternate Function mapping */
|
||||||
|
|
||||||
|
GpioAltFnUnused = 16, /*!< just dummy value */
|
||||||
} GpioAltFn;
|
} GpioAltFn;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -164,7 +166,14 @@ typedef struct {
|
|||||||
} GpioPin;
|
} GpioPin;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GPIO initialization function
|
* GPIO initialization function, simple version
|
||||||
|
* @param gpio GpioPin
|
||||||
|
* @param mode GpioMode
|
||||||
|
*/
|
||||||
|
void hal_gpio_init_simple(const GpioPin* gpio, const GpioMode mode);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GPIO initialization function, normal version
|
||||||
* @param gpio GpioPin
|
* @param gpio GpioPin
|
||||||
* @param mode GpioMode
|
* @param mode GpioMode
|
||||||
* @param pull GpioPull
|
* @param pull GpioPull
|
||||||
@ -177,14 +186,14 @@ void hal_gpio_init(
|
|||||||
const GpioSpeed speed);
|
const GpioSpeed speed);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GPIO initialization with alternative function
|
* GPIO initialization function, extended version
|
||||||
* @param gpio GpioPin
|
* @param gpio GpioPin
|
||||||
* @param mode GpioMode
|
* @param mode GpioMode
|
||||||
* @param pull GpioPull
|
* @param pull GpioPull
|
||||||
* @param speed GpioSpeed
|
* @param speed GpioSpeed
|
||||||
* @param alt_fn GpioAltFn
|
* @param alt_fn GpioAltFn
|
||||||
*/
|
*/
|
||||||
void hal_gpio_init_alt(
|
void hal_gpio_init_ex(
|
||||||
const GpioPin* gpio,
|
const GpioPin* gpio,
|
||||||
const GpioMode mode,
|
const GpioMode mode,
|
||||||
const GpioPull pull,
|
const GpioPull pull,
|
||||||
|
@ -26,7 +26,7 @@ void api_hal_rfid_pins_emulate() {
|
|||||||
api_hal_ibutton_pin_low();
|
api_hal_ibutton_pin_low();
|
||||||
|
|
||||||
// pull pin to timer out
|
// pull pin to timer out
|
||||||
hal_gpio_init_alt(
|
hal_gpio_init_ex(
|
||||||
&gpio_rfid_pull, GpioModeOutputPushPull, GpioSpeedLow, GpioPullNo, GpioAltFn1TIM1);
|
&gpio_rfid_pull, GpioModeOutputPushPull, GpioSpeedLow, GpioPullNo, GpioAltFn1TIM1);
|
||||||
|
|
||||||
// pull rfid antenna from carrier side
|
// pull rfid antenna from carrier side
|
||||||
@ -44,7 +44,7 @@ void api_hal_rfid_pins_read() {
|
|||||||
hal_gpio_write(&gpio_rfid_pull, false);
|
hal_gpio_write(&gpio_rfid_pull, false);
|
||||||
|
|
||||||
// carrier pin to timer out
|
// carrier pin to timer out
|
||||||
hal_gpio_init_alt(
|
hal_gpio_init_ex(
|
||||||
&gpio_rfid_carrier_out, GpioModeOutputPushPull, GpioSpeedLow, GpioPullNo, GpioAltFn1TIM1);
|
&gpio_rfid_carrier_out, GpioModeOutputPushPull, GpioSpeedLow, GpioPullNo, GpioAltFn1TIM1);
|
||||||
|
|
||||||
// comparator in
|
// comparator in
|
||||||
|
@ -46,11 +46,15 @@ void _api_hal_vcp_control_line(uint8_t state) {
|
|||||||
bool rts = state & 0b10;
|
bool rts = state & 0b10;
|
||||||
|
|
||||||
if (rts) {
|
if (rts) {
|
||||||
api_hal_vcp->alive = true;
|
if (!api_hal_vcp->alive) {
|
||||||
_api_hal_vcp_rx_callback(&ascii_soh, 1); // SOH
|
api_hal_vcp->alive = true;
|
||||||
|
_api_hal_vcp_rx_callback(&ascii_soh, 1); // SOH
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
api_hal_vcp->alive = false;
|
if (api_hal_vcp->alive) {
|
||||||
_api_hal_vcp_rx_callback(&ascii_eot, 1); // EOT
|
_api_hal_vcp_rx_callback(&ascii_eot, 1); // EOT
|
||||||
|
api_hal_vcp->alive = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
osSemaphoreRelease(api_hal_vcp->tx_semaphore);
|
osSemaphoreRelease(api_hal_vcp->tx_semaphore);
|
||||||
|
@ -18,9 +18,4 @@ void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef* htim) {
|
|||||||
/* Timer update event */
|
/* Timer update event */
|
||||||
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim) {
|
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim) {
|
||||||
api_interrupt_call(InterruptTypeTimerUpdate, htim);
|
api_interrupt_call(InterruptTypeTimerUpdate, htim);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* External interrupt event */
|
|
||||||
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
|
|
||||||
api_interrupt_call(InterruptTypeExternalInterrupt, (void*)(uint32_t)GPIO_Pin);
|
|
||||||
}
|
|
@ -66,13 +66,6 @@ extern "C"{
|
|||||||
* Some useful macro definitions *
|
* Some useful macro definitions *
|
||||||
* -------------------------------- */
|
* -------------------------------- */
|
||||||
|
|
||||||
#ifndef MAX
|
|
||||||
#define MAX( x, y ) (((x)>(y))?(x):(y))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef MIN
|
|
||||||
#define MIN( x, y ) (((x)<(y))?(x):(y))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define MODINC( a, m ) M_BEGIN (a)++; if ((a)>=(m)) (a)=0; M_END
|
#define MODINC( a, m ) M_BEGIN (a)++; if ((a)>=(m)) (a)=0; M_END
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user