234 lines
7.6 KiB
C
234 lines
7.6 KiB
C
|
|
/**
|
||
|
|
*******************************************************************************
|
||
|
|
* @file hc32_ll_event_port.h
|
||
|
|
* @brief This file contains all the functions prototypes of the Event Port
|
||
|
|
* driver library.
|
||
|
|
@verbatim
|
||
|
|
Change Logs:
|
||
|
|
Date Author Notes
|
||
|
|
2022-03-31 CDT First version
|
||
|
|
@endverbatim
|
||
|
|
*******************************************************************************
|
||
|
|
* Copyright (C) 2022-2023, Xiaohua Semiconductor Co., Ltd. All rights reserved.
|
||
|
|
*
|
||
|
|
* This software component is licensed by XHSC 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
|
||
|
|
*
|
||
|
|
*******************************************************************************
|
||
|
|
*/
|
||
|
|
#ifndef __HC32_LL_EVENT_PORT_H__
|
||
|
|
#define __HC32_LL_EVENT_PORT_H__
|
||
|
|
|
||
|
|
/* C binding of definitions if building with C++ compiler */
|
||
|
|
#ifdef __cplusplus
|
||
|
|
extern "C"
|
||
|
|
{
|
||
|
|
#endif
|
||
|
|
|
||
|
|
/*******************************************************************************
|
||
|
|
* Include files
|
||
|
|
******************************************************************************/
|
||
|
|
#include "hc32_ll_def.h"
|
||
|
|
|
||
|
|
#include "hc32f4xx.h"
|
||
|
|
#include "hc32f4xx_conf.h"
|
||
|
|
/**
|
||
|
|
* @addtogroup LL_Driver
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @addtogroup LL_EVENT_PORT
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
|
||
|
|
#if (LL_EVENT_PORT_ENABLE == DDL_ON)
|
||
|
|
/*******************************************************************************
|
||
|
|
* Global type definitions ('typedef')
|
||
|
|
******************************************************************************/
|
||
|
|
/**
|
||
|
|
* @defgroup EP_Global_Types Event Port Global Types
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Event Pin Set and Reset enumeration
|
||
|
|
*/
|
||
|
|
typedef enum {
|
||
|
|
EVT_PIN_RESET = 0U, /*!< Pin reset */
|
||
|
|
EVT_PIN_SET = 1U /*!< Pin set */
|
||
|
|
} en_ep_state_t;
|
||
|
|
|
||
|
|
typedef struct {
|
||
|
|
uint32_t u32PinDir; /*!< Input/Output setting, @ref EP_PinDirection_Sel for details */
|
||
|
|
en_ep_state_t enPinState; /*!< Corresponding pin initial state, @ref en_ep_state_t for details */
|
||
|
|
uint32_t u32PinTriggerOps; /*!< Corresponding pin state after triggered, @ref EP_TriggerOps_Sel for details */
|
||
|
|
uint32_t u32Edge; /*!< Event port trigger edge, @ref EP_Trigger_Sel for details */
|
||
|
|
uint32_t u32Filter; /*!< Filter clock function setting, @ref EP_FilterClock_Sel for details */
|
||
|
|
uint32_t u32FilterClock; /*!< Filter clock, ref@ EP_FilterClock_Div for details */
|
||
|
|
} stc_ep_init_t;
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/*******************************************************************************
|
||
|
|
* Global pre-processor symbols/macros ('#define')
|
||
|
|
******************************************************************************/
|
||
|
|
/**
|
||
|
|
* @defgroup EP_Global_Macros Event Port Global Macros
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup EP_Port_source EP Port Source
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define EVT_PORT_1 (0U) /*!< Event port 1 */
|
||
|
|
#define EVT_PORT_2 (1U) /*!< Event port 2 */
|
||
|
|
#define EVT_PORT_3 (2U) /*!< Event port 3 */
|
||
|
|
#define EVT_PORT_4 (3U) /*!< Event port 4 */
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup EP_pins_define EP Pin Source
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define EVT_PIN_00 (0x0001U) /*!< Event port Pin 00 */
|
||
|
|
#define EVT_PIN_01 (0x0002U) /*!< Event port Pin 01 */
|
||
|
|
#define EVT_PIN_02 (0x0004U) /*!< Event port Pin 02 */
|
||
|
|
#define EVT_PIN_03 (0x0008U) /*!< Event port Pin 03 */
|
||
|
|
#define EVT_PIN_04 (0x0010U) /*!< Event port Pin 04 */
|
||
|
|
#define EVT_PIN_05 (0x0020U) /*!< Event port Pin 05 */
|
||
|
|
#define EVT_PIN_06 (0x0040U) /*!< Event port Pin 06 */
|
||
|
|
#define EVT_PIN_07 (0x0080U) /*!< Event port Pin 07 */
|
||
|
|
#define EVT_PIN_08 (0x0100U) /*!< Event port Pin 08 */
|
||
|
|
#define EVT_PIN_09 (0x0200U) /*!< Event port Pin 09 */
|
||
|
|
#define EVT_PIN_10 (0x0400U) /*!< Event port Pin 10 */
|
||
|
|
#define EVT_PIN_11 (0x0800U) /*!< Event port Pin 11 */
|
||
|
|
#define EVT_PIN_12 (0x1000U) /*!< Event port Pin 12 */
|
||
|
|
#define EVT_PIN_13 (0x2000U) /*!< Event port Pin 13 */
|
||
|
|
#define EVT_PIN_14 (0x4000U) /*!< Event port Pin 14 */
|
||
|
|
#define EVT_PIN_15 (0x8000U) /*!< Event port Pin 15 */
|
||
|
|
#define EVT_PIN_All (0xFFFFU) /*!< All event pins are selected */
|
||
|
|
#define EVT_PIN_MASK (0xFFFFU) /*!< Event pin mask for assert test */
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup EP_PinDirection_Sel EP Pin Input/Output Direction Selection
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define EP_DIR_IN (0UL) /*!< EP input */
|
||
|
|
#define EP_DIR_OUT (1UL) /*!< EP output */
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup EP_FilterClock_Sel Event Port Filter Function Selection
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define EP_FILTER_OFF (0UL) /*!< EP filter function OFF */
|
||
|
|
|
||
|
|
#define EP_FILTER_ON (1UL) /*!< EP filter function ON */
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup EP_FilterClock_Div Event Port Filter Sampling Clock Division Selection
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define EP_FCLK_DIV1 (0UL) /*!< PCLK as EP filter clock source */
|
||
|
|
#define EP_FCLK_DIV8 (1UL << AOS_PEVNTNFCR_DIVS1_POS) /*!< PCLK div8 as EP filter clock source */
|
||
|
|
#define EP_FCLK_DIV32 (2UL << AOS_PEVNTNFCR_DIVS1_POS) /*!< PCLK div32 as EP filter clock source */
|
||
|
|
#define EP_FCLK_DIV64 (3UL << AOS_PEVNTNFCR_DIVS1_POS) /*!< PCLK div64 as EP filter clock source */
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup EP_Trigger_Sel Event Port Trigger Edge Selection
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define EP_TRIG_NONE (0UL) /*!< No Trigger by edge */
|
||
|
|
#define EP_TRIG_FALLING (1UL) /*!< Trigger by falling edge */
|
||
|
|
#define EP_TRIG_RISING (2UL) /*!< Trigger by rising edge */
|
||
|
|
#define EP_TRIG_BOTH (3UL) /*!< Trigger by falling and rising edge */
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @defgroup EP_TriggerOps_Sel Event Port Operation
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
#define EP_OPS_NONE (0UL) /*!< Pin no action after triggered */
|
||
|
|
#define EP_OPS_LOW (1UL) /*!< Pin ouput low after triggered */
|
||
|
|
#define EP_OPS_HIGH (2UL) /*!< Pin ouput high after triggered */
|
||
|
|
#define EP_OPS_TOGGLE (3UL) /*!< Pin toggle after triggered */
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/*******************************************************************************
|
||
|
|
* Global variable definitions ('extern')
|
||
|
|
******************************************************************************/
|
||
|
|
|
||
|
|
/*******************************************************************************
|
||
|
|
Global function prototypes (definition in C source)
|
||
|
|
******************************************************************************/
|
||
|
|
/**
|
||
|
|
* @addtogroup EP_Global_Functions
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
void EP_DeInit(void);
|
||
|
|
int32_t EP_StructInit(stc_ep_init_t *pstcEventPortInit);
|
||
|
|
|
||
|
|
int32_t EP_Init(uint8_t u8EventPort, uint16_t u16EventPin, const stc_ep_init_t *pstcEventPortInit);
|
||
|
|
int32_t EP_SetTriggerEdge(uint8_t u8EventPort, uint16_t u16EventPin, uint32_t u32Edge);
|
||
|
|
int32_t EP_SetTriggerOps(uint8_t u8EventPort, uint16_t u16EventPin, uint32_t u32Ops);
|
||
|
|
en_ep_state_t EP_ReadInputPins(uint8_t u8EventPort, uint16_t u16EventPin);
|
||
|
|
uint16_t EP_ReadInputPort(uint8_t u8EventPort);
|
||
|
|
en_ep_state_t EP_ReadOutputPins(uint8_t u8EventPort, uint16_t u16EventPin);
|
||
|
|
uint16_t EP_ReadOutputPort(uint8_t u8EventPort);
|
||
|
|
void EP_SetPins(uint8_t u8EventPort, uint16_t u16EventPin);
|
||
|
|
void EP_ResetPins(uint8_t u8EventPort, uint16_t u16EventPin);
|
||
|
|
void EP_SetDir(uint8_t u8EventPort, uint16_t u16EventPin, uint32_t u32Dir);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
#endif /* LL_EVENT_PORT_ENABLE */
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#endif /* __HC32_LL_EVENT_PORT_H__ */
|
||
|
|
|
||
|
|
/*******************************************************************************
|
||
|
|
* EOF (not truncated)
|
||
|
|
******************************************************************************/
|