1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /*
3  * Copyright (c) 2020-2021 Rockchip Electronics Co., Ltd.
4  */
5 
6 #include "hal_conf.h"
7 
8 #ifdef HAL_PWM_MODULE_ENABLED
9 
10 /** @addtogroup RK_HAL_Driver
11   * @{
12   */
13 
14 /** @addtogroup PWM
15   * @{
16   */
17 
18 #ifndef __HAL_PWM_H
19 #define __HAL_PWM_H
20 
21 #include "hal_def.h"
22 
23 /***************************** MACRO Definition ******************************/
24 /** @defgroup PWM_Exported_Definition_Group1 Basic Definition
25  *  @{
26  */
27 
28 #define HAL_PWM_NUM_CHANNELS   (HAL_ARRAY_SIZE(((struct PWM_REG *)0)->CHANNELS))
29 #define PWM_PWRMATCH_MAX_COUNT (10)
30 
31 /***************************** Structure Definition **************************/
32 
33 typedef enum {
34     HAL_PWM_ONE_SHOT = 0,
35     HAL_PWM_CONTINUOUS,
36     HAL_PWM_CAPTURE,
37 } ePWM_Mode;
38 
39 /**
40   * @brief  PWM HW information definition
41   */
42 struct HAL_PWM_DEV {
43     struct PWM_REG *pReg;
44     uint32_t clkID;
45     uint32_t clkGateID;
46     uint32_t pclkGateID;
47     IRQn_Type irqNum;
48 };
49 
50 /**
51   * @brief  PWM handle Structure definition
52   */
53 struct HAL_PWM_CONFIG {
54     uint8_t channel;
55     uint32_t periodNS;
56     uint32_t dutyNS;
57     bool polarity;
58 };
59 
60 /**
61   * @brief  PWM capture data
62   */
63 struct PWM_CAPTURE {
64     uint32_t period;
65     bool pol;
66     bool active;
67 };
68 
69 /**
70   * @brief  PWM match data
71   */
72 struct PWM_MATCH {
73     uint32_t match[PWM_PWRMATCH_MAX_COUNT];
74     uint8_t matchCount;
75     uint16_t lpreMin;
76     uint16_t lpreMax;
77     uint16_t hpreMin;
78     uint16_t hpreMax;
79     uint16_t ldMin;
80     uint16_t ldMax;
81     uint16_t hdZeroMin;
82     uint16_t hdZeroMax;
83     uint16_t hdOneMin;
84     uint16_t hdOneMax;
85 };
86 
87 /**
88   * @brief  PWM Handle Structure definition
89   */
90 
91 struct PWM_HANDLE {
92     struct PWM_REG *pReg;
93     uint32_t freq;
94     ePWM_Mode mode[HAL_PWM_NUM_CHANNELS];
95     struct PWM_CAPTURE result[HAL_PWM_NUM_CHANNELS];
96 };
97 
98 /**
99   * @}
100   */
101 
102 /***************************** Function Declare ******************************/
103 /** @defgroup PWM_Public_Function_Declare Public Function Declare
104  *  @{
105  */
106 
107 HAL_Status HAL_PWM_IRQHandler(struct PWM_HANDLE *pPWM);
108 HAL_Status HAL_PWM_SetConfig(struct PWM_HANDLE *pPWM, uint8_t channel,
109                              const struct HAL_PWM_CONFIG *config);
110 HAL_Status HAL_PWM_SetOneshot(struct PWM_HANDLE *pPWM, uint8_t channel, uint32_t count);
111 HAL_Status HAL_PWM_SetCapturedFreq(struct PWM_HANDLE *pPWM, uint8_t channel, uint32_t freq);
112 HAL_Status HAL_PWM_SetMatch(struct PWM_HANDLE *pPWM, uint8_t channel, const struct PWM_MATCH *data);
113 ePWM_Mode HAL_PWM_GetMode(struct PWM_HANDLE *pPWM, uint8_t channel);
114 HAL_Status HAL_PWM_Enable(struct PWM_HANDLE *pPWM, uint8_t channel, ePWM_Mode mode);
115 HAL_Status HAL_PWM_Disable(struct PWM_HANDLE *pPWM, uint8_t channel);
116 HAL_Status HAL_PWM_Init(struct PWM_HANDLE *pPWM, struct PWM_REG *pReg, uint32_t freq);
117 HAL_Status HAL_PWM_DeInit(struct PWM_HANDLE *pPWM);
118 
119 /** @} */
120 
121 #endif
122 
123 /**
124   * @}
125   */
126 
127 /**
128   * @}
129   */
130 
131 #endif /* HAL_PWM_MODULE_ENABLED */
132