476 lines
14 KiB
C
476 lines
14 KiB
C
/**
|
|
******************************************************************************
|
|
* @file py32f0xx_ll_led.h
|
|
* @author MCU Application Team
|
|
* @brief Header file of LED LL module.
|
|
******************************************************************************
|
|
* @attention
|
|
*
|
|
* <h2><center>© Copyright (c) Puya Semiconductor Co.
|
|
* All rights reserved.</center></h2>
|
|
*
|
|
* <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
|
|
*
|
|
******************************************************************************
|
|
*/
|
|
|
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
|
#ifndef PY32F0XX_LL_LED_H
|
|
#define PY32F0XX_LL_LED_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* Includes ------------------------------------------------------------------*/
|
|
#include "py32f0xx.h"
|
|
|
|
/** @addtogroup PY32F0XX_LL_Driver
|
|
* @{
|
|
*/
|
|
|
|
#if defined (LED)
|
|
/** @defgroup LED_LL LED
|
|
* @{
|
|
*/
|
|
|
|
/* Private types -------------------------------------------------------------*/
|
|
/* Private variables ---------------------------------------------------------*/
|
|
/* Private constants ---------------------------------------------------------*/
|
|
/* Private macros ------------------------------------------------------------*/
|
|
/* Exported types ------------------------------------------------------------*/
|
|
/**
|
|
* @brief LED Init Structure definition
|
|
*/
|
|
typedef struct
|
|
{
|
|
uint32_t ComDrive; /*!< Specifies the LED COM drive capability.
|
|
This parameter can be a value of @ref LED_LL_EC_ComDrive */
|
|
|
|
uint32_t Prescaler; /*!< Specifies the prescaler value used to divide the LED clock.
|
|
This parameter can be a number between Min_Data = 0x00(div1) and Max_Data = 0xFF(div256) */
|
|
|
|
uint32_t ComSelect; /*!< Specifies the number of COM open.
|
|
This parameter can be a value of @ref LED_LL_EC_ComSelct */
|
|
|
|
uint32_t LightTime; /*!< Specifies LED Lighting time.
|
|
This parameter can be a number between Min_Data = 1 and Max_Data = 0xFF */
|
|
|
|
uint32_t DeadTime; /*!< Specifies LED Dead time.
|
|
This parameter can be a number between Min_Data = 1 and Max_Data = 0xFF */
|
|
|
|
} LL_LED_InitTypeDef;
|
|
|
|
/* Exported constants --------------------------------------------------------*/
|
|
/** @defgroup LED_LL_EC_ComDrive ComDrive
|
|
* @{
|
|
*/
|
|
#define LL_LED_COMDRIVE_LOW 0x00000000U
|
|
#define LL_LED_COMDRIVE_HIGH LED_CR_EHS
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
|
|
/** @defgroup LED_LL_EC_ComSelct the number of COM open
|
|
* @{
|
|
*/
|
|
#define LL_LED_COMSELECT_1COM 0x00000000U
|
|
#define LL_LED_COMSELECT_2COM LED_CR_LED_COM_SEL_0
|
|
#define LL_LED_COMSELECT_3COM LED_CR_LED_COM_SEL_1
|
|
#define LL_LED_COMSELECT_4COM (LED_CR_LED_COM_SEL_1 | LED_CR_LED_COM_SEL_0)
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup LED_LL_EC_DisplayValue LED display value
|
|
* @{
|
|
*/
|
|
#define LL_LED_DISP_NONE 0x00U
|
|
#define LL_LED_DISP_FULL 0xFFU
|
|
|
|
#define LL_LED_DISP_0 0x3FU
|
|
#define LL_LED_DISP_1 0x06U
|
|
#define LL_LED_DISP_2 0x5BU
|
|
#define LL_LED_DISP_3 0x4FU
|
|
#define LL_LED_DISP_4 0x66U
|
|
#define LL_LED_DISP_5 0x6DU
|
|
#define LL_LED_DISP_6 0x7DU
|
|
#define LL_LED_DISP_7 0x07U
|
|
#define LL_LED_DISP_8 0x7FU
|
|
#define LL_LED_DISP_9 0x6FU
|
|
#define LL_LED_DISP_A 0x77U
|
|
#define LL_LED_DISP_B 0x7CU
|
|
#define LL_LED_DISP_C 0x39U
|
|
#define LL_LED_DISP_D 0x5EU
|
|
#define LL_LED_DISP_E 0x79U
|
|
#define LL_LED_DISP_F 0x71U
|
|
#define LL_LED_DISP_H 0x76U
|
|
#define LL_LED_DISP_P 0x73U
|
|
#define LL_LED_DISP_U 0x3EU
|
|
#define LL_LED_DISP_DOT 0x80U
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup LED_LL_EC_ComDisplay LED COM Select
|
|
* @{
|
|
*/
|
|
#define LL_LED_COM0 0x00000000U
|
|
#define LL_LED_COM1 0x00000004U
|
|
#define LL_LED_COM2 0x00000008U
|
|
#define LL_LED_COM3 0x0000000CU
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup LED_LL_EC_DataReg Data Register Mask and position
|
|
* @{
|
|
*/
|
|
#define LL_LED_DR_DATA LED_DR0_DATA0
|
|
#define LL_LED_DR_DATA_Pos LED_DR0_DATA0_Pos
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/* Exported functions --------------------------------------------------------*/
|
|
/**
|
|
* @brief Set the LED COM drive capability.
|
|
* @param LEDx LED Instance
|
|
* @param ComDrive This parameter can be one of the following values:
|
|
* @arg @ref LL_LED_COMDRIVE_LOW
|
|
* @arg @ref LL_LED_COMDRIVE_HIGH
|
|
* @retval None
|
|
*/
|
|
__STATIC_INLINE void LL_LED_SetComDrive(LED_TypeDef *LEDx, uint32_t ComDrive)
|
|
{
|
|
MODIFY_REG(LEDx->CR, LED_CR_EHS, ComDrive);
|
|
}
|
|
|
|
/**
|
|
* @brief Get the LED COM drive capability.
|
|
* @param LEDx LED Instance
|
|
* @retval Returned value can be one of the following values:
|
|
* @arg @ref LL_LED_COMDRIVE_LOW
|
|
* @arg @ref LL_LED_COMDRIVE_HIGH
|
|
*/
|
|
__STATIC_INLINE uint32_t LL_LED_GetComDrive(LED_TypeDef *LEDx)
|
|
{
|
|
return (READ_BIT(LEDx->CR, LED_CR_EHS));
|
|
}
|
|
|
|
/**
|
|
* @brief Enable LED Interrupt.
|
|
* @param LEDx LED Instance
|
|
* @retval None
|
|
*/
|
|
__STATIC_INLINE void LL_LED_EnableIT(LED_TypeDef *LEDx)
|
|
{
|
|
SET_BIT(LEDx->CR, LED_CR_IE);
|
|
}
|
|
|
|
/**
|
|
* @brief Disable LED Interrupt.
|
|
* @param LEDx LED Instance
|
|
* @retval None
|
|
*/
|
|
__STATIC_INLINE void LL_LED_DisableIT(LED_TypeDef *LEDx)
|
|
{
|
|
CLEAR_BIT(LEDx->CR, LED_CR_IE);
|
|
}
|
|
/**
|
|
* @brief Check if LED Interrupt is enabled
|
|
* @param LEDx LED Instance
|
|
* @retval State of bit (1 or 0).
|
|
*/
|
|
__STATIC_INLINE uint32_t LL_LED_IsEnabledIT(LED_TypeDef *LEDx)
|
|
{
|
|
return ((READ_BIT(LEDx->CR, LED_CR_IE) == (LED_CR_IE)) ? 1UL : 0UL);
|
|
}
|
|
|
|
/**
|
|
* @brief Set he number of COM open.
|
|
* @param LEDx LED Instance
|
|
* @param ComNum This parameter can be one of the following values:
|
|
* @arg @ref LL_LED_COMSELECT_1COM
|
|
* @arg @ref LL_LED_COMSELECT_2COM
|
|
* @arg @ref LL_LED_COMSELECT_3COM
|
|
* @arg @ref LL_LED_COMSELECT_4COM
|
|
* @retval None
|
|
*/
|
|
__STATIC_INLINE void LL_LED_SetComNum(LED_TypeDef *LEDx, uint32_t ComNum)
|
|
{
|
|
MODIFY_REG(LEDx->CR, LED_CR_LED_COM_SEL, ComNum);
|
|
}
|
|
|
|
/**
|
|
* @brief Get the number of COM open.
|
|
* @param LEDx LED Instance
|
|
* @retval Returned value can be one of the following values:
|
|
* @arg @ref LL_LED_COMSELECT_1COM
|
|
* @arg @ref LL_LED_COMSELECT_2COM
|
|
* @arg @ref LL_LED_COMSELECT_3COM
|
|
* @arg @ref LL_LED_COMSELECT_4COM
|
|
*/
|
|
__STATIC_INLINE uint32_t LL_LED_GetComNum(LED_TypeDef *LEDx)
|
|
{
|
|
return (READ_BIT(LEDx->CR, LED_CR_LED_COM_SEL));
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief Enable LED.
|
|
* @param LEDx LED Instance
|
|
* @retval None
|
|
*/
|
|
__STATIC_INLINE void LL_LED_Enable(LED_TypeDef *LEDx)
|
|
{
|
|
SET_BIT(LEDx->CR, LED_CR_LEDON);
|
|
}
|
|
|
|
/**
|
|
* @brief Disable LED.
|
|
* @param LEDx LED Instance
|
|
* @retval None
|
|
*/
|
|
__STATIC_INLINE void LL_LED_Disable(LED_TypeDef *LEDx)
|
|
{
|
|
CLEAR_BIT(LEDx->CR, LED_CR_LEDON);
|
|
}
|
|
|
|
/**
|
|
* @brief Checks if LED is enabled
|
|
* @param LEDx LED Instance
|
|
* @retval State of bit (1 or 0).
|
|
*/
|
|
__STATIC_INLINE uint32_t LL_LED_IsEnabled(LED_TypeDef *LEDx)
|
|
{
|
|
return ((READ_BIT(LEDx->CR, LED_CR_LEDON) == (LED_CR_LEDON)) ? 1UL : 0UL);
|
|
}
|
|
|
|
/**
|
|
* @brief Set the LED prescale Value.
|
|
* @param LEDx LED Instance
|
|
* @param Prescaler This parameter can be a number between Min_Data = 0x00(div1)
|
|
* and Max_Data = 0xFF(div256)
|
|
* @retval None
|
|
*/
|
|
__STATIC_INLINE void LL_LED_SetPrescaler(LED_TypeDef *LEDx, uint32_t Prescaler)
|
|
{
|
|
MODIFY_REG(LEDx->PR, LED_PR_PR, (Prescaler << LED_PR_PR_Pos));
|
|
}
|
|
|
|
/**
|
|
* @brief Return LED Prescaler Value.
|
|
* @param LEDx LED Instance
|
|
* @retval Returned value can be a number between Min_Data = 0x00(div1)
|
|
* and Max_Data = 0xFF(div256)
|
|
*/
|
|
__STATIC_INLINE uint32_t LL_LED_GetPrescaler(LED_TypeDef *LEDx)
|
|
{
|
|
return (READ_BIT(LEDx->PR, LED_PR_PR) >> LED_PR_PR_Pos);
|
|
}
|
|
|
|
/**
|
|
* @brief Set the LED Lighting and Dead time.
|
|
* @param LEDx LED Instance
|
|
* @param LightTime This parameter can be a number between Min_Data = 1 and
|
|
* Max_Data = 0xFF
|
|
* @param DeadTime This parameter can be a number between Min_Data = 1 and
|
|
* Max_Data = 0xFF
|
|
* @retval None
|
|
*/
|
|
__STATIC_INLINE void LL_LED_SetLightAndDeadTime(LED_TypeDef *LEDx,\
|
|
uint32_t LightTime, uint32_t DeadTime)
|
|
{
|
|
MODIFY_REG(LEDx->TR, (LED_TR_T1 | LED_TR_T2), ((LightTime << LED_TR_T1_Pos) |\
|
|
(DeadTime << LED_TR_T2_Pos)));
|
|
}
|
|
|
|
/**
|
|
* @brief Set the LED Lighting time.
|
|
* @param LEDx LED Instance
|
|
* @param LightTime This parameter can be a number between Min_Data = 1 and
|
|
* Max_Data = 0xFF
|
|
* @retval None
|
|
*/
|
|
__STATIC_INLINE void LL_LED_SetLightTime(LED_TypeDef *LEDx, uint32_t LightTime)
|
|
{
|
|
MODIFY_REG(LEDx->TR, LED_TR_T1, (LightTime << LED_TR_T1_Pos));
|
|
}
|
|
|
|
/**
|
|
* @brief Set the LED Dead time.
|
|
* @param LEDx LED Instance
|
|
* @param DeadTime This parameter can be a number between Min_Data = 1 and
|
|
* Max_Data = 0xFF
|
|
* @retval None
|
|
*/
|
|
__STATIC_INLINE void LL_LED_SetDeadTime(LED_TypeDef *LEDx, uint32_t DeadTime)
|
|
{
|
|
MODIFY_REG(LEDx->TR, LED_TR_T2, (DeadTime << LED_TR_T2_Pos));
|
|
}
|
|
|
|
/**
|
|
* @brief Get the LED Lighting time.
|
|
* @param LEDx LED Instance
|
|
* @retval Returned value can be a number between Min_Data = 1 and
|
|
* Max_Data = 0xFF
|
|
*/
|
|
__STATIC_INLINE uint32_t LL_LED_GetLightTime(LED_TypeDef *LEDx)
|
|
{
|
|
return (READ_BIT(LEDx->TR, LED_TR_T1) >> LED_TR_T1_Pos);
|
|
}
|
|
|
|
/**
|
|
* @brief Get the LED Dead time.
|
|
* @param LEDx LED Instance
|
|
* @retval Returned value can be a number between Min_Data = 1 and
|
|
* Max_Data = 0xFF
|
|
*/
|
|
__STATIC_INLINE uint32_t LL_LED_GetDeadTime(LED_TypeDef *LEDx)
|
|
{
|
|
return (READ_BIT(LEDx->TR, LED_TR_T2) >> LED_TR_T2_Pos);
|
|
}
|
|
|
|
/**
|
|
* @brief Set the LED display value.
|
|
* @param LEDx LED Instance
|
|
* @param comCh Specify COM channels.This parameter can be one of the following values:
|
|
* @arg @ref LL_LED_COM0
|
|
* @arg @ref LL_LED_COM1
|
|
* @arg @ref LL_LED_COM2
|
|
* @arg @ref LL_LED_COM3
|
|
* @param data Specify display values.This parameter can be one of the following values:
|
|
* @arg @ref LL_LED_DISP_NONE
|
|
* @arg @ref LL_LED_DISP_FULL
|
|
* @arg @ref LL_LED_DISP_0
|
|
* @arg @ref LL_LED_DISP_1
|
|
* @arg @ref LL_LED_DISP_2
|
|
* @arg @ref LL_LED_DISP_3
|
|
* @arg @ref LL_LED_DISP_4
|
|
* @arg @ref LL_LED_DISP_5
|
|
* @arg @ref LL_LED_DISP_6
|
|
* @arg @ref LL_LED_DISP_7
|
|
* @arg @ref LL_LED_DISP_8
|
|
* @arg @ref LL_LED_DISP_9
|
|
* @arg @ref LL_LED_DISP_A
|
|
* @arg @ref LL_LED_DISP_B
|
|
* @arg @ref LL_LED_DISP_C
|
|
* @arg @ref LL_LED_DISP_D
|
|
* @arg @ref LL_LED_DISP_E
|
|
* @arg @ref LL_LED_DISP_F
|
|
* @arg @ref LL_LED_DISP_H
|
|
* @arg @ref LL_LED_DISP_P
|
|
* @arg @ref LL_LED_DISP_U
|
|
* @arg @ref LL_LED_DISP_DOT
|
|
* @retval None
|
|
*/
|
|
__STATIC_INLINE void LL_LED_SetDisplayValue(LED_TypeDef *LEDx,uint32_t comCh,\
|
|
uint32_t data)
|
|
{
|
|
MODIFY_REG((*((uint32_t *)((uint32_t)&(LEDx->DR0) + comCh))), LL_LED_DR_DATA,\
|
|
(data << LL_LED_DR_DATA_Pos));
|
|
}
|
|
|
|
/**
|
|
* @brief Get the LED display value.
|
|
* @param LEDx LED Instance
|
|
* @param comCh Specify COM channels.This parameter can be one of the following values:
|
|
* @arg @ref LL_LED_COM0
|
|
* @arg @ref LL_LED_COM1
|
|
* @arg @ref LL_LED_COM2
|
|
* @arg @ref LL_LED_COM3
|
|
* @retval Returned value can be one of the following values:
|
|
* @arg @ref LL_LED_DISP_NONE
|
|
* @arg @ref LL_LED_DISP_FULL
|
|
* @arg @ref LL_LED_DISP_0
|
|
* @arg @ref LL_LED_DISP_1
|
|
* @arg @ref LL_LED_DISP_2
|
|
* @arg @ref LL_LED_DISP_3
|
|
* @arg @ref LL_LED_DISP_4
|
|
* @arg @ref LL_LED_DISP_5
|
|
* @arg @ref LL_LED_DISP_6
|
|
* @arg @ref LL_LED_DISP_7
|
|
* @arg @ref LL_LED_DISP_8
|
|
* @arg @ref LL_LED_DISP_9
|
|
* @arg @ref LL_LED_DISP_A
|
|
* @arg @ref LL_LED_DISP_B
|
|
* @arg @ref LL_LED_DISP_C
|
|
* @arg @ref LL_LED_DISP_D
|
|
* @arg @ref LL_LED_DISP_E
|
|
* @arg @ref LL_LED_DISP_F
|
|
* @arg @ref LL_LED_DISP_H
|
|
* @arg @ref LL_LED_DISP_P
|
|
* @arg @ref LL_LED_DISP_U
|
|
* @arg @ref LL_LED_DISP_DOT
|
|
*/
|
|
__STATIC_INLINE uint32_t LL_LED_GetDisplayValue(LED_TypeDef *LEDx, uint32_t comCh)
|
|
{
|
|
return ((READ_BIT((*((uint32_t *)((uint32_t)&(LEDx->DR0) + comCh))), LL_LED_DR_DATA))\
|
|
>> LL_LED_DR_DATA_Pos);
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief Get the LED interrupt flag.
|
|
* @param LEDx LED Instance
|
|
* @retval State of bit (1 or 0).
|
|
*/
|
|
__STATIC_INLINE uint32_t LL_LED_IsActiveFlag_IT(LED_TypeDef *LEDx)
|
|
{
|
|
return ((READ_BIT(LEDx->IR, LED_IR_FLAG) == (LED_IR_FLAG)) ? 1UL : 0UL);
|
|
}
|
|
|
|
/**
|
|
* @brief the LED interrupt flag.
|
|
* @param LEDx LED Instance
|
|
* @retval None
|
|
*/
|
|
__STATIC_INLINE void LL_LED_ClearFlag_IT(LED_TypeDef *LEDx)
|
|
{
|
|
SET_BIT(LEDx->IR, LED_IR_FLAG);
|
|
}
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#if defined(USE_FULL_LL_DRIVER)
|
|
/** @defgroup LED_LL_EF_Init Initialization and de-initialization functions
|
|
* @{
|
|
*/
|
|
|
|
ErrorStatus LL_LED_DeInit(LED_TypeDef *LEDx);
|
|
ErrorStatus LL_LED_Init(LED_TypeDef *LEDx, LL_LED_InitTypeDef *LED_InitStruct);
|
|
void LL_LED_StructInit(LL_LED_InitTypeDef *LED_InitStruct);
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
#endif /* USE_FULL_LL_DRIVER */
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#endif /* LED */
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* PY32F0xx_LL_LED_H */
|
|
|
|
/************************ (C) COPYRIGHT Puya *****END OF FILE****/
|