• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef HPM_BUTN_DRV_H
9 #define HPM_BUTN_DRV_H
10 
11 #include "hpm_common.h"
12 #include "hpm_butn_regs.h"
13 
14 /**
15  *
16  * @brief BUTN driver APIs
17  * @defgroup butn_interface BUTN driver APIs
18  * @ingroup io_interfaces
19  * @{
20  *
21  */
22 
23 #define BUTN_EVENT_POWER_PRESSED (BUTN_BTN_STATUS_PBTN_SET(1))
24 #define BUTN_EVENT_POWER_PRESSED_HOLD_0_5_S (BUTN_BTN_STATUS_PBTN_SET(2))
25 #define BUTN_EVENT_POWER_PRESSED_HOLD_8_S (BUTN_BTN_STATUS_PBTN_SET(4))
26 #define BUTN_EVENT_POWER_PRESSED_HOLD_16_S (BUTN_BTN_STATUS_PBTN_SET(8))
27 
28 #define BUTN_EVENT_WAKE_PRESSED (BUTN_BTN_STATUS_WBTN_SET(1))
29 #define BUTN_EVENT_WAKE_PRESSED_HOLD_0_5_S (BUTN_BTN_STATUS_WBTN_SET(2))
30 #define BUTN_EVENT_WAKE_PRESSED_HOLD_8_S (BUTN_BTN_STATUS_WBTN_SET(4))
31 #define BUTN_EVENT_WAKE_PRESSED_HOLD_16_S (BUTN_BTN_STATUS_WBTN_SET(8))
32 
33 #define BUTN_EVENT_WAKE_POWER_PRESSED (BUTN_BTN_STATUS_DBTN_SET(1))
34 #define BUTN_EVENT_WAKE_POWER_PRESSED_HOLD_0_5_S  (BUTN_BTN_STATUS_DBTN_SET(2))
35 #define BUTN_EVENT_WAKE_POWER_PRESSED_HOLD_8_S  (BUTN_BTN_STATUS_DBTN_SET(4))
36 #define BUTN_EVENT_WAKE_POWER_PRESSED_HOLD_16_S  (BUTN_BTN_STATUS_DBTN_SET(8))
37 
38 #define BUTN_EVENT_POWER_CLICKED (BUTN_BTN_STATUS_PCLICK_SET(1))
39 #define BUTN_EVENT_POWER_CLICKED_X2 (BUTN_BTN_STATUS_PCLICK_SET(2))
40 #define BUTN_EVENT_POWER_CLICKED_X3 (BUTN_BTN_STATUS_PCLICK_SET(4))
41 
42 #define BUTN_EVENT_POWER_CLICKED_WAKE_HELD (BUTN_BTN_STATUS_XPCLICK_SET(1))
43 #define BUTN_EVENT_POWER_CLICKED_X2_WAKE_HELD (BUTN_BTN_STATUS_XPCLICK_SET(2))
44 #define BUTN_EVENT_POWER_CLICKED_X3_WAKE_HELD (BUTN_BTN_STATUS_XPCLICK_SET(4))
45 
46 #define BUTN_EVENT_WAKE_CLICKED (BUTN_BTN_STATUS_WCLICK_SET(1))
47 #define BUTN_EVENT_WAKE_CLICKED_X2 (BUTN_BTN_STATUS_WCLICK_SET(2))
48 #define BUTN_EVENT_WAKE_CLICKED_X3 (BUTN_BTN_STATUS_WCLICK_SET(4))
49 
50 #define BUTN_EVENT_WAKE_CLICKED_POWER_HELD (BUTN_BTN_STATUS_XWCLICK_SET(1))
51 #define BUTN_EVENT_WAKE_CLICKED_X2_POWER_HELD (BUTN_BTN_STATUS_XWCLICK_SET(2))
52 #define BUTN_EVENT_WAKE_CLICKED_X3_POWER_HELD (BUTN_BTN_STATUS_XWCLICK_SET(4))
53 
54 #ifdef __cplusplus
55 extern "C" {
56 #endif
57 
58 /**
59  * @brief Get status
60  *
61  * @param[in] ptr BUTN base address
62  * @retval status mask in 32 bits, please refer to BUTN_EVENT_* macros
63  */
butn_get_status(BUTN_Type * ptr)64 static inline uint32_t butn_get_status(BUTN_Type *ptr)
65 {
66     return ptr->BTN_STATUS;
67 }
68 
69 /**
70  * @brief Enable interrupt with mask
71  *
72  * @param[in] ptr BUTN base address
73  * @param[in] mask Mask of interrupts to be enabled, please refer to BUTN_EVENT_* macros
74  */
butn_enable_irq(BUTN_Type * ptr,uint32_t mask)75 static inline void butn_enable_irq(BUTN_Type *ptr, uint32_t mask)
76 {
77     ptr->BTN_IRQ_MASK |= mask;
78 }
79 
80 /**
81  * @brief Disable interrupt with mask
82  *
83  * @param[in] ptr BUTN base address
84  * @param[in] mask Mask of interrupts to be disabled, please refer to BUTN_EVENT_* macros
85  */
butn_disable_irq(BUTN_Type * ptr,uint32_t mask)86 static inline void butn_disable_irq(BUTN_Type *ptr, uint32_t mask)
87 {
88     ptr->BTN_IRQ_MASK &= ~mask;
89 }
90 
91 /**
92  * @brief Set intense of PLED and RLED/WLED
93  *
94  * @param[in] ptr BUTN base address
95  * @param[in] intense Intense value (0~15)
96  */
butn_set_intense(BUTN_Type * ptr,uint8_t intense)97 static inline void butn_set_intense(BUTN_Type *ptr, uint8_t intense)
98 {
99     ptr->LED_INTENSE = BUTN_LED_INTENSE_PLED_SET(intense)
100         | BUTN_LED_INTENSE_RLED_SET(intense);
101 }
102 
103 #ifdef __cplusplus
104 }
105 #endif
106 /**
107  * @}
108  */
109 #endif /* HPM_BUTN_DRV_H */
110