Kinetis Bootloader  2.0.0
Common bootloader for Kinetis devices
fsl_port.h
1 /*
2  * Copyright (c) 2015, Freescale Semiconductor, Inc.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without modification,
6  * are permitted provided that the following conditions are met:
7  *
8  * o Redistributions of source code must retain the above copyright notice, this list
9  * of conditions and the following disclaimer.
10  *
11  * o Redistributions in binary form must reproduce the above copyright notice, this
12  * list of conditions and the following disclaimer in the documentation and/or
13  * other materials provided with the distribution.
14  *
15  * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
16  * contributors may be used to endorse or promote products derived from this
17  * software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22  * DISCLAIMED. IN NO EVENT SDRVL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
23  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
26  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30 #ifndef _FSL_PORT_H_
31 #define _FSL_PORT_H_
32 
33 #include "fsl_common.h"
34 
40 /*******************************************************************************
41  * Definitions
42  ******************************************************************************/
43 
45 #define FSL_PORT_DRIVER_VERSION (MAKE_VERSION(2, 0, 0))
46 
49 {
52  kPORT_PullUp = 3U,
53 };
54 
57 {
60 };
61 
62 #if defined(FSL_FEATURE_PORT_HAS_OPEN_DRAIN) && FSL_FEATURE_PORT_HAS_OPEN_DRAIN
63 
65 {
68 };
69 #endif /* FSL_FEATURE_PORT_HAS_OPEN_DRAIN */
70 
73 {
76 };
77 
80 {
83 };
84 
85 #if defined(FSL_FEATURE_PORT_HAS_PIN_CONTROL_LOCK) && FSL_FEATURE_PORT_HAS_PIN_CONTROL_LOCK
86 
88 {
91 };
92 #endif /* FSL_FEATURE_PORT_HAS_PIN_CONTROL_LOCK */
93 
95 typedef enum _port_mux
96 {
105 } port_mux_t;
106 
108 typedef enum _port_interrupt
109 {
111 #if defined(FSL_FEATURE_PORT_HAS_DMA_REQUEST) && FSL_FEATURE_PORT_HAS_DMA_REQUEST
115 #endif
124 
125 #if defined(FSL_FEATURE_PORT_HAS_DIGITAL_FILTER) && FSL_FEATURE_PORT_HAS_DIGITAL_FILTER
126 
127 typedef enum _port_digital_filter_clock_source
128 {
132 
134 typedef struct _port_digital_filter_config
135 {
139 #endif /* FSL_FEATURE_PORT_HAS_DIGITAL_FILTER */
140 
142 typedef struct _port_pin_config
143 {
144  uint16_t pullSelect : 2;
145  uint16_t slewRate : 1;
146  uint16_t : 1;
147  uint16_t passiveFilterEnable : 1;
148 #if defined(FSL_FEATURE_PORT_HAS_OPEN_DRAIN) && FSL_FEATURE_PORT_HAS_OPEN_DRAIN
149  uint16_t openDrainEnable : 1;
150 #else
151  uint16_t : 1;
152 #endif /* FSL_FEATURE_PORT_HAS_OPEN_DRAIN */
153  uint16_t driveStrength : 1;
154  uint16_t : 1;
155  uint16_t mux : 3;
156  uint16_t : 4;
157 #if defined(FSL_FEATURE_PORT_HAS_PIN_CONTROL_LOCK) && FSL_FEATURE_PORT_HAS_PIN_CONTROL_LOCK
158  uint16_t lockRegister : 1;
159 #else
160  uint16_t : 1;
161 #endif /* FSL_FEATURE_PORT_HAS_PIN_CONTROL_LOCK */
163 
164 /*******************************************************************************
165  * API
166  ******************************************************************************/
167 
168 #if defined(__cplusplus)
169 extern "C" {
170 #endif
171 
174 
196 static inline void PORT_SetPinConfig(PORT_Type *base, uint32_t pin, const port_pin_config_t *config)
197 {
198  assert(config);
199  uint32_t addr = (uint32_t)&base->PCR[pin];
200  *(volatile uint16_t *)(addr) = *((const uint16_t *)config);
201 }
202 
228 static inline void PORT_SetMultiplePinsConfig(PORT_Type *base, uint32_t mask, const port_pin_config_t *config)
229 {
230  assert(config);
231 
232  uint16_t PCRL = *((const uint16_t *)config);
233 
234  if (mask & 0xffffU)
235  {
236  base->GPCLR = (mask & 0xffffU) | PCRL;
237  }
238  if (mask >> 16)
239  {
240  base->GPCHR = (mask >> 16) | PCRL;
241  }
242 }
243 
259 static inline void PORT_SetPinMux(PORT_Type *base, uint32_t pin, port_mux_t mux)
260 {
261  base->PCR[pin] = (base->PCR[pin] & ~PORT_PCR_MUX_MASK) | PORT_PCR_MUX(mux);
262 }
263 
264 #if defined(FSL_FEATURE_PORT_HAS_DIGITAL_FILTER) && FSL_FEATURE_PORT_HAS_DIGITAL_FILTER
265 
272 static inline void PORT_EnablePinsDigitalFilter(PORT_Type *base, uint32_t mask, bool enable)
273 {
274  if (enable == true)
275  {
276  base->DFER |= mask;
277  }
278  else
279  {
280  base->DFER &= ~mask;
281  }
282 }
283 
291 static inline void PORT_SetDigitalFilterConfig(PORT_Type *base, const port_digital_filter_config_t *config)
292 {
293  assert(config);
294 
295  base->DFCR = PORT_DFCR_CS(config->clockSource);
296  base->DFWR = PORT_DFWR_FILT(config->digitalFilterWidth);
297 }
298 
299 #endif /* FSL_FEATURE_PORT_HAS_DIGITAL_FILTER */
300 
305 
324 static inline void PORT_SetPinInterruptConfig(PORT_Type *base, uint32_t pin, const port_interrupt_t config)
325 {
326  base->PCR[pin] = (base->PCR[pin] & ~PORT_PCR_IRQC_MASK) | PORT_PCR_IRQC(config);
327 }
328 
342 static inline uint32_t PORT_GetPinsInterruptFlags(PORT_Type *base)
343 {
344  return base->ISFR;
345 }
352 static inline void PORT_ClearPinsInterruptFlags(PORT_Type *base, uint32_t mask)
353 {
354  base->ISFR = mask;
355 }
358 #if defined(__cplusplus)
359 }
360 #endif
361 
364 #endif /* _FSL_PORT_H_ */
static void PORT_EnablePinsDigitalFilter(PORT_Type *base, uint32_t mask, bool enable)
Enables the digital filter in one port. Each bit of the 32-bit register represents one pin...
Definition: fsl_port.h:272
Definition: fsl_port.h:59
Definition: fsl_port.h:130
Definition: fsl_port.h:99
Definition: fsl_port.h:74
Definition: fsl_port.h:67
static void PORT_SetPinConfig(PORT_Type *base, uint32_t pin, const port_pin_config_t *config)
Sets the port PCR register.
Definition: fsl_port.h:196
Definition: fsl_port.h:101
Definition: fsl_port.h:89
port_digital_filter_clock_source_t
Digital filter clock source selection.
Definition: fsl_port.h:127
_port_open_drain_enable
Internal resistor pull feature enable/disable.
Definition: fsl_port.h:64
Definition: fsl_port.h:66
static void PORT_SetMultiplePinsConfig(PORT_Type *base, uint32_t mask, const port_pin_config_t *config)
Sets the port PCR register.
Definition: fsl_port.h:228
Definition: fsl_port.h:75
static uint32_t PORT_GetPinsInterruptFlags(PORT_Type *base)
Reads the whole port status flag.
Definition: fsl_port.h:342
Definition: fsl_port.h:110
Definition: fsl_port.h:129
Definition: fsl_port.h:112
Definition: fsl_port.h:118
Definition: fsl_port.h:82
Definition: fsl_port.h:113
static void PORT_SetPinMux(PORT_Type *base, uint32_t pin, port_mux_t mux)
Configures the pin muxing.
Definition: fsl_port.h:259
Definition: fsl_port.h:58
_port_passive_filter_enable
Passive filter feature enable/disable.
Definition: fsl_port.h:72
Definition: fsl_port.h:81
port_digital_filter_clock_source_t clockSource
Definition: fsl_port.h:137
static void PORT_SetDigitalFilterConfig(PORT_Type *base, const port_digital_filter_config_t *config)
set the digital filter in one port. Each bit of the 32-bit register represents one pin...
Definition: fsl_port.h:291
Definition: fsl_port.h:121
Definition: fsl_port.h:120
uint32_t digitalFilterWidth
Definition: fsl_port.h:136
static void PORT_ClearPinsInterruptFlags(PORT_Type *base, uint32_t mask)
Clears the multiple pins' interrupt status flag.
Definition: fsl_port.h:352
_port_pull
Internal resistor pull feature selection.
Definition: fsl_port.h:48
Definition: fsl_port.h:52
Definition: fsl_port.h:114
PORT digital filter feature configuration definition.
Definition: fsl_port.h:134
Definition: fsl_port.h:102
static void PORT_SetPinInterruptConfig(PORT_Type *base, uint32_t pin, const port_interrupt_t config)
Configures the port pin interrupt/DMA request.
Definition: fsl_port.h:324
Definition: fsl_port.h:103
Definition: fsl_port.h:119
Definition: fsl_port.h:100
Definition: fsl_port.h:50
PORT pin config structure.
Definition: fsl_port.h:142
port_mux_t
Pin mux selection.
Definition: fsl_port.h:95
Definition: fsl_port.h:90
Definition: fsl_port.h:98
Definition: fsl_port.h:97
port_interrupt_t
Configures the interrupt generation condition.
Definition: fsl_port.h:108
Definition: fsl_port.h:122
Definition: fsl_port.h:116
Definition: fsl_port.h:117
Definition: fsl_port.h:104
_port_drive_strength
Configures the drive strength.
Definition: fsl_port.h:79
_port_slew_rate
Slew rate selection.
Definition: fsl_port.h:56
Definition: fsl_port.h:51
_port_lock_register
unlock/lock the pin control register field[15:0]
Definition: fsl_port.h:87