SilentSensors / mbed-dev

Fork of mbed-dev by mbed official

Committer:
AnnaBridge
Date:
Thu Nov 23 11:57:25 2017 +0000
Revision:
178:79309dc6340a
mbed-dev library. Release version 156

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 178:79309dc6340a 1 /*
AnnaBridge 178:79309dc6340a 2 *****************************************************************************
AnnaBridge 178:79309dc6340a 3 @file: adi_gpio.h
AnnaBridge 178:79309dc6340a 4 @brief: GPIO definitions and API
AnnaBridge 178:79309dc6340a 5 -----------------------------------------------------------------------------
AnnaBridge 178:79309dc6340a 6
AnnaBridge 178:79309dc6340a 7 Copyright (c) 2016 Analog Devices, Inc.
AnnaBridge 178:79309dc6340a 8
AnnaBridge 178:79309dc6340a 9 All rights reserved.
AnnaBridge 178:79309dc6340a 10
AnnaBridge 178:79309dc6340a 11 Redistribution and use in source and binary forms, with or without modification,
AnnaBridge 178:79309dc6340a 12 are permitted provided that the following conditions are met:
AnnaBridge 178:79309dc6340a 13 - Redistributions of source code must retain the above copyright notice,
AnnaBridge 178:79309dc6340a 14 this list of conditions and the following disclaimer.
AnnaBridge 178:79309dc6340a 15 - Redistributions in binary form must reproduce the above copyright notice,
AnnaBridge 178:79309dc6340a 16 this list of conditions and the following disclaimer in the documentation
AnnaBridge 178:79309dc6340a 17 and/or other materials provided with the distribution.
AnnaBridge 178:79309dc6340a 18 - Modified versions of the software must be conspicuously marked as such.
AnnaBridge 178:79309dc6340a 19 - This software is licensed solely and exclusively for use with processors
AnnaBridge 178:79309dc6340a 20 manufactured by or for Analog Devices, Inc.
AnnaBridge 178:79309dc6340a 21 - This software may not be combined or merged with other code in any manner
AnnaBridge 178:79309dc6340a 22 that would cause the software to become subject to terms and conditions
AnnaBridge 178:79309dc6340a 23 which differ from those listed here.
AnnaBridge 178:79309dc6340a 24 - Neither the name of Analog Devices, Inc. nor the names of its
AnnaBridge 178:79309dc6340a 25 contributors may be used to endorse or promote products derived
AnnaBridge 178:79309dc6340a 26 from this software without specific prior written permission.
AnnaBridge 178:79309dc6340a 27 - The use of this software may or may not infringe the patent rights of one
AnnaBridge 178:79309dc6340a 28 or more patent holders. This license does not release you from the
AnnaBridge 178:79309dc6340a 29 requirement that you obtain separate licenses from these patent holders
AnnaBridge 178:79309dc6340a 30 to use this software.
AnnaBridge 178:79309dc6340a 31
AnnaBridge 178:79309dc6340a 32 THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES, INC. AND CONTRIBUTORS "AS IS" AND ANY
AnnaBridge 178:79309dc6340a 33 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
AnnaBridge 178:79309dc6340a 34 TITLE, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
AnnaBridge 178:79309dc6340a 35 NO EVENT SHALL ANALOG DEVICES, INC. OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
AnnaBridge 178:79309dc6340a 36 INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, PUNITIVE OR CONSEQUENTIAL DAMAGES
AnnaBridge 178:79309dc6340a 37 (INCLUDING, BUT NOT LIMITED TO, DAMAGES ARISING OUT OF CLAIMS OF INTELLECTUAL
AnnaBridge 178:79309dc6340a 38 PROPERTY RIGHTS INFRINGEMENT; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
AnnaBridge 178:79309dc6340a 39 OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
AnnaBridge 178:79309dc6340a 40 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
AnnaBridge 178:79309dc6340a 41 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
AnnaBridge 178:79309dc6340a 42 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
AnnaBridge 178:79309dc6340a 43
AnnaBridge 178:79309dc6340a 44 *****************************************************************************/
AnnaBridge 178:79309dc6340a 45 #ifndef ADI_GPIO_H
AnnaBridge 178:79309dc6340a 46 #define ADI_GPIO_H
AnnaBridge 178:79309dc6340a 47
AnnaBridge 178:79309dc6340a 48 #include <adi_processor.h>
AnnaBridge 178:79309dc6340a 49 #include <adi_callback.h>
AnnaBridge 178:79309dc6340a 50
AnnaBridge 178:79309dc6340a 51 #ifdef __ICCARM__
AnnaBridge 178:79309dc6340a 52 /* IAR MISRA C 2004 error suppressions.
AnnaBridge 178:79309dc6340a 53 *
AnnaBridge 178:79309dc6340a 54 * Pm008 (rule 2.4): sections of code should not be 'commented out'.
AnnaBridge 178:79309dc6340a 55 * Allow code example in doxygen comment.
AnnaBridge 178:79309dc6340a 56 * Pm011 (rule 6.3): The basic types of char, int, long, float cannot be used.
AnnaBridge 178:79309dc6340a 57 * bool is used in the APIs as it is not affending the rule. Disabling this as IAR treats it as an error.
AnnaBridge 178:79309dc6340a 58 */
AnnaBridge 178:79309dc6340a 59 #pragma diag_suppress=Pm008,Pm011
AnnaBridge 178:79309dc6340a 60 #endif /* __ICCARM__ */
AnnaBridge 178:79309dc6340a 61
AnnaBridge 178:79309dc6340a 62 /*! \addtogroup GPIO_Driver GPIO Driver
AnnaBridge 178:79309dc6340a 63 * @{
AnnaBridge 178:79309dc6340a 64 */
AnnaBridge 178:79309dc6340a 65
AnnaBridge 178:79309dc6340a 66 #ifdef __ICCARM__
AnnaBridge 178:79309dc6340a 67 #pragma diag_default=Pm008
AnnaBridge 178:79309dc6340a 68 #endif /* __ICCARM__ */
AnnaBridge 178:79309dc6340a 69
AnnaBridge 178:79309dc6340a 70 /* C++ linkage */
AnnaBridge 178:79309dc6340a 71 #ifdef __cplusplus
AnnaBridge 178:79309dc6340a 72 extern "C" {
AnnaBridge 178:79309dc6340a 73 #endif /* __cplusplus */
AnnaBridge 178:79309dc6340a 74
AnnaBridge 178:79309dc6340a 75 /*! Amount of memory(in bytes) required by the GPIO device driver for its operation.
AnnaBridge 178:79309dc6340a 76 * This memory is completely owned by the driver till the end of the operation.
AnnaBridge 178:79309dc6340a 77 */
AnnaBridge 178:79309dc6340a 78 #define ADI_GPIO_MEMORY_SIZE (16u)
AnnaBridge 178:79309dc6340a 79
AnnaBridge 178:79309dc6340a 80 /* typedefs for 16-bit Ports */
AnnaBridge 178:79309dc6340a 81 typedef uint16_t ADI_GPIO_DATA; /*!< pin data reg type */
AnnaBridge 178:79309dc6340a 82
AnnaBridge 178:79309dc6340a 83
AnnaBridge 178:79309dc6340a 84 /*! GPIO API function return codes */
AnnaBridge 178:79309dc6340a 85 typedef enum
AnnaBridge 178:79309dc6340a 86 {
AnnaBridge 178:79309dc6340a 87 ADI_GPIO_SUCCESS = 0, /*!< No error detected. */
AnnaBridge 178:79309dc6340a 88 ADI_GPIO_FAILURE, /*!< The API call failed. */
AnnaBridge 178:79309dc6340a 89 ADI_GPIO_ALREADY_INITIALIZED, /*!< GPIO device has already been initialized. */
AnnaBridge 178:79309dc6340a 90 ADI_GPIO_NOT_INITIALIZED, /*!< GPIO device has not yet been initialized. */
AnnaBridge 178:79309dc6340a 91 ADI_GPIO_NULL_PARAMETER, /*!< The given pointer is pointing to NULL. */
AnnaBridge 178:79309dc6340a 92 ADI_GPIO_INVALID_MEMORY_SIZE, /*!< The given memory is not sufficient to operate the driver. */
AnnaBridge 178:79309dc6340a 93 ADI_GPIO_INVALID_PINS, /*!< Invalid pin combination. */
AnnaBridge 178:79309dc6340a 94 ADI_GPIO_INVALID_INTERRUPT, /*!< Invalid interrupt number. */
AnnaBridge 178:79309dc6340a 95 ADI_GPIO_INVALID_TRIGGER, /*!< Invalid trigger condition. */
AnnaBridge 178:79309dc6340a 96 } ADI_GPIO_RESULT;
AnnaBridge 178:79309dc6340a 97
AnnaBridge 178:79309dc6340a 98
AnnaBridge 178:79309dc6340a 99 /*! GPIO trigger condition enumerations */
AnnaBridge 178:79309dc6340a 100 typedef enum {
AnnaBridge 178:79309dc6340a 101 ADI_GPIO_IRQ_RISING_EDGE =(0x0), /*!< Trigger an interrupt on a rising edge. */
AnnaBridge 178:79309dc6340a 102 ADI_GPIO_IRQ_FALLING_EDGE =(0x1), /*!< Trigger an interrupt on a falling edge. */
AnnaBridge 178:79309dc6340a 103 ADI_GPIO_IRQ_EITHER_EDGE =(0x2), /*!< Trigger an interrupt on either edge. */
AnnaBridge 178:79309dc6340a 104 ADI_GPIO_IRQ_HIGH_LEVEL =(0x3), /*!< Trigger an interrupt on a high level. */
AnnaBridge 178:79309dc6340a 105 ADI_GPIO_IRQ_LOW_LEVEL =(0x4) /*!< Trigger an interrupt on a low level. */
AnnaBridge 178:79309dc6340a 106 } ADI_GPIO_IRQ_TRIGGER_CONDITION;
AnnaBridge 178:79309dc6340a 107
AnnaBridge 178:79309dc6340a 108 /*! GPIO IRQ enumeration */
AnnaBridge 178:79309dc6340a 109 typedef enum {
AnnaBridge 178:79309dc6340a 110 ADI_GPIO_INTA_IRQ = SYS_GPIO_INTA_IRQn, /*!< GPIO Group Interrupt A. */
AnnaBridge 178:79309dc6340a 111 ADI_GPIO_INTB_IRQ = SYS_GPIO_INTB_IRQn, /*!< GPIO Group Interrupt B. */
AnnaBridge 178:79309dc6340a 112 } ADI_GPIO_IRQ;
AnnaBridge 178:79309dc6340a 113
AnnaBridge 178:79309dc6340a 114
AnnaBridge 178:79309dc6340a 115 /*! GPIO port enumerations */
AnnaBridge 178:79309dc6340a 116 typedef enum {
AnnaBridge 178:79309dc6340a 117 ADI_GPIO_PORT0, /*!< Port 0 */
AnnaBridge 178:79309dc6340a 118 ADI_GPIO_PORT1, /*!< Port 1 */
AnnaBridge 178:79309dc6340a 119 ADI_GPIO_PORT2, /*!< Port 2 */
AnnaBridge 178:79309dc6340a 120 ADI_GPIO_PORT3, /*!< Port 3 */
AnnaBridge 178:79309dc6340a 121 ADI_GPIO_NUM_PORTS /*!< maximum number of ports */
AnnaBridge 178:79309dc6340a 122 } ADI_GPIO_PORT;
AnnaBridge 178:79309dc6340a 123
AnnaBridge 178:79309dc6340a 124 /* 16-bit port pin defs */
AnnaBridge 178:79309dc6340a 125 #define ADI_GPIO_PIN_0 ((ADI_GPIO_DATA)(0x0001)) /*!< Pin 0 */
AnnaBridge 178:79309dc6340a 126 #define ADI_GPIO_PIN_1 ((ADI_GPIO_DATA)(0x0002)) /*!< Pin 1 */
AnnaBridge 178:79309dc6340a 127 #define ADI_GPIO_PIN_2 ((ADI_GPIO_DATA)(0x0004)) /*!< Pin 2 */
AnnaBridge 178:79309dc6340a 128 #define ADI_GPIO_PIN_3 ((ADI_GPIO_DATA)(0x0008)) /*!< Pin 3 */
AnnaBridge 178:79309dc6340a 129 #define ADI_GPIO_PIN_4 ((ADI_GPIO_DATA)(0x0010)) /*!< Pin 4 */
AnnaBridge 178:79309dc6340a 130 #define ADI_GPIO_PIN_5 ((ADI_GPIO_DATA)(0x0020)) /*!< Pin 5 */
AnnaBridge 178:79309dc6340a 131 #define ADI_GPIO_PIN_6 ((ADI_GPIO_DATA)(0x0040)) /*!< Pin 6 */
AnnaBridge 178:79309dc6340a 132 #define ADI_GPIO_PIN_7 ((ADI_GPIO_DATA)(0x0080)) /*!< Pin 7 */
AnnaBridge 178:79309dc6340a 133 #define ADI_GPIO_PIN_8 ((ADI_GPIO_DATA)(0x0100)) /*!< Pin 8 */
AnnaBridge 178:79309dc6340a 134 #define ADI_GPIO_PIN_9 ((ADI_GPIO_DATA)(0x0200)) /*!< Pin 9 */
AnnaBridge 178:79309dc6340a 135 #define ADI_GPIO_PIN_10 ((ADI_GPIO_DATA)(0x0400)) /*!< Pin 10 */
AnnaBridge 178:79309dc6340a 136 #define ADI_GPIO_PIN_11 ((ADI_GPIO_DATA)(0x0800)) /*!< Pin 11 */
AnnaBridge 178:79309dc6340a 137 #define ADI_GPIO_PIN_12 ((ADI_GPIO_DATA)(0x1000)) /*!< Pin 12 */
AnnaBridge 178:79309dc6340a 138 #define ADI_GPIO_PIN_13 ((ADI_GPIO_DATA)(0x2000)) /*!< Pin 13 */
AnnaBridge 178:79309dc6340a 139 #define ADI_GPIO_PIN_14 ((ADI_GPIO_DATA)(0x4000)) /*!< Pin 14 */
AnnaBridge 178:79309dc6340a 140 #define ADI_GPIO_PIN_15 ((ADI_GPIO_DATA)(0x8000)) /*!< Pin 15 */
AnnaBridge 178:79309dc6340a 141
AnnaBridge 178:79309dc6340a 142 /* GPIO port pins availability mask */
AnnaBridge 178:79309dc6340a 143 #define ADI_GPIO_PORT0_PIN_AVL (0xFFFFu) /*!< Port 0 pin mask (16 pins)*/
AnnaBridge 178:79309dc6340a 144 #define ADI_GPIO_PORT1_PIN_AVL (0xFFFFu) /*!< Port 1 pin mask (16 pins)*/
AnnaBridge 178:79309dc6340a 145 #define ADI_GPIO_PORT2_PIN_AVL (0xFFFFu) /*!< Port 2 pin mask (16 pins)*/
AnnaBridge 178:79309dc6340a 146 #define ADI_GPIO_PORT3_PIN_AVL (0x000Fu) /*!< Port 2 pin mask (4 pins) */
AnnaBridge 178:79309dc6340a 147
AnnaBridge 178:79309dc6340a 148
AnnaBridge 178:79309dc6340a 149 /* GPIO API functions */
AnnaBridge 178:79309dc6340a 150 ADI_GPIO_RESULT adi_gpio_Init (void* const pMemory, uint32_t const MemorySize);
AnnaBridge 178:79309dc6340a 151 ADI_GPIO_RESULT adi_gpio_UnInit (void);
AnnaBridge 178:79309dc6340a 152 ADI_GPIO_RESULT adi_gpio_RegisterCallback (const ADI_GPIO_IRQ eIrq, ADI_CALLBACK const pfCallback, void *const pCBParam );
AnnaBridge 178:79309dc6340a 153 ADI_GPIO_RESULT adi_gpio_SetGroupInterruptPins (const ADI_GPIO_PORT Port, const ADI_GPIO_IRQ eIrq, const ADI_GPIO_DATA Pins);
AnnaBridge 178:79309dc6340a 154 ADI_GPIO_RESULT adi_gpio_SetGroupInterruptPolarity (const ADI_GPIO_PORT Port, const ADI_GPIO_DATA Pins);
AnnaBridge 178:79309dc6340a 155 ADI_GPIO_RESULT adi_gpio_OutputEnable (const ADI_GPIO_PORT Port, const ADI_GPIO_DATA Pins, const bool bFlag);
AnnaBridge 178:79309dc6340a 156 ADI_GPIO_RESULT adi_gpio_InputEnable (const ADI_GPIO_PORT Port, const ADI_GPIO_DATA Pins, const bool bFlag);
AnnaBridge 178:79309dc6340a 157 ADI_GPIO_RESULT adi_gpio_PullUpEnable (const ADI_GPIO_PORT Port, const ADI_GPIO_DATA Pins, const bool bFlag);
AnnaBridge 178:79309dc6340a 158 ADI_GPIO_RESULT adi_gpio_SetHigh (const ADI_GPIO_PORT Port, const ADI_GPIO_DATA Pins);
AnnaBridge 178:79309dc6340a 159 ADI_GPIO_RESULT adi_gpio_SetLow (const ADI_GPIO_PORT Port, const ADI_GPIO_DATA Pins);
AnnaBridge 178:79309dc6340a 160 ADI_GPIO_RESULT adi_gpio_Toggle (const ADI_GPIO_PORT Port, const ADI_GPIO_DATA Pins);
AnnaBridge 178:79309dc6340a 161 ADI_GPIO_RESULT adi_gpio_SetData (const ADI_GPIO_PORT Port, const ADI_GPIO_DATA Pins);
AnnaBridge 178:79309dc6340a 162 ADI_GPIO_RESULT adi_gpio_GetData (const ADI_GPIO_PORT Port, const ADI_GPIO_DATA Pins, uint16_t* const pValue);
AnnaBridge 178:79309dc6340a 163
AnnaBridge 178:79309dc6340a 164 #if defined (__ICCARM__)
AnnaBridge 178:79309dc6340a 165 #pragma diag_default=Pm011
AnnaBridge 178:79309dc6340a 166 #endif
AnnaBridge 178:79309dc6340a 167
AnnaBridge 178:79309dc6340a 168 #ifdef __cplusplus
AnnaBridge 178:79309dc6340a 169 }
AnnaBridge 178:79309dc6340a 170 #endif
AnnaBridge 178:79309dc6340a 171
AnnaBridge 178:79309dc6340a 172 /**@}*/
AnnaBridge 178:79309dc6340a 173
AnnaBridge 178:79309dc6340a 174 #endif /* ADI_GPIO_V1_H */