[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); | ||||||
| 
 |  | ||||||
|     if(pin == gpio_ext_pa6.pin) { |  | ||||||
|     _this->ReadD0(); |     _this->ReadD0(); | ||||||
|     } | } | ||||||
| 
 | 
 | ||||||
|     if(pin == gpio_ext_pa7.pin) { | static void input_isr_d1(void* _ctx) { | ||||||
|  |     WIEGAND* _this = static_cast<WIEGAND*>(_ctx); | ||||||
|     _this->ReadD1(); |     _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,36 +1,8 @@ | |||||||
| /**
 |  | ||||||
|   ****************************************************************************** |  | ||||||
|   * @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) { | ||||||
| 
 |  | ||||||
| void MX_USART1_UART_Init(void) |  | ||||||
| { |  | ||||||
| 
 |  | ||||||
|     huart1.Instance = USART1; |     huart1.Instance = USART1; | ||||||
|     huart1.Init.BaudRate = 115200; |     huart1.Init.BaudRate = 115200; | ||||||
|     huart1.Init.WordLength = UART_WORDLENGTH_8B; |     huart1.Init.WordLength = UART_WORDLENGTH_8B; | ||||||
| @ -42,80 +14,42 @@ void MX_USART1_UART_Init(void) | |||||||
|     huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; |     huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; | ||||||
|     huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1; |     huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1; | ||||||
|     huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; |     huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; | ||||||
|   if (HAL_UART_Init(&huart1) != HAL_OK) | 
 | ||||||
|   { |     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(); |         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(); | ||||||
|  |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) | void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) { | ||||||
| { |  | ||||||
| 
 |  | ||||||
|     GPIO_InitTypeDef GPIO_InitStruct = {0}; |     GPIO_InitTypeDef GPIO_InitStruct = {0}; | ||||||
|   if(uartHandle->Instance==USART1) |     if(uartHandle->Instance==USART1) { | ||||||
|   { |  | ||||||
|   /* USER CODE BEGIN USART1_MspInit 0 */ |  | ||||||
| 
 | 
 | ||||||
|   /* USER CODE END USART1_MspInit 0 */ |  | ||||||
|     /* USART1 clock enable */ |  | ||||||
|         __HAL_RCC_USART1_CLK_ENABLE(); |         __HAL_RCC_USART1_CLK_ENABLE(); | ||||||
| 
 |  | ||||||
|         __HAL_RCC_GPIOB_CLK_ENABLE(); |         __HAL_RCC_GPIOB_CLK_ENABLE(); | ||||||
|     /**USART1 GPIO Configuration
 |         GPIO_InitStruct.Pin = USART1_TX_Pin|USART1_RX_Pin; | ||||||
|     PB6     ------> USART1_TX |  | ||||||
|     PB7     ------> USART1_RX |  | ||||||
|     */ |  | ||||||
|     GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7; |  | ||||||
|         GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |         GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; | ||||||
|         GPIO_InitStruct.Pull = GPIO_NOPULL; |         GPIO_InitStruct.Pull = GPIO_NOPULL; | ||||||
|         GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |         GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; | ||||||
|         GPIO_InitStruct.Alternate = GPIO_AF7_USART1; |         GPIO_InitStruct.Alternate = GPIO_AF7_USART1; | ||||||
|         HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); |         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) { | ||||||
| 
 |  | ||||||
|   if(uartHandle->Instance==USART1) |  | ||||||
|   { |  | ||||||
|   /* USER CODE BEGIN USART1_MspDeInit 0 */ |  | ||||||
| 
 |  | ||||||
|   /* USER CODE END USART1_MspDeInit 0 */ |  | ||||||
|     /* Peripheral clock disable */ |  | ||||||
|         __HAL_RCC_USART1_CLK_DISABLE(); |         __HAL_RCC_USART1_CLK_DISABLE(); | ||||||
| 
 |         HAL_GPIO_DeInit(GPIOB, USART1_TX_Pin|USART1_RX_Pin); | ||||||
|     /**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****/ |  | ||||||
|  | |||||||
| @ -19,8 +19,3 @@ void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef* htim) { | |||||||
| 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,18 +129,8 @@ 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, |  | ||||||
|     const GpioMode mode, |  | ||||||
|     const GpioPull pull, |  | ||||||
|     const GpioSpeed speed, |  | ||||||
|     const GpioAltFn alt_fn) { |  | ||||||
|     hal_gpio_init(gpio, mode, pull, speed); |  | ||||||
| 
 |  | ||||||
|     __disable_irq(); |  | ||||||
|         // enable alternate mode
 |         // enable alternate mode
 | ||||||
|         LL_GPIO_SetPinMode(gpio->port, gpio->pin, LL_GPIO_MODE_ALTERNATE); |         LL_GPIO_SetPinMode(gpio->port, gpio->pin, LL_GPIO_MODE_ALTERNATE); | ||||||
| 
 | 
 | ||||||
| @ -133,6 +140,8 @@ void hal_gpio_init_alt( | |||||||
|         } else { |         } else { | ||||||
|             LL_GPIO_SetAFPin_8_15(gpio->port, gpio->pin, alt_fn); |             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) { | ||||||
|  |         if (!api_hal_vcp->alive) { | ||||||
|             api_hal_vcp->alive = true; |             api_hal_vcp->alive = true; | ||||||
|             _api_hal_vcp_rx_callback(&ascii_soh, 1); // SOH
 |             _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); | ||||||
|  | |||||||
| @ -19,8 +19,3 @@ void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef* htim) { | |||||||
| 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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 SG
						SG