1 /*
2 * Copyright (c) 2015, Freescale Semiconductor, Inc.
3 * Copyright 2016-2017 NXP
4 * All rights reserved.
5 *
6 * SPDX-License-Identifier: BSD-3-Clause
7 */
8
9 #ifndef _FSL_DMAMUX_H_
10 #define _FSL_DMAMUX_H_
11
12 #include "fsl_common.h"
13
14 /*!
15 * @addtogroup dmamux
16 * @{
17 */
18
19
20 /*******************************************************************************
21 * Definitions
22 ******************************************************************************/
23
24 /*! @name Driver version */
25 /*@{*/
26 /*! @brief DMAMUX driver version 2.0.2. */
27 #define FSL_DMAMUX_DRIVER_VERSION (MAKE_VERSION(2, 0, 2))
28 /*@}*/
29
30 /*******************************************************************************
31 * API
32 ******************************************************************************/
33
34 #if defined(__cplusplus)
35 extern "C" {
36 #endif /* __cplusplus */
37
38 /*!
39 * @name DMAMUX Initialization and de-initialization
40 * @{
41 */
42
43 /*!
44 * @brief Initializes the DMAMUX peripheral.
45 *
46 * This function ungates the DMAMUX clock.
47 *
48 * @param base DMAMUX peripheral base address.
49 *
50 */
51 void DMAMUX_Init(DMAMUX_Type *base);
52
53 /*!
54 * @brief Deinitializes the DMAMUX peripheral.
55 *
56 * This function gates the DMAMUX clock.
57 *
58 * @param base DMAMUX peripheral base address.
59 */
60 void DMAMUX_Deinit(DMAMUX_Type *base);
61
62 /* @} */
63 /*!
64 * @name DMAMUX Channel Operation
65 * @{
66 */
67
68 /*!
69 * @brief Enables the DMAMUX channel.
70 *
71 * This function enables the DMAMUX channel.
72 *
73 * @param base DMAMUX peripheral base address.
74 * @param channel DMAMUX channel number.
75 */
DMAMUX_EnableChannel(DMAMUX_Type * base,uint32_t channel)76 static inline void DMAMUX_EnableChannel(DMAMUX_Type *base, uint32_t channel)
77 {
78 assert(channel < FSL_FEATURE_DMAMUX_MODULE_CHANNEL);
79
80 base->CHCFG[channel] |= DMAMUX_CHCFG_ENBL_MASK;
81 }
82
83 /*!
84 * @brief Disables the DMAMUX channel.
85 *
86 * This function disables the DMAMUX channel.
87 *
88 * @note The user must disable the DMAMUX channel before configuring it.
89 * @param base DMAMUX peripheral base address.
90 * @param channel DMAMUX channel number.
91 */
DMAMUX_DisableChannel(DMAMUX_Type * base,uint32_t channel)92 static inline void DMAMUX_DisableChannel(DMAMUX_Type *base, uint32_t channel)
93 {
94 assert(channel < FSL_FEATURE_DMAMUX_MODULE_CHANNEL);
95
96 base->CHCFG[channel] &= ~DMAMUX_CHCFG_ENBL_MASK;
97 }
98
99 /*!
100 * @brief Configures the DMAMUX channel source.
101 *
102 * @param base DMAMUX peripheral base address.
103 * @param channel DMAMUX channel number.
104 * @param source Channel source, which is used to trigger the DMA transfer.
105 */
DMAMUX_SetSource(DMAMUX_Type * base,uint32_t channel,uint32_t source)106 static inline void DMAMUX_SetSource(DMAMUX_Type *base, uint32_t channel, uint32_t source)
107 {
108 assert(channel < FSL_FEATURE_DMAMUX_MODULE_CHANNEL);
109
110 base->CHCFG[channel] = ((base->CHCFG[channel] & ~DMAMUX_CHCFG_SOURCE_MASK) | DMAMUX_CHCFG_SOURCE(source));
111 }
112
113 #if defined(FSL_FEATURE_DMAMUX_HAS_TRIG) && FSL_FEATURE_DMAMUX_HAS_TRIG > 0U
114 /*!
115 * @brief Enables the DMAMUX period trigger.
116 *
117 * This function enables the DMAMUX period trigger feature.
118 *
119 * @param base DMAMUX peripheral base address.
120 * @param channel DMAMUX channel number.
121 */
DMAMUX_EnablePeriodTrigger(DMAMUX_Type * base,uint32_t channel)122 static inline void DMAMUX_EnablePeriodTrigger(DMAMUX_Type *base, uint32_t channel)
123 {
124 assert(channel < FSL_FEATURE_DMAMUX_MODULE_CHANNEL);
125
126 base->CHCFG[channel] |= DMAMUX_CHCFG_TRIG_MASK;
127 }
128
129 /*!
130 * @brief Disables the DMAMUX period trigger.
131 *
132 * This function disables the DMAMUX period trigger.
133 *
134 * @param base DMAMUX peripheral base address.
135 * @param channel DMAMUX channel number.
136 */
DMAMUX_DisablePeriodTrigger(DMAMUX_Type * base,uint32_t channel)137 static inline void DMAMUX_DisablePeriodTrigger(DMAMUX_Type *base, uint32_t channel)
138 {
139 assert(channel < FSL_FEATURE_DMAMUX_MODULE_CHANNEL);
140
141 base->CHCFG[channel] &= ~DMAMUX_CHCFG_TRIG_MASK;
142 }
143 #endif /* FSL_FEATURE_DMAMUX_HAS_TRIG */
144
145 #if (defined(FSL_FEATURE_DMAMUX_HAS_A_ON) && FSL_FEATURE_DMAMUX_HAS_A_ON)
146 /*!
147 * @brief Enables the DMA channel to be always ON.
148 *
149 * This function enables the DMAMUX channel always ON feature.
150 *
151 * @param base DMAMUX peripheral base address.
152 * @param channel DMAMUX channel number.
153 * @param enable Switcher of the always ON feature. "true" means enabled, "false" means disabled.
154 */
DMAMUX_EnableAlwaysOn(DMAMUX_Type * base,uint32_t channel,bool enable)155 static inline void DMAMUX_EnableAlwaysOn(DMAMUX_Type *base, uint32_t channel, bool enable)
156 {
157 assert(channel < FSL_FEATURE_DMAMUX_MODULE_CHANNEL);
158
159 if (enable)
160 {
161 base->CHCFG[channel] |= DMAMUX_CHCFG_A_ON_MASK;
162 }
163 else
164 {
165 base->CHCFG[channel] &= ~DMAMUX_CHCFG_A_ON_MASK;
166 }
167 }
168 #endif /* FSL_FEATURE_DMAMUX_HAS_A_ON */
169
170 /* @} */
171
172 #if defined(__cplusplus)
173 }
174 #endif /* __cplusplus */
175
176 /* @} */
177
178 #endif /* _FSL_DMAMUX_H_ */
179