Software APIs
dt_pwm.h
Go to the documentation of this file.
1// Copyright lowRISC contributors (OpenTitan project).
2// Licensed under the Apache License, Version 2.0, see LICENSE for details.
3// SPDX-License-Identifier: Apache-2.0
4//
5// Device table API auto-generated by `dtgen`
6
7#ifndef OPENTITAN_DT_PWM_H_
8#define OPENTITAN_DT_PWM_H_
9
10#ifdef __cplusplus
11extern "C" {
12#endif // __cplusplus
13
14/**
15 * @file
16 * @brief Device Tables (DT) for IP pwm and top earlgrey.
17 *
18 * This file contains the type definitions and global functions of the pwm.
19 */
20
21#include "dt_api.h"
22#include <stdint.h>
23
24
25
26
27
28/**
29 * List of instances.
30 */
31typedef enum dt_pwm {
32 kDtPwmAon = 0, /**< pwm_aon */
33 kDtPwmFirst = 0, /**< \internal First instance */
34 kDtPwmCount = 1, /**< \internal Number of instances */
36
37/**
38 * List of register blocks.
39 *
40 * Register blocks are guaranteed to start at 0 and to be consecutively numbered.
41 */
42typedef enum dt_pwm_reg_block {
43 kDtPwmRegBlockCore = 0, /**< */
44 kDtPwmRegBlockCount = 1, /**< \internal Number of register blocks */
46
47/** Primary register block (associated with the "primary" set of registers that control the IP). */
48static const dt_pwm_reg_block_t kDtPwmRegBlockPrimary = kDtPwmRegBlockCore;
49
50/**
51 * List of Alerts.
52 *
53 * Alerts are guaranteed to be numbered consecutively from 0.
54 */
55typedef enum dt_pwm_alert {
56 kDtPwmAlertFatalFault = 0, /**< This fatal alert is triggered when a fatal TL-UL bus integrity fault is detected. */
57 kDtPwmAlertCount = 1, /**< \internal Number of Alerts */
59
60/**
61 * List of clock ports.
62 *
63 * Clock ports are guaranteed to be numbered consecutively from 0.
64 */
65typedef enum dt_pwm_clock {
66 kDtPwmClockClk = 0, /**< Clock port clk_i */
67 kDtPwmClockCore = 1, /**< Clock port clk_core_i */
68 kDtPwmClockCount = 2, /**< \internal Number of clock ports */
70
71/**
72 * List of reset ports.
73 *
74 * Reset ports are guaranteed to be numbered consecutively from 0.
75 */
76typedef enum dt_pwm_reset {
77 kDtPwmResetRst = 0, /**< Reset port rst_ni */
78 kDtPwmResetCore = 1, /**< Reset port rst_core_ni */
79 kDtPwmResetCount = 2, /**< \internal Number of reset ports */
81
82/**
83 * List of peripheral I/O.
84 *
85 * Peripheral I/O are guaranteed to be numbered consecutively from 0.
86 */
87typedef enum dt_pwm_periph_io {
88 kDtPwmPeriphIoPwm0 = 0, /**< */
89 kDtPwmPeriphIoPwm1 = 1, /**< */
90 kDtPwmPeriphIoPwm2 = 2, /**< */
91 kDtPwmPeriphIoPwm3 = 3, /**< */
92 kDtPwmPeriphIoPwm4 = 4, /**< */
93 kDtPwmPeriphIoPwm5 = 5, /**< */
94 kDtPwmPeriphIoCount = 6, /**< \internal Number of peripheral I/O */
96
97/**
98 * List of supported hardware features.
99 */
100#define OPENTITAN_PWM_HAS_DUTYCYCLE 1
101#define OPENTITAN_PWM_HAS_BLINK 1
102#define OPENTITAN_PWM_HAS_HEARTBEAT 1
103#define OPENTITAN_PWM_HAS_POLARITY 1
104#define OPENTITAN_PWM_HAS_CLOCKDIVIDER 1
105#define OPENTITAN_PWM_HAS_PHASEDELAY 1
106
107
108
109/**
110 * Get the pwm instance from an instance ID
111 *
112 * For example, `dt_uart_from_instance_id(kDtInstanceIdUart3) == kDtUart3`.
113 *
114 * @param inst_id Instance ID.
115 * @return A pwm instance.
116 *
117 * **Note:** This function only makes sense if the instance ID has device type pwm,
118 * otherwise the returned value is unspecified.
119 */
121
122/**
123 * Get the instance ID of an instance.
124 *
125 * @param dt Instance of pwm.
126 * @return The instance ID of that instance.
127 */
129
130/**
131 * Get the register base address of an instance.
132 *
133 * @param dt Instance of pwm.
134 * @param reg_block The register block requested.
135 * @return The register base address of the requested block.
136 */
137uint32_t dt_pwm_reg_block(
138 dt_pwm_t dt,
139 dt_pwm_reg_block_t reg_block);
140
141/**
142 * Get the primary register base address of an instance.
143 *
144 * This is just a convenience function, equivalent to
145 * `dt_pwm_reg_block(dt, kDtPwmRegBlockCore)`
146 *
147 * @param dt Instance of pwm.
148 * @return The register base address of the primary register block.
149 */
150static inline uint32_t dt_pwm_primary_reg_block(
151 dt_pwm_t dt) {
152 return dt_pwm_reg_block(dt, kDtPwmRegBlockCore);
153}
154
155
156/**
157 * Get the alert ID of a pwm alert for a given instance.
158 *
159 * **Note:** This function only makes sense if the instance is connected to the Alert Handler. For any
160 * instances where the instance is not connected, the return value is unspecified.
161 *
162 * @param dt Instance of pwm.
163 * @param alert A pwm alert.
164 * @return The Alert Handler alert ID of the alert of this instance.
165 */
167 dt_pwm_t dt,
168 dt_pwm_alert_t alert);
169
170/**
171 * Convert a global alert ID to a local pwm alert type.
172 *
173 * @param dt Instance of pwm.
174 * @param alert A global alert ID that belongs to this instance.
175 * @return The pwm alert, or `kDtPwmAlertCount`.
176 *
177 * **Note:** This function assumes that the global alert ID belongs to the
178 * instance of pwm passed in parameter. In other words, it must be the case
179 * that `dt_pwm_instance_id(dt) == dt_alert_id_to_instance_id(alert)`. Otherwise,
180 * this function will return `kDtPwmAlertCount`.
181 */
183 dt_pwm_t dt,
184 dt_alert_id_t alert);
185
186
187/**
188 * Get the peripheral I/O description of an instance.
189 *
190 * @param dt Instance of pwm.
191 * @param sig Requested peripheral I/O.
192 * @return Description of the requested peripheral I/O for this instance.
193 */
195 dt_pwm_t dt,
197
198/**
199 * Get the clock signal connected to a clock port of an instance.
200 *
201 * @param dt Instance of pwm.
202 * @param clk Clock port.
203 * @return Clock signal.
204 */
206 dt_pwm_t dt,
207 dt_pwm_clock_t clk);
208
209/**
210 * Get the reset signal connected to a reset port of an instance.
211 *
212 * @param dt Instance of pwm.
213 * @param rst Reset port.
214 * @return Reset signal.
215 */
217 dt_pwm_t dt,
218 dt_pwm_reset_t rst);
219
220
221
222/**
223 * Get the Number of output channels.
224 *
225 * @param dt Instance of pwm.
226 * @return Number of output channels.
227 */
229
230
231
232#ifdef __cplusplus
233} // extern "C"
234#endif // __cplusplus
235
236#endif // OPENTITAN_DT_PWM_H_