OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [freertos-6.1.1/] [Demo/] [CORTEX_AT91SAM3U256_IAR/] [AT91Lib/] [peripherals/] [pio/] [pio.h] - Blame information for rev 580

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 580 jeremybenn
/* ----------------------------------------------------------------------------
2
 *         ATMEL Microcontroller Software Support
3
 * ----------------------------------------------------------------------------
4
 * Copyright (c) 2008, Atmel Corporation
5
 *
6
 * All rights reserved.
7
 *
8
 * Redistribution and use in source and binary forms, with or without
9
 * modification, are permitted provided that the following conditions are met:
10
 *
11
 * - Redistributions of source code must retain the above copyright notice,
12
 * this list of conditions and the disclaimer below.
13
 *
14
 * Atmel's name may not be used to endorse or promote products derived from
15
 * this software without specific prior written permission.
16
 *
17
 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
18
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
20
 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
21
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
23
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
26
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
 * ----------------------------------------------------------------------------
28
 */
29
 
30
//------------------------------------------------------------------------------
31
/// \unit
32
///
33
/// !!!Purpose
34
/// 
35
/// This file provides a basic API for PIO configuration and usage of
36
/// user-controlled pins. Please refer to the board.h file for a list of
37
/// available pin definitions.
38
/// 
39
/// !!!Usage
40
/// 
41
/// -# Define a constant pin description array such as the following one, using
42
///    the existing definitions provided by the board.h file if possible:
43
///    \code
44
///       const Pin pPins[] = {PIN_USART0_TXD, PIN_USART0_RXD};
45
///    \endcode
46
///    Alternatively, it is possible to add new pins by provided the full Pin
47
///    structure:
48
///    \code
49
///    // Pin instance to configure PA10 & PA11 as inputs with the internal
50
///    // pull-up enabled.
51
///    const Pin pPins = {
52
///         (1 << 10) | (1 << 11),
53
///         AT91C_BASE_PIOA,
54
///         AT91C_ID_PIOA,
55
///         PIO_INPUT,
56
///         PIO_PULLUP
57
///    };
58
///    \endcode
59
/// -# Configure a pin array by calling PIO_Configure() with a pointer to the
60
///    array and its size (which is computed using the PIO_LISTSIZE macro).
61
/// -# Change and get the value of a user-controlled pin using the PIO_Set,
62
///    PIO_Clear and PIO_Get methods.
63
/// -# Get the level being currently output by a user-controlled pin configured
64
///    as an output using PIO_GetOutputDataStatus().
65
//------------------------------------------------------------------------------
66
 
67
#ifndef PIO_H
68
#define PIO_H
69
 
70
//------------------------------------------------------------------------------
71
//         Headers
72
//------------------------------------------------------------------------------
73
 
74
#include <board.h>
75
 
76
//------------------------------------------------------------------------------
77
//         Global Definitions
78
//------------------------------------------------------------------------------
79
 
80
/// The pin is controlled by the associated signal of peripheral A.
81
#define PIO_PERIPH_A                0
82
/// The pin is controlled by the associated signal of peripheral B.
83
#define PIO_PERIPH_B                1
84
/// The pin is an input.
85
#define PIO_INPUT                   2
86
/// The pin is an output and has a default level of 0.
87
#define PIO_OUTPUT_0                3
88
/// The pin is an output and has a default level of 1.
89
#define PIO_OUTPUT_1                4
90
 
91
/// Default pin configuration (no attribute).
92
#define PIO_DEFAULT                 (0 << 0)
93
/// The internal pin pull-up is active.
94
#define PIO_PULLUP                  (1 << 0)
95
/// The internal glitch filter is active.
96
#define PIO_DEGLITCH                (1 << 1)
97
/// The pin is open-drain.
98
#define PIO_OPENDRAIN               (1 << 2)
99
 
100
//------------------------------------------------------------------------------
101
//         Global Macros
102
//------------------------------------------------------------------------------
103
 
104
//------------------------------------------------------------------------------
105
/// Calculates the size of an array of Pin instances. The array must be defined
106
/// locally (i.e. not a pointer), otherwise the computation will not be correct.
107
/// \param pPins  Local array of Pin instances.
108
/// \return Number of elements in array.
109
//------------------------------------------------------------------------------
110
#define PIO_LISTSIZE(pPins)    (sizeof(pPins) / sizeof(Pin))
111
 
112
//------------------------------------------------------------------------------
113
//         Global Types
114
//------------------------------------------------------------------------------
115
typedef struct _ExtIntMode {
116
  ///indicate which pin to enable/disable additional Interrupt mode
117
  ///each of 32 bit field represents one PIO line.
118
  unsigned int itMask;
119
  ///select Edge or level interrupt detection source
120
  ///each of 32 bit field represents one PIO line, 0 is Edge, 1 is Level
121
  unsigned int edgeLvlSel;
122
  ///select rising/high or falling/low detection event
123
  ///each of 32 bit field represents one PIO line:
124
  ///0 is Falling Edge detection event (if selected Edge interrupt 
125
  ///   detection source, or Low Level detection (if selected
126
  ///   Level interrupt detection source;
127
  ///1 is Rising Edge detection(if selected Edge interrupt 
128
  ///   source, or Low Level detection event(if selected Level
129
  ///   interrupt detection source.
130
  unsigned int lowFallOrRiseHighSel;
131
 
132
} ExtIntMode;
133
 
134
typedef struct _GlitchDeBounceFilter {
135
  ///Select Glitch/Debounce filtering for PIO input
136
  ///each of 32 bit field represents one PIO line
137
  ///0 is Glitch, 1 is Debouncing
138
  unsigned int filterSel;
139
  ///slow clock divider selection for Debouncing filter
140
  unsigned int clkDivider:14;
141
 
142
} GlitchDebounceFilter;
143
 
144
//------------------------------------------------------------------------------
145
/// Describes the type and attribute of one PIO pin or a group of similar pins.
146
/// The #type# field can have the following values:
147
///    - PIO_PERIPH_A
148
///    - PIO_PERIPH_B
149
///    - PIO_OUTPUT_0
150
///    - PIO_OUTPUT_1
151
///    - PIO_INPUT
152
///
153
/// The #attribute# field is a bitmask that can either be set to PIO_DEFAULt,
154
/// or combine (using bitwise OR '|') any number of the following constants:
155
///    - PIO_PULLUP
156
///    - PIO_DEGLITCH
157
///    - PIO_OPENDRAIN
158
//------------------------------------------------------------------------------
159
typedef struct {
160
 
161
    /// Bitmask indicating which pin(s) to configure.
162
    unsigned int mask;
163
    /// Pointer to the PIO controller which has the pin(s).
164
    AT91S_PIO    *pio;
165
    /// Peripheral ID of the PIO controller which has the pin(s).
166
    unsigned char id;
167
    /// Pin type.
168
    unsigned char type;
169
    /// Pin attribute.
170
    unsigned char attribute;
171
#if defined(AT91C_PIOA_AIMMR)
172
    ///Additional Interrupt Mode
173
    ExtIntMode itMode;
174
#endif
175
 
176
#if defined(AT91C_PIOA_IFDGSR)
177
    ///Glitch/Debouncing filter
178
    GlitchDebounceFilter inFilter;
179
#endif
180
 
181
} Pin;
182
 
183
//------------------------------------------------------------------------------
184
//         Global Access Macros 
185
//------------------------------------------------------------------------------
186
 
187
//Get Glitch input filter enable/disable status
188
#define PIO_GetIFSR(pPin)       ((pPin)->pio->PIO_IFSR)
189
 
190
//Get Glitch/Deboucing selection status
191
#define PIO_GetIFDGSR(pPin) ((pPin)->pio->PIO_IFDGSR)
192
 
193
//Get Additional PIO interrupt mode mask status
194
#define PIO_GetAIMMR(pPin)  ((pPin)->pio->PIO_AIMMR)
195
 
196
//Get Interrupt status
197
#define PIO_GetISR(pPin)        ((pPin)->pio->PIO_ISR)
198
 
199
//Get Edge or Level selection status
200
#define PIO_GetELSR(pPin)       ((pPin)->pio->PIO_ELSR)
201
 
202
//Get Fall/Rise or Low/High selection status
203
#define PIO_GetFRLHSR(pPin)     ((pPin)->pio->PIO_FRLHSR)
204
 
205
//Get PIO Lock Status
206
#define PIO_GetLockStatus(pPin) ((pPin)->pio->PIO_LOCKSR)
207
 
208
//------------------------------------------------------------------------------
209
//         Global Functions
210
//------------------------------------------------------------------------------
211
 
212
extern unsigned char PIO_Configure(const Pin *list, unsigned int size);
213
 
214
extern void PIO_Set(const Pin *pin);
215
 
216
extern void PIO_Clear(const Pin *pin);
217
 
218
extern unsigned char PIO_Get(const Pin *pin);
219
 
220
//extern unsigned int PIO_GetISR(const Pin *pin);
221
 
222
extern unsigned char PIO_GetOutputDataStatus(const Pin *pin);
223
 
224
#endif //#ifndef PIO_H
225
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.