RTEMS  5.0.0
pio.h
Go to the documentation of this file.
1 /* ---------------------------------------------------------------------------- */
2 /* Atmel Microcontroller Software Support */
3 /* SAM Software Package License */
4 /* ---------------------------------------------------------------------------- */
5 /* Copyright (c) 2015, Atmel Corporation */
6 /* */
7 /* All rights reserved. */
8 /* */
9 /* Redistribution and use in source and binary forms, with or without */
10 /* modification, are permitted provided that the following condition is met: */
11 /* */
12 /* - Redistributions of source code must retain the above copyright notice, */
13 /* this list of conditions and the disclaimer below. */
14 /* */
15 /* Atmel's name may not be used to endorse or promote products derived from */
16 /* this software without specific prior written permission. */
17 /* */
18 /* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR */
19 /* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */
20 /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE */
21 /* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, */
22 /* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT */
23 /* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */
24 /* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF */
25 /* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */
26 /* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */
27 /* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
28 /* ---------------------------------------------------------------------------- */
29 
67 #ifndef _PIO_
68 #define _PIO_
69 
70 /*
71  * Headers
72  */
73 
74 #include "chip.h"
75 
76 #include <stdint.h>
77 
78 /*
79  * Global Definitions
80  */
81 
83 #define PIO_PERIPH_A 0
84 
85 #define PIO_PERIPH_B 1
86 
87 #define PIO_PERIPH_C 2
88 
89 #define PIO_PERIPH_D 3
90 
91 #define PIO_INPUT 4
92 
93 #define PIO_OUTPUT_0 5
94 
95 #define PIO_OUTPUT_1 6
96 
98 #define PIO_DEFAULT (0 << 0)
99 
100 #define PIO_PULLUP (1 << 0)
101 
102 #define PIO_DEGLITCH (1 << 1)
103 
104 #define PIO_OPENDRAIN (1 << 2)
105 
107 #define PIO_DEBOUNCE (1 << 3)
108 
110 #define PIO_IT_AIME (1 << 4)
111 
113 #define PIO_IT_RE_OR_HL (1 << 5)
114 
115 #define PIO_IT_EDGE (1 << 6)
116 
118 #define PIO_IT_LOW_LEVEL (0 | 0 | PIO_IT_AIME)
119 
120 #define PIO_IT_HIGH_LEVEL (PIO_IT_RE_OR_HL | 0 | PIO_IT_AIME)
121 
122 #define PIO_IT_FALL_EDGE (0 | PIO_IT_EDGE | PIO_IT_AIME)
123 
124 #define PIO_IT_RISE_EDGE (PIO_IT_RE_OR_HL | PIO_IT_EDGE | PIO_IT_AIME)
125 
126 #define PIO_WPMR_WPEN_EN (0x01 << 0)
127 
128 #define PIO_WPMR_WPEN_DIS (0x00 << 0)
129 
130 #define PIO_WPMR_WPKEY_VALID (0x50494F << 8)
131 #ifdef __cplusplus
132 extern "C" {
133 #endif
134 
135 /*
136  * Global Macros
137  */
138 
145 #define PIO_LISTSIZE(pPins) (sizeof(pPins) / sizeof(Pin))
146 
147 /*
148  * Global Types
149  */
150 
151 
152 /*
153  * Describes the type and attribute of one PIO pin or a group of similar pins.
154  * The #type# field can have the following values:
155  * - PIO_PERIPH_A
156  * - PIO_PERIPH_B
157  * - PIO_OUTPUT_0
158  * - PIO_OUTPUT_1
159  * - PIO_INPUT
160  *
161  * The #attribute# field is a bitmask that can either be set to PIO_DEFAULt,
162  * or combine (using bitwise OR '|') any number of the following constants:
163  * - PIO_PULLUP
164  * - PIO_DEGLITCH
165  * - PIO_DEBOUNCE
166  * - PIO_OPENDRAIN
167  * - PIO_IT_LOW_LEVEL
168  * - PIO_IT_HIGH_LEVEL
169  * - PIO_IT_FALL_EDGE
170  * - PIO_IT_RISE_EDGE
171  */
172 typedef struct _Pin {
173  /* Bitmask indicating which pin(s) to configure. */
174  uint32_t mask;
175  /* Pointer to the PIO controller which has the pin(s). */
176  Pio *pio;
177  /* Peripheral ID of the PIO controller which has the pin(s). */
178  uint8_t id;
179  /* Pin type. */
180  uint8_t type;
181  /* Pin attribute. */
182  uint8_t attribute;
183 } Pin;
184 
185 /*
186  * Global Access Macros
187  */
188 
189 /*
190  * Global Functions
191  */
192 
193 extern uint8_t PIO_Configure(const Pin *list, uint32_t size);
194 
195 extern void PIO_Set(const Pin *pin);
196 
197 extern void PIO_Clear(const Pin *pin);
198 
199 extern uint8_t PIO_Get(const Pin *pin);
200 
201 extern uint8_t PIO_GetOutputDataStatus(const Pin *pin);
202 
203 extern void PIO_SetDebounceFilter(const Pin *pin, uint32_t cuttoff);
204 
205 extern void PIO_EnableWriteProtect(const Pin *pin);
206 
207 extern void PIO_DisableWriteProtect(const Pin *pin);
208 
209 extern void PIO_SetPinType(Pin *pin, uint8_t pinType);
210 
211 extern uint32_t PIO_GetWriteProtectViolationInfo(const Pin *pin);
212 
213 extern void PIO_SetDriveStrength(const Pin *pin, uint8_t strength);
214 #ifdef __cplusplus
215 }
216 #endif
217 
218 #endif /* #ifndef _PIO_ */
219 
uint8_t PIO_Configure(const Pin *list, uint32_t size)
Configures a list of Pin instances, each of which can either hold a single pin or a group of pins...
Definition: pio.c:295
void PIO_Clear(const Pin *pin)
Sets a low output level on all the PIOs defined in the given Pin instance. This has no immediate effe...
Definition: pio.c:373
void PIO_Set(const Pin *pin)
Sets a high output level on all the PIOs defined in the given Pin instance. This has no immediate eff...
Definition: pio.c:360
Definition: pio.h:172
void PIO_SetDriveStrength(const Pin *pin, uint8_t strength)
Set the drive strength of the pin.
Definition: pio.c:490
uint32_t PIO_GetWriteProtectViolationInfo(const Pin *pin)
Get write protect violation information.
Definition: pio.c:467
void PIO_SetPinType(Pin *pin, uint8_t pinType)
Set pin type the pin is controlled by the corresponding peripheral (A, B, C, D,E) ...
Definition: pio.c:479
Pio hardware registers.
Definition: component_pio.h:41
uint8_t PIO_Get(const Pin *pin)
Returns 1 if one or more PIO of the given Pin instance currently have a high level; otherwise returns...
Definition: pio.c:389
void PIO_EnableWriteProtect(const Pin *pin)
Enable write protect.
Definition: pio.c:442
uint8_t PIO_GetOutputDataStatus(const Pin *pin)
Returns 1 if one or more PIO of the given Pin are configured to output a high level (even if they are...
Definition: pio.c:414
unsigned size
Definition: tte.h:74
void PIO_DisableWriteProtect(const Pin *pin)
Disable write protect.
Definition: pio.c:455
void PIO_SetDebounceFilter(const Pin *pin, uint32_t cuttoff)
Configures Glitch or Denouncing filter for input.
Definition: pio.c:428