| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314 |
- /**
- ******************************************************************************
- * @file py32f0xx_hal_led.c
- * @author MCU Application Team
- * @brief LED HAL module driver.
- ******************************************************************************
- * @attention
- *
- * <h2><center>© Copyright (c) 2023 Puya Semiconductor Co.
- * All rights reserved.</center></h2>
- *
- * This software component is licensed by Puya under BSD 3-Clause license,
- * the "License"; You may not use this file except in compliance with the
- * License. You may obtain a copy of the License at:
- * opensource.org/licenses/BSD-3-Clause
- *
- ******************************************************************************
- * @attention
- *
- * <h2><center>© Copyright (c) 2016 STMicroelectronics.
- * All rights reserved.</center></h2>
- *
- * This software component is licensed by ST under BSD 3-Clause license,
- * the "License"; You may not use this file except in compliance with the
- * License. You may obtain a copy of the License at:
- * opensource.org/licenses/BSD-3-Clause
- *
- ******************************************************************************
- */
- /* Includes ------------------------------------------------------------------*/
- #include "py32f0xx_hal.h"
- /** @addtogroup PY32F0xx_HAL_Driver
- * @{
- */
- #ifdef HAL_LED_MODULE_ENABLED
- /** @defgroup LED LED
- * @brief LED HAL module driver
- * @{
- */
- /* Private Functions --------------------------------------------------------*/
- /** @defgroup LED_Private_Functions LED Private Functions
- * @{
- */
- static void LED_SetConfig(LED_HandleTypeDef *hled);
- /**
- * @}
- */
- /* Private Functions --------------------------------------------------------*/
- /** @defgroup LED_Private_Functions LED Private Functions
- * @{
- */
- /**
- * @brief LED Register config
- * @param hled Pointer to a LED_HandleTypeDef structure that contains
- * the configuration information for the specified LED..
- * @retval State
- */
- static void LED_SetConfig(LED_HandleTypeDef *hled)
- {
- uint32_t tmpreg;
- tmpreg=hled->Init.ComDrive | (hled->Init.ComNum << LED_CR_LED_COM_SEL_Pos);
- MODIFY_REG(hled->Instance->CR,
- (uint32_t)(LED_CR_LED_COM_SEL | LED_CR_EHS),
- tmpreg);
- WRITE_REG(hled->Instance->PR, hled->Init.Prescaler);
- WRITE_REG(hled->Instance->TR, (hled->Init.LightTime | (hled->Init.DeadTime<<LED_TR_T2_Pos)));
- }
- /**
- * @}
- */
- /* Exported Functions --------------------------------------------------------*/
- /** @defgroup LED_Exported_Functions LED Exported Functions
- * @{
- */
- /** @defgroup LED_Exported_Functions_Group1 Initialization/de-initialization functions
- * @brief Initialization and Configuration functions
- * @{
- */
- /**
- * @brief Initializes the LED according to the specified parameters
- * in the LED_InitTypeDef and initialize the associated handle.
- * @param hled Pointer to a LED_HandleTypeDef structure that contains
- * the configuration information for the specified LED.
- * @retval HAL status
- */
- HAL_StatusTypeDef HAL_LED_Init(LED_HandleTypeDef *hled)
- {
- /* Check the LED handle allocation */
- if (hled == NULL)
- {
- return HAL_ERROR;
- }
-
- /* Check the parameters */
- assert_param(IS_LED_ALL_INSTANCE(hled->Instance));
- assert_param(IS_LED_COM_DRIVE(hled->Init.ComDrive));
- assert_param(IS_LED_PRISCALER(hled->Init.Prescaler));
- assert_param(IS_LED_COM_NUM(hled->Init.ComNum));
- assert_param(IS_LED_LIGHT_TIME(hled->Init.LightTime));
- assert_param(IS_LED_DEAD_TIME(hled->Init.DeadTime));
- if (hled->State == HAL_LED_STATE_RESET)
- {
- /* Allocate lock resource and initialize it */
- __HAL_UNLOCK(hled);
-
- #if (USE_HAL_LED_REGISTER_CALLBACKS == 1)
- /* Reset Callback pointers */
- if (hled->EwiCallback == NULL)
- {
- hled->EwiCallback = HAL_LED_LightCpltCallback;
- }
-
- if (hled->MspInitCallback == NULL)
- {
- hled->MspInitCallback = HAL_LED_MspInit;
- }
-
- /* Init the low level hardware */
- hled->MspInitCallback(hwwdg);
- #else
- HAL_LED_MspInit(hled);
- #endif
- }
-
- hled->State = HAL_LED_STATE_BUSY;
-
- /* LED Register config */
- LED_SetConfig(hled);
-
- /* Enable the peripheral */
- __HAL_LED_ENABLE(hled);
- /* Initialize the LED state */
- hled->State= HAL_LED_STATE_READY;
-
- return HAL_OK;
- }
- /**
- * @brief De-initializes the LED peripheral registers to their default reset values.
- * @param hled Pointer to a LED_HandleTypeDef structure that contains
- * the configuration information for the specified LED.
- * @retval HAL status
- */
- HAL_StatusTypeDef HAL_LED_DeInit(LED_HandleTypeDef *hled)
- {
- if (hled == NULL)
- {
- return HAL_ERROR;
- }
- /* Check the parameters */
- assert_param(IS_LED_ALL_INSTANCE(hled->Instance));
- hled->Instance->CR = 0x00;
- hled->Instance->PR = 0x00;
- hled->Instance->DR0 = 0x00;
- hled->Instance->DR1 = 0x00;
- hled->Instance->DR2 = 0x00;
- hled->Instance->DR3 = 0x00;
- hled->Instance->IR = 0x01;
- hled->State = HAL_LED_STATE_RESET;
-
- /* Release Lock */
- __HAL_UNLOCK(hled);
-
- return HAL_OK;
- }
- /**
- * @}
- */
- /** @defgroup LED_Exported_Functions_Group2 LED Operation Functions
- * @brief LED operation functions
- * @{
- */
- /**
- * @brief Sets the specified COM display value
- * @param hled Pointer to a LED_HandleTypeDef structure that contains
- * the configuration information for the specified LED..
- * @param comCh Specify COM channels.
- * @arg @ref LED_COM0
- * @arg @ref LED_COM1
- * @arg @ref LED_COM2
- * @arg @ref LED_COM3
- * @arg @ref LED_COM_ALL
- * @param data Specify display values
- * @arg @ref LED_DISP_0 display value 0
- * @arg @ref LED_DISP_1 display value 1
- * @arg @ref LED_DISP_2 display value 2
- * @arg @ref LED_DISP_3 display value 3
- * @arg @ref LED_DISP_4 display value 4
- * @arg @ref LED_DISP_5 display value 5
- * @arg @ref LED_DISP_6 display value 6
- * @arg @ref LED_DISP_7 display value 7
- * @arg @ref LED_DISP_8 display value 8
- * @arg @ref LED_DISP_9 display value 9
- * @arg @ref LED_DISP_A display character A
- * @arg @ref LED_DISP_B display character B
- * @arg @ref LED_DISP_C display character C
- * @arg @ref LED_DISP_D display character D
- * @arg @ref LED_DISP_E display character E
- * @arg @ref LED_DISP_F display character F
- * @arg @ref LED_DISP_H display character H
- * @arg @ref LED_DISP_P display character P
- * @arg @ref LED_DISP_U display character U
- * @arg @ref LED_DISP_DOT display .
- * @arg @ref LED_DISP_FULL display 8.
- * @arg @ref LED_DISP_NONE display nothing
- * @retval State
- */
- HAL_StatusTypeDef HAL_LED_SetComDisplay(LED_HandleTypeDef *hled, uint8_t comCh, uint8_t data)
- {
- uint32_t position=0x00U;
- uint32_t chcurrent = 0x00U;
- uint32_t *pTmp;
- if (hled->State == HAL_LED_STATE_READY)
- {
- /* Process Locked */
- __HAL_LOCK(hled);
- hled->State = HAL_LED_STATE_BUSY;
-
- while ((comCh >> position) != 0)
- {
- /* Get the COM channel position */
- chcurrent = comCh & (1U << position);
-
- if(chcurrent)
- {
- pTmp = ((uint32_t *)&hled->Instance->DR0) + position;
- WRITE_REG(*pTmp, data);
- }
-
- position++;
- }
-
- /* Process Unlocked */
- __HAL_UNLOCK(hled);
- hled->State = HAL_LED_STATE_READY;
-
- return HAL_OK;
- }
- else
- {
- return HAL_ERROR;
- }
- }
- /**
- * @brief Handle LED interrupt request.
- * @param hled LED handle.
- * @retval None
- */
- void HAL_LED_IRQHandler(LED_HandleTypeDef *hled)
- {
- /* LED interrupt occurred -------------------------------------*/
- if (((hled->Instance->IR & LED_IR_FLAG) != 0U) && ((hled->Instance->CR & LED_CR_IE) != 0U))
- {
- __HAL_LED_CLEAR_FLAG(hled, LED_IR_FLAG);
- HAL_LED_LightCpltCallback(hled);
- }
- }
- __weak void HAL_LED_MspInit(LED_HandleTypeDef *hled)
- {
- /* Prevent unused argument(s) compilation warning */
- UNUSED(hled);
- /* NOTE : This function should not be modified, when the callback is needed,
- the HAL_LED_MspInit could be implemented in the user file
- */
- }
- __weak void HAL_LED_LightCpltCallback(LED_HandleTypeDef *hled)
- {
- /* Prevent unused argument(s) compilation warning */
- UNUSED(hled);
- /* NOTE : This function should not be modified, when the callback is needed,
- the HAL_LED_LightCpltCallback could be implemented in the user file
- */
- }
- /**
- * @}
- */
- /**
- * @}
- */
- /**
- * @}
- */
- #endif /* HAL_LED_MODULE_ENABLED */
- /**
- * @}
- */
|