Fork of Smoothie to port to mbed non-LPC targets.

Dependencies:   mbed

Fork of Smoothie by Stéphane Cachat

Committer:
Michael J. Spencer
Date:
Fri Feb 28 18:52:52 2014 -0800
Revision:
2:1df0b61d3b5a
Update to latest Smoothie.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Michael J. Spencer 2:1df0b61d3b5a 1 #ifdef __LPC17XX__
Michael J. Spencer 2:1df0b61d3b5a 2
Michael J. Spencer 2:1df0b61d3b5a 3 /**********************************************************************
Michael J. Spencer 2:1df0b61d3b5a 4 * $Id$ lpc17xx_gpio.c 2010-05-21
Michael J. Spencer 2:1df0b61d3b5a 5 *//**
Michael J. Spencer 2:1df0b61d3b5a 6 * @file lpc17xx_gpio.c
Michael J. Spencer 2:1df0b61d3b5a 7 * @brief Contains all functions support for GPIO firmware
Michael J. Spencer 2:1df0b61d3b5a 8 * library on LPC17xx
Michael J. Spencer 2:1df0b61d3b5a 9 * @version 2.0
Michael J. Spencer 2:1df0b61d3b5a 10 * @date 21. May. 2010
Michael J. Spencer 2:1df0b61d3b5a 11 * @author NXP MCU SW Application Team
Michael J. Spencer 2:1df0b61d3b5a 12 *
Michael J. Spencer 2:1df0b61d3b5a 13 * Copyright(C) 2010, NXP Semiconductor
Michael J. Spencer 2:1df0b61d3b5a 14 * All rights reserved.
Michael J. Spencer 2:1df0b61d3b5a 15 *
Michael J. Spencer 2:1df0b61d3b5a 16 ***********************************************************************
Michael J. Spencer 2:1df0b61d3b5a 17 * Software that is described herein is for illustrative purposes only
Michael J. Spencer 2:1df0b61d3b5a 18 * which provides customers with programming information regarding the
Michael J. Spencer 2:1df0b61d3b5a 19 * products. This software is supplied "AS IS" without any warranties.
Michael J. Spencer 2:1df0b61d3b5a 20 * NXP Semiconductors assumes no responsibility or liability for the
Michael J. Spencer 2:1df0b61d3b5a 21 * use of the software, conveys no license or title under any patent,
Michael J. Spencer 2:1df0b61d3b5a 22 * copyright, or mask work right to the product. NXP Semiconductors
Michael J. Spencer 2:1df0b61d3b5a 23 * reserves the right to make changes in the software without
Michael J. Spencer 2:1df0b61d3b5a 24 * notification. NXP Semiconductors also make no representation or
Michael J. Spencer 2:1df0b61d3b5a 25 * warranty that such application will be suitable for the specified
Michael J. Spencer 2:1df0b61d3b5a 26 * use without further testing or modification.
Michael J. Spencer 2:1df0b61d3b5a 27 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 28
Michael J. Spencer 2:1df0b61d3b5a 29 /* Peripheral group ----------------------------------------------------------- */
Michael J. Spencer 2:1df0b61d3b5a 30 /** @addtogroup GPIO
Michael J. Spencer 2:1df0b61d3b5a 31 * @{
Michael J. Spencer 2:1df0b61d3b5a 32 */
Michael J. Spencer 2:1df0b61d3b5a 33
Michael J. Spencer 2:1df0b61d3b5a 34 /* Includes ------------------------------------------------------------------- */
Michael J. Spencer 2:1df0b61d3b5a 35 #include "lpc17xx_gpio.h"
Michael J. Spencer 2:1df0b61d3b5a 36
Michael J. Spencer 2:1df0b61d3b5a 37 /* If this source file built with example, the LPC17xx FW library configuration
Michael J. Spencer 2:1df0b61d3b5a 38 * file in each example directory ("lpc17xx_libcfg.h") must be included,
Michael J. Spencer 2:1df0b61d3b5a 39 * otherwise the default FW library configuration file must be included instead
Michael J. Spencer 2:1df0b61d3b5a 40 */
Michael J. Spencer 2:1df0b61d3b5a 41 #ifdef __BUILD_WITH_EXAMPLE__
Michael J. Spencer 2:1df0b61d3b5a 42 #include "lpc17xx_libcfg.h"
Michael J. Spencer 2:1df0b61d3b5a 43 #else
Michael J. Spencer 2:1df0b61d3b5a 44 #include "lpc17xx_libcfg_default.h"
Michael J. Spencer 2:1df0b61d3b5a 45 #endif /* __BUILD_WITH_EXAMPLE__ */
Michael J. Spencer 2:1df0b61d3b5a 46
Michael J. Spencer 2:1df0b61d3b5a 47
Michael J. Spencer 2:1df0b61d3b5a 48 #ifdef _GPIO
Michael J. Spencer 2:1df0b61d3b5a 49
Michael J. Spencer 2:1df0b61d3b5a 50 /* Private Functions ---------------------------------------------------------- */
Michael J. Spencer 2:1df0b61d3b5a 51
Michael J. Spencer 2:1df0b61d3b5a 52 static LPC_GPIO_TypeDef *GPIO_GetPointer(uint8_t portNum);
Michael J. Spencer 2:1df0b61d3b5a 53 static GPIO_HalfWord_TypeDef *FIO_HalfWordGetPointer(uint8_t portNum);
Michael J. Spencer 2:1df0b61d3b5a 54 static GPIO_Byte_TypeDef *FIO_ByteGetPointer(uint8_t portNum);
Michael J. Spencer 2:1df0b61d3b5a 55
Michael J. Spencer 2:1df0b61d3b5a 56 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 57 * @brief Get pointer to GPIO peripheral due to GPIO port
Michael J. Spencer 2:1df0b61d3b5a 58 * @param[in] portNum Port Number value, should be in range from 0 to 4.
Michael J. Spencer 2:1df0b61d3b5a 59 * @return Pointer to GPIO peripheral
Michael J. Spencer 2:1df0b61d3b5a 60 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 61 static LPC_GPIO_TypeDef *GPIO_GetPointer(uint8_t portNum)
Michael J. Spencer 2:1df0b61d3b5a 62 {
Michael J. Spencer 2:1df0b61d3b5a 63 LPC_GPIO_TypeDef *pGPIO = NULL;
Michael J. Spencer 2:1df0b61d3b5a 64
Michael J. Spencer 2:1df0b61d3b5a 65 switch (portNum) {
Michael J. Spencer 2:1df0b61d3b5a 66 case 0:
Michael J. Spencer 2:1df0b61d3b5a 67 pGPIO = LPC_GPIO0;
Michael J. Spencer 2:1df0b61d3b5a 68 break;
Michael J. Spencer 2:1df0b61d3b5a 69 case 1:
Michael J. Spencer 2:1df0b61d3b5a 70 pGPIO = LPC_GPIO1;
Michael J. Spencer 2:1df0b61d3b5a 71 break;
Michael J. Spencer 2:1df0b61d3b5a 72 case 2:
Michael J. Spencer 2:1df0b61d3b5a 73 pGPIO = LPC_GPIO2;
Michael J. Spencer 2:1df0b61d3b5a 74 break;
Michael J. Spencer 2:1df0b61d3b5a 75 case 3:
Michael J. Spencer 2:1df0b61d3b5a 76 pGPIO = LPC_GPIO3;
Michael J. Spencer 2:1df0b61d3b5a 77 break;
Michael J. Spencer 2:1df0b61d3b5a 78 case 4:
Michael J. Spencer 2:1df0b61d3b5a 79 pGPIO = LPC_GPIO4;
Michael J. Spencer 2:1df0b61d3b5a 80 break;
Michael J. Spencer 2:1df0b61d3b5a 81 default:
Michael J. Spencer 2:1df0b61d3b5a 82 break;
Michael J. Spencer 2:1df0b61d3b5a 83 }
Michael J. Spencer 2:1df0b61d3b5a 84
Michael J. Spencer 2:1df0b61d3b5a 85 return pGPIO;
Michael J. Spencer 2:1df0b61d3b5a 86 }
Michael J. Spencer 2:1df0b61d3b5a 87
Michael J. Spencer 2:1df0b61d3b5a 88 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 89 * @brief Get pointer to FIO peripheral in halfword accessible style
Michael J. Spencer 2:1df0b61d3b5a 90 * due to FIO port
Michael J. Spencer 2:1df0b61d3b5a 91 * @param[in] portNum Port Number value, should be in range from 0 to 4.
Michael J. Spencer 2:1df0b61d3b5a 92 * @return Pointer to FIO peripheral
Michael J. Spencer 2:1df0b61d3b5a 93 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 94 static GPIO_HalfWord_TypeDef *FIO_HalfWordGetPointer(uint8_t portNum)
Michael J. Spencer 2:1df0b61d3b5a 95 {
Michael J. Spencer 2:1df0b61d3b5a 96 GPIO_HalfWord_TypeDef *pFIO = NULL;
Michael J. Spencer 2:1df0b61d3b5a 97
Michael J. Spencer 2:1df0b61d3b5a 98 switch (portNum) {
Michael J. Spencer 2:1df0b61d3b5a 99 case 0:
Michael J. Spencer 2:1df0b61d3b5a 100 pFIO = GPIO0_HalfWord;
Michael J. Spencer 2:1df0b61d3b5a 101 break;
Michael J. Spencer 2:1df0b61d3b5a 102 case 1:
Michael J. Spencer 2:1df0b61d3b5a 103 pFIO = GPIO1_HalfWord;
Michael J. Spencer 2:1df0b61d3b5a 104 break;
Michael J. Spencer 2:1df0b61d3b5a 105 case 2:
Michael J. Spencer 2:1df0b61d3b5a 106 pFIO = GPIO2_HalfWord;
Michael J. Spencer 2:1df0b61d3b5a 107 break;
Michael J. Spencer 2:1df0b61d3b5a 108 case 3:
Michael J. Spencer 2:1df0b61d3b5a 109 pFIO = GPIO3_HalfWord;
Michael J. Spencer 2:1df0b61d3b5a 110 break;
Michael J. Spencer 2:1df0b61d3b5a 111 case 4:
Michael J. Spencer 2:1df0b61d3b5a 112 pFIO = GPIO4_HalfWord;
Michael J. Spencer 2:1df0b61d3b5a 113 break;
Michael J. Spencer 2:1df0b61d3b5a 114 default:
Michael J. Spencer 2:1df0b61d3b5a 115 break;
Michael J. Spencer 2:1df0b61d3b5a 116 }
Michael J. Spencer 2:1df0b61d3b5a 117
Michael J. Spencer 2:1df0b61d3b5a 118 return pFIO;
Michael J. Spencer 2:1df0b61d3b5a 119 }
Michael J. Spencer 2:1df0b61d3b5a 120
Michael J. Spencer 2:1df0b61d3b5a 121 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 122 * @brief Get pointer to FIO peripheral in byte accessible style
Michael J. Spencer 2:1df0b61d3b5a 123 * due to FIO port
Michael J. Spencer 2:1df0b61d3b5a 124 * @param[in] portNum Port Number value, should be in range from 0 to 4.
Michael J. Spencer 2:1df0b61d3b5a 125 * @return Pointer to FIO peripheral
Michael J. Spencer 2:1df0b61d3b5a 126 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 127 static GPIO_Byte_TypeDef *FIO_ByteGetPointer(uint8_t portNum)
Michael J. Spencer 2:1df0b61d3b5a 128 {
Michael J. Spencer 2:1df0b61d3b5a 129 GPIO_Byte_TypeDef *pFIO = NULL;
Michael J. Spencer 2:1df0b61d3b5a 130
Michael J. Spencer 2:1df0b61d3b5a 131 switch (portNum) {
Michael J. Spencer 2:1df0b61d3b5a 132 case 0:
Michael J. Spencer 2:1df0b61d3b5a 133 pFIO = GPIO0_Byte;
Michael J. Spencer 2:1df0b61d3b5a 134 break;
Michael J. Spencer 2:1df0b61d3b5a 135 case 1:
Michael J. Spencer 2:1df0b61d3b5a 136 pFIO = GPIO1_Byte;
Michael J. Spencer 2:1df0b61d3b5a 137 break;
Michael J. Spencer 2:1df0b61d3b5a 138 case 2:
Michael J. Spencer 2:1df0b61d3b5a 139 pFIO = GPIO2_Byte;
Michael J. Spencer 2:1df0b61d3b5a 140 break;
Michael J. Spencer 2:1df0b61d3b5a 141 case 3:
Michael J. Spencer 2:1df0b61d3b5a 142 pFIO = GPIO3_Byte;
Michael J. Spencer 2:1df0b61d3b5a 143 break;
Michael J. Spencer 2:1df0b61d3b5a 144 case 4:
Michael J. Spencer 2:1df0b61d3b5a 145 pFIO = GPIO4_Byte;
Michael J. Spencer 2:1df0b61d3b5a 146 break;
Michael J. Spencer 2:1df0b61d3b5a 147 default:
Michael J. Spencer 2:1df0b61d3b5a 148 break;
Michael J. Spencer 2:1df0b61d3b5a 149 }
Michael J. Spencer 2:1df0b61d3b5a 150
Michael J. Spencer 2:1df0b61d3b5a 151 return pFIO;
Michael J. Spencer 2:1df0b61d3b5a 152 }
Michael J. Spencer 2:1df0b61d3b5a 153
Michael J. Spencer 2:1df0b61d3b5a 154 /* End of Private Functions --------------------------------------------------- */
Michael J. Spencer 2:1df0b61d3b5a 155
Michael J. Spencer 2:1df0b61d3b5a 156
Michael J. Spencer 2:1df0b61d3b5a 157 /* Public Functions ----------------------------------------------------------- */
Michael J. Spencer 2:1df0b61d3b5a 158 /** @addtogroup GPIO_Public_Functions
Michael J. Spencer 2:1df0b61d3b5a 159 * @{
Michael J. Spencer 2:1df0b61d3b5a 160 */
Michael J. Spencer 2:1df0b61d3b5a 161
Michael J. Spencer 2:1df0b61d3b5a 162
Michael J. Spencer 2:1df0b61d3b5a 163 /* GPIO ------------------------------------------------------------------------------ */
Michael J. Spencer 2:1df0b61d3b5a 164
Michael J. Spencer 2:1df0b61d3b5a 165 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 166 * @brief Set Direction for GPIO port.
Michael J. Spencer 2:1df0b61d3b5a 167 * @param[in] portNum Port Number value, should be in range from 0 to 4
Michael J. Spencer 2:1df0b61d3b5a 168 * @param[in] bitValue Value that contains all bits to set direction,
Michael J. Spencer 2:1df0b61d3b5a 169 * in range from 0 to 0xFFFFFFFF.
Michael J. Spencer 2:1df0b61d3b5a 170 * example: value 0x5 to set direction for bit 0 and bit 1.
Michael J. Spencer 2:1df0b61d3b5a 171 * @param[in] dir Direction value, should be:
Michael J. Spencer 2:1df0b61d3b5a 172 * - 0: Input.
Michael J. Spencer 2:1df0b61d3b5a 173 * - 1: Output.
Michael J. Spencer 2:1df0b61d3b5a 174 * @return None
Michael J. Spencer 2:1df0b61d3b5a 175 *
Michael J. Spencer 2:1df0b61d3b5a 176 * Note: All remaining bits that are not activated in bitValue (value '0')
Michael J. Spencer 2:1df0b61d3b5a 177 * will not be effected by this function.
Michael J. Spencer 2:1df0b61d3b5a 178 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 179 void GPIO_SetDir(uint8_t portNum, uint32_t bitValue, uint8_t dir)
Michael J. Spencer 2:1df0b61d3b5a 180 {
Michael J. Spencer 2:1df0b61d3b5a 181 LPC_GPIO_TypeDef *pGPIO = GPIO_GetPointer(portNum);
Michael J. Spencer 2:1df0b61d3b5a 182
Michael J. Spencer 2:1df0b61d3b5a 183 if (pGPIO != NULL) {
Michael J. Spencer 2:1df0b61d3b5a 184 // Enable Output
Michael J. Spencer 2:1df0b61d3b5a 185 if (dir) {
Michael J. Spencer 2:1df0b61d3b5a 186 pGPIO->FIODIR |= bitValue;
Michael J. Spencer 2:1df0b61d3b5a 187 }
Michael J. Spencer 2:1df0b61d3b5a 188 // Enable Input
Michael J. Spencer 2:1df0b61d3b5a 189 else {
Michael J. Spencer 2:1df0b61d3b5a 190 pGPIO->FIODIR &= ~bitValue;
Michael J. Spencer 2:1df0b61d3b5a 191 }
Michael J. Spencer 2:1df0b61d3b5a 192 }
Michael J. Spencer 2:1df0b61d3b5a 193 }
Michael J. Spencer 2:1df0b61d3b5a 194
Michael J. Spencer 2:1df0b61d3b5a 195
Michael J. Spencer 2:1df0b61d3b5a 196 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 197 * @brief Set Value for bits that have output direction on GPIO port.
Michael J. Spencer 2:1df0b61d3b5a 198 * @param[in] portNum Port number value, should be in range from 0 to 4
Michael J. Spencer 2:1df0b61d3b5a 199 * @param[in] bitValue Value that contains all bits on GPIO to set,
Michael J. Spencer 2:1df0b61d3b5a 200 * in range from 0 to 0xFFFFFFFF.
Michael J. Spencer 2:1df0b61d3b5a 201 * example: value 0x5 to set bit 0 and bit 1.
Michael J. Spencer 2:1df0b61d3b5a 202 * @return None
Michael J. Spencer 2:1df0b61d3b5a 203 *
Michael J. Spencer 2:1df0b61d3b5a 204 * Note:
Michael J. Spencer 2:1df0b61d3b5a 205 * - For all bits that has been set as input direction, this function will
Michael J. Spencer 2:1df0b61d3b5a 206 * not effect.
Michael J. Spencer 2:1df0b61d3b5a 207 * - For all remaining bits that are not activated in bitValue (value '0')
Michael J. Spencer 2:1df0b61d3b5a 208 * will not be effected by this function.
Michael J. Spencer 2:1df0b61d3b5a 209 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 210 void GPIO_SetValue(uint8_t portNum, uint32_t bitValue)
Michael J. Spencer 2:1df0b61d3b5a 211 {
Michael J. Spencer 2:1df0b61d3b5a 212 LPC_GPIO_TypeDef *pGPIO = GPIO_GetPointer(portNum);
Michael J. Spencer 2:1df0b61d3b5a 213
Michael J. Spencer 2:1df0b61d3b5a 214 if (pGPIO != NULL) {
Michael J. Spencer 2:1df0b61d3b5a 215 pGPIO->FIOSET = bitValue;
Michael J. Spencer 2:1df0b61d3b5a 216 }
Michael J. Spencer 2:1df0b61d3b5a 217 }
Michael J. Spencer 2:1df0b61d3b5a 218
Michael J. Spencer 2:1df0b61d3b5a 219 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 220 * @brief Clear Value for bits that have output direction on GPIO port.
Michael J. Spencer 2:1df0b61d3b5a 221 * @param[in] portNum Port number value, should be in range from 0 to 4
Michael J. Spencer 2:1df0b61d3b5a 222 * @param[in] bitValue Value that contains all bits on GPIO to clear,
Michael J. Spencer 2:1df0b61d3b5a 223 * in range from 0 to 0xFFFFFFFF.
Michael J. Spencer 2:1df0b61d3b5a 224 * example: value 0x5 to clear bit 0 and bit 1.
Michael J. Spencer 2:1df0b61d3b5a 225 * @return None
Michael J. Spencer 2:1df0b61d3b5a 226 *
Michael J. Spencer 2:1df0b61d3b5a 227 * Note:
Michael J. Spencer 2:1df0b61d3b5a 228 * - For all bits that has been set as input direction, this function will
Michael J. Spencer 2:1df0b61d3b5a 229 * not effect.
Michael J. Spencer 2:1df0b61d3b5a 230 * - For all remaining bits that are not activated in bitValue (value '0')
Michael J. Spencer 2:1df0b61d3b5a 231 * will not be effected by this function.
Michael J. Spencer 2:1df0b61d3b5a 232 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 233 void GPIO_ClearValue(uint8_t portNum, uint32_t bitValue)
Michael J. Spencer 2:1df0b61d3b5a 234 {
Michael J. Spencer 2:1df0b61d3b5a 235 LPC_GPIO_TypeDef *pGPIO = GPIO_GetPointer(portNum);
Michael J. Spencer 2:1df0b61d3b5a 236
Michael J. Spencer 2:1df0b61d3b5a 237 if (pGPIO != NULL) {
Michael J. Spencer 2:1df0b61d3b5a 238 pGPIO->FIOCLR = bitValue;
Michael J. Spencer 2:1df0b61d3b5a 239 }
Michael J. Spencer 2:1df0b61d3b5a 240 }
Michael J. Spencer 2:1df0b61d3b5a 241
Michael J. Spencer 2:1df0b61d3b5a 242 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 243 * @brief Read Current state on port pin that have input direction of GPIO
Michael J. Spencer 2:1df0b61d3b5a 244 * @param[in] portNum Port number to read value, in range from 0 to 4
Michael J. Spencer 2:1df0b61d3b5a 245 * @return Current value of GPIO port.
Michael J. Spencer 2:1df0b61d3b5a 246 *
Michael J. Spencer 2:1df0b61d3b5a 247 * Note: Return value contain state of each port pin (bit) on that GPIO regardless
Michael J. Spencer 2:1df0b61d3b5a 248 * its direction is input or output.
Michael J. Spencer 2:1df0b61d3b5a 249 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 250 uint32_t GPIO_ReadValue(uint8_t portNum)
Michael J. Spencer 2:1df0b61d3b5a 251 {
Michael J. Spencer 2:1df0b61d3b5a 252 LPC_GPIO_TypeDef *pGPIO = GPIO_GetPointer(portNum);
Michael J. Spencer 2:1df0b61d3b5a 253
Michael J. Spencer 2:1df0b61d3b5a 254 if (pGPIO != NULL) {
Michael J. Spencer 2:1df0b61d3b5a 255 return pGPIO->FIOPIN;
Michael J. Spencer 2:1df0b61d3b5a 256 }
Michael J. Spencer 2:1df0b61d3b5a 257
Michael J. Spencer 2:1df0b61d3b5a 258 return (0);
Michael J. Spencer 2:1df0b61d3b5a 259 }
Michael J. Spencer 2:1df0b61d3b5a 260
Michael J. Spencer 2:1df0b61d3b5a 261 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 262 * @brief Enable GPIO interrupt (just used for P0.0-P0.30, P2.0-P2.13)
Michael J. Spencer 2:1df0b61d3b5a 263 * @param[in] portNum Port number to read value, should be: 0 or 2
Michael J. Spencer 2:1df0b61d3b5a 264 * @param[in] bitValue Value that contains all bits on GPIO to enable,
Michael J. Spencer 2:1df0b61d3b5a 265 * in range from 0 to 0xFFFFFFFF.
Michael J. Spencer 2:1df0b61d3b5a 266 * @param[in] edgeState state of edge, should be:
Michael J. Spencer 2:1df0b61d3b5a 267 * - 0: Rising edge
Michael J. Spencer 2:1df0b61d3b5a 268 * - 1: Falling edge
Michael J. Spencer 2:1df0b61d3b5a 269 * @return None
Michael J. Spencer 2:1df0b61d3b5a 270 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 271 void GPIO_IntCmd(uint8_t portNum, uint32_t bitValue, uint8_t edgeState)
Michael J. Spencer 2:1df0b61d3b5a 272 {
Michael J. Spencer 2:1df0b61d3b5a 273 if((portNum == 0)&&(edgeState == 0))
Michael J. Spencer 2:1df0b61d3b5a 274 LPC_GPIOINT->IO0IntEnR = bitValue;
Michael J. Spencer 2:1df0b61d3b5a 275 else if ((portNum == 2)&&(edgeState == 0))
Michael J. Spencer 2:1df0b61d3b5a 276 LPC_GPIOINT->IO2IntEnR = bitValue;
Michael J. Spencer 2:1df0b61d3b5a 277 else if ((portNum == 0)&&(edgeState == 1))
Michael J. Spencer 2:1df0b61d3b5a 278 LPC_GPIOINT->IO0IntEnF = bitValue;
Michael J. Spencer 2:1df0b61d3b5a 279 else if ((portNum == 2)&&(edgeState == 1))
Michael J. Spencer 2:1df0b61d3b5a 280 LPC_GPIOINT->IO2IntEnF = bitValue;
Michael J. Spencer 2:1df0b61d3b5a 281 else
Michael J. Spencer 2:1df0b61d3b5a 282 //Error
Michael J. Spencer 2:1df0b61d3b5a 283 while(1);
Michael J. Spencer 2:1df0b61d3b5a 284 }
Michael J. Spencer 2:1df0b61d3b5a 285
Michael J. Spencer 2:1df0b61d3b5a 286 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 287 * @brief Get GPIO Interrupt Status (just used for P0.0-P0.30, P2.0-P2.13)
Michael J. Spencer 2:1df0b61d3b5a 288 * @param[in] portNum Port number to read value, should be: 0 or 2
Michael J. Spencer 2:1df0b61d3b5a 289 * @param[in] pinNum Pin number, should be: 0..30(with port 0) and 0..13
Michael J. Spencer 2:1df0b61d3b5a 290 * (with port 2)
Michael J. Spencer 2:1df0b61d3b5a 291 * @param[in] edgeState state of edge, should be:
Michael J. Spencer 2:1df0b61d3b5a 292 * - 0: Rising edge
Michael J. Spencer 2:1df0b61d3b5a 293 * - 1: Falling edge
Michael J. Spencer 2:1df0b61d3b5a 294 * @return Bool could be:
Michael J. Spencer 2:1df0b61d3b5a 295 * - ENABLE: Interrupt has been generated due to a rising
Michael J. Spencer 2:1df0b61d3b5a 296 * edge on P0.0
Michael J. Spencer 2:1df0b61d3b5a 297 * - DISABLE: A rising edge has not been detected on P0.0
Michael J. Spencer 2:1df0b61d3b5a 298 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 299 FunctionalState GPIO_GetIntStatus(uint8_t portNum, uint32_t pinNum, uint8_t edgeState)
Michael J. Spencer 2:1df0b61d3b5a 300 {
Michael J. Spencer 2:1df0b61d3b5a 301 if((portNum == 0) && (edgeState == 0))//Rising Edge
Michael J. Spencer 2:1df0b61d3b5a 302 return ((FunctionalState)(((LPC_GPIOINT->IO0IntStatR)>>pinNum)& 0x1));
Michael J. Spencer 2:1df0b61d3b5a 303 else if ((portNum == 2) && (edgeState == 0))
Michael J. Spencer 2:1df0b61d3b5a 304 return ((FunctionalState)(((LPC_GPIOINT->IO2IntStatR)>>pinNum)& 0x1));
Michael J. Spencer 2:1df0b61d3b5a 305 else if ((portNum == 0) && (edgeState == 1))//Falling Edge
Michael J. Spencer 2:1df0b61d3b5a 306 return ((FunctionalState)(((LPC_GPIOINT->IO0IntStatF)>>pinNum)& 0x1));
Michael J. Spencer 2:1df0b61d3b5a 307 else if ((portNum == 2) && (edgeState == 1))
Michael J. Spencer 2:1df0b61d3b5a 308 return ((FunctionalState)(((LPC_GPIOINT->IO2IntStatF)>>pinNum)& 0x1));
Michael J. Spencer 2:1df0b61d3b5a 309 else
Michael J. Spencer 2:1df0b61d3b5a 310 //Error
Michael J. Spencer 2:1df0b61d3b5a 311 while(1);
Michael J. Spencer 2:1df0b61d3b5a 312 }
Michael J. Spencer 2:1df0b61d3b5a 313 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 314 * @brief Clear GPIO interrupt (just used for P0.0-P0.30, P2.0-P2.13)
Michael J. Spencer 2:1df0b61d3b5a 315 * @param[in] portNum Port number to read value, should be: 0 or 2
Michael J. Spencer 2:1df0b61d3b5a 316 * @param[in] bitValue Value that contains all bits on GPIO to enable,
Michael J. Spencer 2:1df0b61d3b5a 317 * in range from 0 to 0xFFFFFFFF.
Michael J. Spencer 2:1df0b61d3b5a 318 * @return None
Michael J. Spencer 2:1df0b61d3b5a 319 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 320 void GPIO_ClearInt(uint8_t portNum, uint32_t bitValue)
Michael J. Spencer 2:1df0b61d3b5a 321 {
Michael J. Spencer 2:1df0b61d3b5a 322 if(portNum == 0)
Michael J. Spencer 2:1df0b61d3b5a 323 LPC_GPIOINT->IO0IntClr = bitValue;
Michael J. Spencer 2:1df0b61d3b5a 324 else if (portNum == 2)
Michael J. Spencer 2:1df0b61d3b5a 325 LPC_GPIOINT->IO2IntClr = bitValue;
Michael J. Spencer 2:1df0b61d3b5a 326 else
Michael J. Spencer 2:1df0b61d3b5a 327 //Invalid portNum
Michael J. Spencer 2:1df0b61d3b5a 328 while(1);
Michael J. Spencer 2:1df0b61d3b5a 329 }
Michael J. Spencer 2:1df0b61d3b5a 330
Michael J. Spencer 2:1df0b61d3b5a 331 /* FIO word accessible ----------------------------------------------------------------- */
Michael J. Spencer 2:1df0b61d3b5a 332 /* Stub function for FIO (word-accessible) style */
Michael J. Spencer 2:1df0b61d3b5a 333
Michael J. Spencer 2:1df0b61d3b5a 334 /**
Michael J. Spencer 2:1df0b61d3b5a 335 * @brief The same with GPIO_SetDir()
Michael J. Spencer 2:1df0b61d3b5a 336 */
Michael J. Spencer 2:1df0b61d3b5a 337 void FIO_SetDir(uint8_t portNum, uint32_t bitValue, uint8_t dir)
Michael J. Spencer 2:1df0b61d3b5a 338 {
Michael J. Spencer 2:1df0b61d3b5a 339 GPIO_SetDir(portNum, bitValue, dir);
Michael J. Spencer 2:1df0b61d3b5a 340 }
Michael J. Spencer 2:1df0b61d3b5a 341
Michael J. Spencer 2:1df0b61d3b5a 342 /**
Michael J. Spencer 2:1df0b61d3b5a 343 * @brief The same with GPIO_SetValue()
Michael J. Spencer 2:1df0b61d3b5a 344 */
Michael J. Spencer 2:1df0b61d3b5a 345 void FIO_SetValue(uint8_t portNum, uint32_t bitValue)
Michael J. Spencer 2:1df0b61d3b5a 346 {
Michael J. Spencer 2:1df0b61d3b5a 347 GPIO_SetValue(portNum, bitValue);
Michael J. Spencer 2:1df0b61d3b5a 348 }
Michael J. Spencer 2:1df0b61d3b5a 349
Michael J. Spencer 2:1df0b61d3b5a 350 /**
Michael J. Spencer 2:1df0b61d3b5a 351 * @brief The same with GPIO_ClearValue()
Michael J. Spencer 2:1df0b61d3b5a 352 */
Michael J. Spencer 2:1df0b61d3b5a 353 void FIO_ClearValue(uint8_t portNum, uint32_t bitValue)
Michael J. Spencer 2:1df0b61d3b5a 354 {
Michael J. Spencer 2:1df0b61d3b5a 355 GPIO_ClearValue(portNum, bitValue);
Michael J. Spencer 2:1df0b61d3b5a 356 }
Michael J. Spencer 2:1df0b61d3b5a 357
Michael J. Spencer 2:1df0b61d3b5a 358 /**
Michael J. Spencer 2:1df0b61d3b5a 359 * @brief The same with GPIO_ReadValue()
Michael J. Spencer 2:1df0b61d3b5a 360 */
Michael J. Spencer 2:1df0b61d3b5a 361 uint32_t FIO_ReadValue(uint8_t portNum)
Michael J. Spencer 2:1df0b61d3b5a 362 {
Michael J. Spencer 2:1df0b61d3b5a 363 return (GPIO_ReadValue(portNum));
Michael J. Spencer 2:1df0b61d3b5a 364 }
Michael J. Spencer 2:1df0b61d3b5a 365
Michael J. Spencer 2:1df0b61d3b5a 366 /**
Michael J. Spencer 2:1df0b61d3b5a 367 * @brief The same with GPIO_IntCmd()
Michael J. Spencer 2:1df0b61d3b5a 368 */
Michael J. Spencer 2:1df0b61d3b5a 369 void FIO_IntCmd(uint8_t portNum, uint32_t bitValue, uint8_t edgeState)
Michael J. Spencer 2:1df0b61d3b5a 370 {
Michael J. Spencer 2:1df0b61d3b5a 371 GPIO_IntCmd(portNum, bitValue, edgeState);
Michael J. Spencer 2:1df0b61d3b5a 372 }
Michael J. Spencer 2:1df0b61d3b5a 373
Michael J. Spencer 2:1df0b61d3b5a 374 /**
Michael J. Spencer 2:1df0b61d3b5a 375 * @brief The same with GPIO_GetIntStatus()
Michael J. Spencer 2:1df0b61d3b5a 376 */
Michael J. Spencer 2:1df0b61d3b5a 377 FunctionalState FIO_GetIntStatus(uint8_t portNum, uint32_t pinNum, uint8_t edgeState)
Michael J. Spencer 2:1df0b61d3b5a 378 {
Michael J. Spencer 2:1df0b61d3b5a 379 return (GPIO_GetIntStatus(portNum, pinNum, edgeState));
Michael J. Spencer 2:1df0b61d3b5a 380 }
Michael J. Spencer 2:1df0b61d3b5a 381
Michael J. Spencer 2:1df0b61d3b5a 382 /**
Michael J. Spencer 2:1df0b61d3b5a 383 * @brief The same with GPIO_ClearInt()
Michael J. Spencer 2:1df0b61d3b5a 384 */
Michael J. Spencer 2:1df0b61d3b5a 385 void FIO_ClearInt(uint8_t portNum, uint32_t bitValue)
Michael J. Spencer 2:1df0b61d3b5a 386 {
Michael J. Spencer 2:1df0b61d3b5a 387 GPIO_ClearInt(portNum, bitValue);
Michael J. Spencer 2:1df0b61d3b5a 388 }
Michael J. Spencer 2:1df0b61d3b5a 389 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 390 * @brief Set mask value for bits in FIO port
Michael J. Spencer 2:1df0b61d3b5a 391 * @param[in] portNum Port number, in range from 0 to 4
Michael J. Spencer 2:1df0b61d3b5a 392 * @param[in] bitValue Value that contains all bits in to set,
Michael J. Spencer 2:1df0b61d3b5a 393 * in range from 0 to 0xFFFFFFFF.
Michael J. Spencer 2:1df0b61d3b5a 394 * @param[in] maskValue Mask value contains state value for each bit:
Michael J. Spencer 2:1df0b61d3b5a 395 * - 0: not mask.
Michael J. Spencer 2:1df0b61d3b5a 396 * - 1: mask.
Michael J. Spencer 2:1df0b61d3b5a 397 * @return None
Michael J. Spencer 2:1df0b61d3b5a 398 *
Michael J. Spencer 2:1df0b61d3b5a 399 * Note:
Michael J. Spencer 2:1df0b61d3b5a 400 * - All remaining bits that are not activated in bitValue (value '0')
Michael J. Spencer 2:1df0b61d3b5a 401 * will not be effected by this function.
Michael J. Spencer 2:1df0b61d3b5a 402 * - After executing this function, in mask register, value '0' on each bit
Michael J. Spencer 2:1df0b61d3b5a 403 * enables an access to the corresponding physical pin via a read or write access,
Michael J. Spencer 2:1df0b61d3b5a 404 * while value '1' on bit (masked) that corresponding pin will not be changed
Michael J. Spencer 2:1df0b61d3b5a 405 * with write access and if read, will not be reflected in the updated pin.
Michael J. Spencer 2:1df0b61d3b5a 406 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 407 void FIO_SetMask(uint8_t portNum, uint32_t bitValue, uint8_t maskValue)
Michael J. Spencer 2:1df0b61d3b5a 408 {
Michael J. Spencer 2:1df0b61d3b5a 409 LPC_GPIO_TypeDef *pFIO = GPIO_GetPointer(portNum);
Michael J. Spencer 2:1df0b61d3b5a 410 if(pFIO != NULL) {
Michael J. Spencer 2:1df0b61d3b5a 411 // Mask
Michael J. Spencer 2:1df0b61d3b5a 412 if (maskValue){
Michael J. Spencer 2:1df0b61d3b5a 413 pFIO->FIOMASK |= bitValue;
Michael J. Spencer 2:1df0b61d3b5a 414 }
Michael J. Spencer 2:1df0b61d3b5a 415 // Un-mask
Michael J. Spencer 2:1df0b61d3b5a 416 else {
Michael J. Spencer 2:1df0b61d3b5a 417 pFIO->FIOMASK &= ~bitValue;
Michael J. Spencer 2:1df0b61d3b5a 418 }
Michael J. Spencer 2:1df0b61d3b5a 419 }
Michael J. Spencer 2:1df0b61d3b5a 420 }
Michael J. Spencer 2:1df0b61d3b5a 421
Michael J. Spencer 2:1df0b61d3b5a 422
Michael J. Spencer 2:1df0b61d3b5a 423 /* FIO halfword accessible ------------------------------------------------------------- */
Michael J. Spencer 2:1df0b61d3b5a 424
Michael J. Spencer 2:1df0b61d3b5a 425 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 426 * @brief Set direction for FIO port in halfword accessible style
Michael J. Spencer 2:1df0b61d3b5a 427 * @param[in] portNum Port number, in range from 0 to 4
Michael J. Spencer 2:1df0b61d3b5a 428 * @param[in] halfwordNum HalfWord part number, should be 0 (lower) or 1(upper)
Michael J. Spencer 2:1df0b61d3b5a 429 * @param[in] bitValue Value that contains all bits in to set direction,
Michael J. Spencer 2:1df0b61d3b5a 430 * in range from 0 to 0xFFFF.
Michael J. Spencer 2:1df0b61d3b5a 431 * @param[in] dir Direction value, should be:
Michael J. Spencer 2:1df0b61d3b5a 432 * - 0: Input.
Michael J. Spencer 2:1df0b61d3b5a 433 * - 1: Output.
Michael J. Spencer 2:1df0b61d3b5a 434 * @return None
Michael J. Spencer 2:1df0b61d3b5a 435 *
Michael J. Spencer 2:1df0b61d3b5a 436 * Note: All remaining bits that are not activated in bitValue (value '0')
Michael J. Spencer 2:1df0b61d3b5a 437 * will not be effected by this function.
Michael J. Spencer 2:1df0b61d3b5a 438 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 439 void FIO_HalfWordSetDir(uint8_t portNum, uint8_t halfwordNum, uint16_t bitValue, uint8_t dir)
Michael J. Spencer 2:1df0b61d3b5a 440 {
Michael J. Spencer 2:1df0b61d3b5a 441 GPIO_HalfWord_TypeDef *pFIO = FIO_HalfWordGetPointer(portNum);
Michael J. Spencer 2:1df0b61d3b5a 442 if(pFIO != NULL) {
Michael J. Spencer 2:1df0b61d3b5a 443 // Output direction
Michael J. Spencer 2:1df0b61d3b5a 444 if (dir) {
Michael J. Spencer 2:1df0b61d3b5a 445 // Upper
Michael J. Spencer 2:1df0b61d3b5a 446 if(halfwordNum) {
Michael J. Spencer 2:1df0b61d3b5a 447 pFIO->FIODIRU |= bitValue;
Michael J. Spencer 2:1df0b61d3b5a 448 }
Michael J. Spencer 2:1df0b61d3b5a 449 // lower
Michael J. Spencer 2:1df0b61d3b5a 450 else {
Michael J. Spencer 2:1df0b61d3b5a 451 pFIO->FIODIRL |= bitValue;
Michael J. Spencer 2:1df0b61d3b5a 452 }
Michael J. Spencer 2:1df0b61d3b5a 453 }
Michael J. Spencer 2:1df0b61d3b5a 454 // Input direction
Michael J. Spencer 2:1df0b61d3b5a 455 else {
Michael J. Spencer 2:1df0b61d3b5a 456 // Upper
Michael J. Spencer 2:1df0b61d3b5a 457 if(halfwordNum) {
Michael J. Spencer 2:1df0b61d3b5a 458 pFIO->FIODIRU &= ~bitValue;
Michael J. Spencer 2:1df0b61d3b5a 459 }
Michael J. Spencer 2:1df0b61d3b5a 460 // lower
Michael J. Spencer 2:1df0b61d3b5a 461 else {
Michael J. Spencer 2:1df0b61d3b5a 462 pFIO->FIODIRL &= ~bitValue;
Michael J. Spencer 2:1df0b61d3b5a 463 }
Michael J. Spencer 2:1df0b61d3b5a 464 }
Michael J. Spencer 2:1df0b61d3b5a 465 }
Michael J. Spencer 2:1df0b61d3b5a 466 }
Michael J. Spencer 2:1df0b61d3b5a 467
Michael J. Spencer 2:1df0b61d3b5a 468
Michael J. Spencer 2:1df0b61d3b5a 469 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 470 * @brief Set mask value for bits in FIO port in halfword accessible style
Michael J. Spencer 2:1df0b61d3b5a 471 * @param[in] portNum Port number, in range from 0 to 4
Michael J. Spencer 2:1df0b61d3b5a 472 * @param[in] halfwordNum HalfWord part number, should be 0 (lower) or 1(upper)
Michael J. Spencer 2:1df0b61d3b5a 473 * @param[in] bitValue Value that contains all bits in to set,
Michael J. Spencer 2:1df0b61d3b5a 474 * in range from 0 to 0xFFFF.
Michael J. Spencer 2:1df0b61d3b5a 475 * @param[in] maskValue Mask value contains state value for each bit:
Michael J. Spencer 2:1df0b61d3b5a 476 * - 0: not mask.
Michael J. Spencer 2:1df0b61d3b5a 477 * - 1: mask.
Michael J. Spencer 2:1df0b61d3b5a 478 * @return None
Michael J. Spencer 2:1df0b61d3b5a 479 *
Michael J. Spencer 2:1df0b61d3b5a 480 * Note:
Michael J. Spencer 2:1df0b61d3b5a 481 * - All remaining bits that are not activated in bitValue (value '0')
Michael J. Spencer 2:1df0b61d3b5a 482 * will not be effected by this function.
Michael J. Spencer 2:1df0b61d3b5a 483 * - After executing this function, in mask register, value '0' on each bit
Michael J. Spencer 2:1df0b61d3b5a 484 * enables an access to the corresponding physical pin via a read or write access,
Michael J. Spencer 2:1df0b61d3b5a 485 * while value '1' on bit (masked) that corresponding pin will not be changed
Michael J. Spencer 2:1df0b61d3b5a 486 * with write access and if read, will not be reflected in the updated pin.
Michael J. Spencer 2:1df0b61d3b5a 487 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 488 void FIO_HalfWordSetMask(uint8_t portNum, uint8_t halfwordNum, uint16_t bitValue, uint8_t maskValue)
Michael J. Spencer 2:1df0b61d3b5a 489 {
Michael J. Spencer 2:1df0b61d3b5a 490 GPIO_HalfWord_TypeDef *pFIO = FIO_HalfWordGetPointer(portNum);
Michael J. Spencer 2:1df0b61d3b5a 491 if(pFIO != NULL) {
Michael J. Spencer 2:1df0b61d3b5a 492 // Mask
Michael J. Spencer 2:1df0b61d3b5a 493 if (maskValue){
Michael J. Spencer 2:1df0b61d3b5a 494 // Upper
Michael J. Spencer 2:1df0b61d3b5a 495 if(halfwordNum) {
Michael J. Spencer 2:1df0b61d3b5a 496 pFIO->FIOMASKU |= bitValue;
Michael J. Spencer 2:1df0b61d3b5a 497 }
Michael J. Spencer 2:1df0b61d3b5a 498 // lower
Michael J. Spencer 2:1df0b61d3b5a 499 else {
Michael J. Spencer 2:1df0b61d3b5a 500 pFIO->FIOMASKL |= bitValue;
Michael J. Spencer 2:1df0b61d3b5a 501 }
Michael J. Spencer 2:1df0b61d3b5a 502 }
Michael J. Spencer 2:1df0b61d3b5a 503 // Un-mask
Michael J. Spencer 2:1df0b61d3b5a 504 else {
Michael J. Spencer 2:1df0b61d3b5a 505 // Upper
Michael J. Spencer 2:1df0b61d3b5a 506 if(halfwordNum) {
Michael J. Spencer 2:1df0b61d3b5a 507 pFIO->FIOMASKU &= ~bitValue;
Michael J. Spencer 2:1df0b61d3b5a 508 }
Michael J. Spencer 2:1df0b61d3b5a 509 // lower
Michael J. Spencer 2:1df0b61d3b5a 510 else {
Michael J. Spencer 2:1df0b61d3b5a 511 pFIO->FIOMASKL &= ~bitValue;
Michael J. Spencer 2:1df0b61d3b5a 512 }
Michael J. Spencer 2:1df0b61d3b5a 513 }
Michael J. Spencer 2:1df0b61d3b5a 514 }
Michael J. Spencer 2:1df0b61d3b5a 515 }
Michael J. Spencer 2:1df0b61d3b5a 516
Michael J. Spencer 2:1df0b61d3b5a 517
Michael J. Spencer 2:1df0b61d3b5a 518 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 519 * @brief Set bits for FIO port in halfword accessible style
Michael J. Spencer 2:1df0b61d3b5a 520 * @param[in] portNum Port number, in range from 0 to 4
Michael J. Spencer 2:1df0b61d3b5a 521 * @param[in] halfwordNum HalfWord part number, should be 0 (lower) or 1(upper)
Michael J. Spencer 2:1df0b61d3b5a 522 * @param[in] bitValue Value that contains all bits in to set,
Michael J. Spencer 2:1df0b61d3b5a 523 * in range from 0 to 0xFFFF.
Michael J. Spencer 2:1df0b61d3b5a 524 * @return None
Michael J. Spencer 2:1df0b61d3b5a 525 *
Michael J. Spencer 2:1df0b61d3b5a 526 * Note:
Michael J. Spencer 2:1df0b61d3b5a 527 * - For all bits that has been set as input direction, this function will
Michael J. Spencer 2:1df0b61d3b5a 528 * not effect.
Michael J. Spencer 2:1df0b61d3b5a 529 * - For all remaining bits that are not activated in bitValue (value '0')
Michael J. Spencer 2:1df0b61d3b5a 530 * will not be effected by this function.
Michael J. Spencer 2:1df0b61d3b5a 531 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 532 void FIO_HalfWordSetValue(uint8_t portNum, uint8_t halfwordNum, uint16_t bitValue)
Michael J. Spencer 2:1df0b61d3b5a 533 {
Michael J. Spencer 2:1df0b61d3b5a 534 GPIO_HalfWord_TypeDef *pFIO = FIO_HalfWordGetPointer(portNum);
Michael J. Spencer 2:1df0b61d3b5a 535 if(pFIO != NULL) {
Michael J. Spencer 2:1df0b61d3b5a 536 // Upper
Michael J. Spencer 2:1df0b61d3b5a 537 if(halfwordNum) {
Michael J. Spencer 2:1df0b61d3b5a 538 pFIO->FIOSETU = bitValue;
Michael J. Spencer 2:1df0b61d3b5a 539 }
Michael J. Spencer 2:1df0b61d3b5a 540 // lower
Michael J. Spencer 2:1df0b61d3b5a 541 else {
Michael J. Spencer 2:1df0b61d3b5a 542 pFIO->FIOSETL = bitValue;
Michael J. Spencer 2:1df0b61d3b5a 543 }
Michael J. Spencer 2:1df0b61d3b5a 544 }
Michael J. Spencer 2:1df0b61d3b5a 545 }
Michael J. Spencer 2:1df0b61d3b5a 546
Michael J. Spencer 2:1df0b61d3b5a 547
Michael J. Spencer 2:1df0b61d3b5a 548 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 549 * @brief Clear bits for FIO port in halfword accessible style
Michael J. Spencer 2:1df0b61d3b5a 550 * @param[in] portNum Port number, in range from 0 to 4
Michael J. Spencer 2:1df0b61d3b5a 551 * @param[in] halfwordNum HalfWord part number, should be 0 (lower) or 1(upper)
Michael J. Spencer 2:1df0b61d3b5a 552 * @param[in] bitValue Value that contains all bits in to clear,
Michael J. Spencer 2:1df0b61d3b5a 553 * in range from 0 to 0xFFFF.
Michael J. Spencer 2:1df0b61d3b5a 554 * @return None
Michael J. Spencer 2:1df0b61d3b5a 555 *
Michael J. Spencer 2:1df0b61d3b5a 556 * Note:
Michael J. Spencer 2:1df0b61d3b5a 557 * - For all bits that has been set as input direction, this function will
Michael J. Spencer 2:1df0b61d3b5a 558 * not effect.
Michael J. Spencer 2:1df0b61d3b5a 559 * - For all remaining bits that are not activated in bitValue (value '0')
Michael J. Spencer 2:1df0b61d3b5a 560 * will not be effected by this function.
Michael J. Spencer 2:1df0b61d3b5a 561 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 562 void FIO_HalfWordClearValue(uint8_t portNum, uint8_t halfwordNum, uint16_t bitValue)
Michael J. Spencer 2:1df0b61d3b5a 563 {
Michael J. Spencer 2:1df0b61d3b5a 564 GPIO_HalfWord_TypeDef *pFIO = FIO_HalfWordGetPointer(portNum);
Michael J. Spencer 2:1df0b61d3b5a 565 if(pFIO != NULL) {
Michael J. Spencer 2:1df0b61d3b5a 566 // Upper
Michael J. Spencer 2:1df0b61d3b5a 567 if(halfwordNum) {
Michael J. Spencer 2:1df0b61d3b5a 568 pFIO->FIOCLRU = bitValue;
Michael J. Spencer 2:1df0b61d3b5a 569 }
Michael J. Spencer 2:1df0b61d3b5a 570 // lower
Michael J. Spencer 2:1df0b61d3b5a 571 else {
Michael J. Spencer 2:1df0b61d3b5a 572 pFIO->FIOCLRL = bitValue;
Michael J. Spencer 2:1df0b61d3b5a 573 }
Michael J. Spencer 2:1df0b61d3b5a 574 }
Michael J. Spencer 2:1df0b61d3b5a 575 }
Michael J. Spencer 2:1df0b61d3b5a 576
Michael J. Spencer 2:1df0b61d3b5a 577
Michael J. Spencer 2:1df0b61d3b5a 578 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 579 * @brief Read Current state on port pin that have input direction of GPIO
Michael J. Spencer 2:1df0b61d3b5a 580 * in halfword accessible style.
Michael J. Spencer 2:1df0b61d3b5a 581 * @param[in] portNum Port number, in range from 0 to 4
Michael J. Spencer 2:1df0b61d3b5a 582 * @param[in] halfwordNum HalfWord part number, should be 0 (lower) or 1(upper)
Michael J. Spencer 2:1df0b61d3b5a 583 * @return Current value of FIO port pin of specified halfword.
Michael J. Spencer 2:1df0b61d3b5a 584 * Note: Return value contain state of each port pin (bit) on that FIO regardless
Michael J. Spencer 2:1df0b61d3b5a 585 * its direction is input or output.
Michael J. Spencer 2:1df0b61d3b5a 586 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 587 uint16_t FIO_HalfWordReadValue(uint8_t portNum, uint8_t halfwordNum)
Michael J. Spencer 2:1df0b61d3b5a 588 {
Michael J. Spencer 2:1df0b61d3b5a 589 GPIO_HalfWord_TypeDef *pFIO = FIO_HalfWordGetPointer(portNum);
Michael J. Spencer 2:1df0b61d3b5a 590 if(pFIO != NULL) {
Michael J. Spencer 2:1df0b61d3b5a 591 // Upper
Michael J. Spencer 2:1df0b61d3b5a 592 if(halfwordNum) {
Michael J. Spencer 2:1df0b61d3b5a 593 return (pFIO->FIOPINU);
Michael J. Spencer 2:1df0b61d3b5a 594 }
Michael J. Spencer 2:1df0b61d3b5a 595 // lower
Michael J. Spencer 2:1df0b61d3b5a 596 else {
Michael J. Spencer 2:1df0b61d3b5a 597 return (pFIO->FIOPINL);
Michael J. Spencer 2:1df0b61d3b5a 598 }
Michael J. Spencer 2:1df0b61d3b5a 599 }
Michael J. Spencer 2:1df0b61d3b5a 600 return (0);
Michael J. Spencer 2:1df0b61d3b5a 601 }
Michael J. Spencer 2:1df0b61d3b5a 602
Michael J. Spencer 2:1df0b61d3b5a 603
Michael J. Spencer 2:1df0b61d3b5a 604 /* FIO Byte accessible ------------------------------------------------------------ */
Michael J. Spencer 2:1df0b61d3b5a 605
Michael J. Spencer 2:1df0b61d3b5a 606 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 607 * @brief Set direction for FIO port in byte accessible style
Michael J. Spencer 2:1df0b61d3b5a 608 * @param[in] portNum Port number, in range from 0 to 4
Michael J. Spencer 2:1df0b61d3b5a 609 * @param[in] byteNum Byte part number, should be in range from 0 to 3
Michael J. Spencer 2:1df0b61d3b5a 610 * @param[in] bitValue Value that contains all bits in to set direction,
Michael J. Spencer 2:1df0b61d3b5a 611 * in range from 0 to 0xFF.
Michael J. Spencer 2:1df0b61d3b5a 612 * @param[in] dir Direction value, should be:
Michael J. Spencer 2:1df0b61d3b5a 613 * - 0: Input.
Michael J. Spencer 2:1df0b61d3b5a 614 * - 1: Output.
Michael J. Spencer 2:1df0b61d3b5a 615 * @return None
Michael J. Spencer 2:1df0b61d3b5a 616 *
Michael J. Spencer 2:1df0b61d3b5a 617 * Note: All remaining bits that are not activated in bitValue (value '0')
Michael J. Spencer 2:1df0b61d3b5a 618 * will not be effected by this function.
Michael J. Spencer 2:1df0b61d3b5a 619 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 620 void FIO_ByteSetDir(uint8_t portNum, uint8_t byteNum, uint8_t bitValue, uint8_t dir)
Michael J. Spencer 2:1df0b61d3b5a 621 {
Michael J. Spencer 2:1df0b61d3b5a 622 GPIO_Byte_TypeDef *pFIO = FIO_ByteGetPointer(portNum);
Michael J. Spencer 2:1df0b61d3b5a 623 if(pFIO != NULL) {
Michael J. Spencer 2:1df0b61d3b5a 624 // Output direction
Michael J. Spencer 2:1df0b61d3b5a 625 if (dir) {
Michael J. Spencer 2:1df0b61d3b5a 626 if (byteNum <= 3) {
Michael J. Spencer 2:1df0b61d3b5a 627 pFIO->FIODIR[byteNum] |= bitValue;
Michael J. Spencer 2:1df0b61d3b5a 628 }
Michael J. Spencer 2:1df0b61d3b5a 629 }
Michael J. Spencer 2:1df0b61d3b5a 630 // Input direction
Michael J. Spencer 2:1df0b61d3b5a 631 else {
Michael J. Spencer 2:1df0b61d3b5a 632 if (byteNum <= 3) {
Michael J. Spencer 2:1df0b61d3b5a 633 pFIO->FIODIR[byteNum] &= ~bitValue;
Michael J. Spencer 2:1df0b61d3b5a 634 }
Michael J. Spencer 2:1df0b61d3b5a 635 }
Michael J. Spencer 2:1df0b61d3b5a 636 }
Michael J. Spencer 2:1df0b61d3b5a 637 }
Michael J. Spencer 2:1df0b61d3b5a 638
Michael J. Spencer 2:1df0b61d3b5a 639 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 640 * @brief Set mask value for bits in FIO port in byte accessible style
Michael J. Spencer 2:1df0b61d3b5a 641 * @param[in] portNum Port number, in range from 0 to 4
Michael J. Spencer 2:1df0b61d3b5a 642 * @param[in] byteNum Byte part number, should be in range from 0 to 3
Michael J. Spencer 2:1df0b61d3b5a 643 * @param[in] bitValue Value that contains all bits in to set mask,
Michael J. Spencer 2:1df0b61d3b5a 644 * in range from 0 to 0xFF.
Michael J. Spencer 2:1df0b61d3b5a 645 * @param[in] maskValue Mask value contains state value for each bit:
Michael J. Spencer 2:1df0b61d3b5a 646 * - 0: not mask.
Michael J. Spencer 2:1df0b61d3b5a 647 * - 1: mask.
Michael J. Spencer 2:1df0b61d3b5a 648 * @return None
Michael J. Spencer 2:1df0b61d3b5a 649 *
Michael J. Spencer 2:1df0b61d3b5a 650 * Note:
Michael J. Spencer 2:1df0b61d3b5a 651 * - All remaining bits that are not activated in bitValue (value '0')
Michael J. Spencer 2:1df0b61d3b5a 652 * will not be effected by this function.
Michael J. Spencer 2:1df0b61d3b5a 653 * - After executing this function, in mask register, value '0' on each bit
Michael J. Spencer 2:1df0b61d3b5a 654 * enables an access to the corresponding physical pin via a read or write access,
Michael J. Spencer 2:1df0b61d3b5a 655 * while value '1' on bit (masked) that corresponding pin will not be changed
Michael J. Spencer 2:1df0b61d3b5a 656 * with write access and if read, will not be reflected in the updated pin.
Michael J. Spencer 2:1df0b61d3b5a 657 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 658 void FIO_ByteSetMask(uint8_t portNum, uint8_t byteNum, uint8_t bitValue, uint8_t maskValue)
Michael J. Spencer 2:1df0b61d3b5a 659 {
Michael J. Spencer 2:1df0b61d3b5a 660 GPIO_Byte_TypeDef *pFIO = FIO_ByteGetPointer(portNum);
Michael J. Spencer 2:1df0b61d3b5a 661 if(pFIO != NULL) {
Michael J. Spencer 2:1df0b61d3b5a 662 // Mask
Michael J. Spencer 2:1df0b61d3b5a 663 if (maskValue) {
Michael J. Spencer 2:1df0b61d3b5a 664 if (byteNum <= 3) {
Michael J. Spencer 2:1df0b61d3b5a 665 pFIO->FIOMASK[byteNum] |= bitValue;
Michael J. Spencer 2:1df0b61d3b5a 666 }
Michael J. Spencer 2:1df0b61d3b5a 667 }
Michael J. Spencer 2:1df0b61d3b5a 668 // Un-mask
Michael J. Spencer 2:1df0b61d3b5a 669 else {
Michael J. Spencer 2:1df0b61d3b5a 670 if (byteNum <= 3) {
Michael J. Spencer 2:1df0b61d3b5a 671 pFIO->FIOMASK[byteNum] &= ~bitValue;
Michael J. Spencer 2:1df0b61d3b5a 672 }
Michael J. Spencer 2:1df0b61d3b5a 673 }
Michael J. Spencer 2:1df0b61d3b5a 674 }
Michael J. Spencer 2:1df0b61d3b5a 675 }
Michael J. Spencer 2:1df0b61d3b5a 676
Michael J. Spencer 2:1df0b61d3b5a 677
Michael J. Spencer 2:1df0b61d3b5a 678 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 679 * @brief Set bits for FIO port in byte accessible style
Michael J. Spencer 2:1df0b61d3b5a 680 * @param[in] portNum Port number, in range from 0 to 4
Michael J. Spencer 2:1df0b61d3b5a 681 * @param[in] byteNum Byte part number, should be in range from 0 to 3
Michael J. Spencer 2:1df0b61d3b5a 682 * @param[in] bitValue Value that contains all bits in to set,
Michael J. Spencer 2:1df0b61d3b5a 683 * in range from 0 to 0xFF.
Michael J. Spencer 2:1df0b61d3b5a 684 * @return None
Michael J. Spencer 2:1df0b61d3b5a 685 *
Michael J. Spencer 2:1df0b61d3b5a 686 * Note:
Michael J. Spencer 2:1df0b61d3b5a 687 * - For all bits that has been set as input direction, this function will
Michael J. Spencer 2:1df0b61d3b5a 688 * not effect.
Michael J. Spencer 2:1df0b61d3b5a 689 * - For all remaining bits that are not activated in bitValue (value '0')
Michael J. Spencer 2:1df0b61d3b5a 690 * will not be effected by this function.
Michael J. Spencer 2:1df0b61d3b5a 691 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 692 void FIO_ByteSetValue(uint8_t portNum, uint8_t byteNum, uint8_t bitValue)
Michael J. Spencer 2:1df0b61d3b5a 693 {
Michael J. Spencer 2:1df0b61d3b5a 694 GPIO_Byte_TypeDef *pFIO = FIO_ByteGetPointer(portNum);
Michael J. Spencer 2:1df0b61d3b5a 695 if (pFIO != NULL) {
Michael J. Spencer 2:1df0b61d3b5a 696 if (byteNum <= 3){
Michael J. Spencer 2:1df0b61d3b5a 697 pFIO->FIOSET[byteNum] = bitValue;
Michael J. Spencer 2:1df0b61d3b5a 698 }
Michael J. Spencer 2:1df0b61d3b5a 699 }
Michael J. Spencer 2:1df0b61d3b5a 700 }
Michael J. Spencer 2:1df0b61d3b5a 701
Michael J. Spencer 2:1df0b61d3b5a 702
Michael J. Spencer 2:1df0b61d3b5a 703 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 704 * @brief Clear bits for FIO port in byte accessible style
Michael J. Spencer 2:1df0b61d3b5a 705 * @param[in] portNum Port number, in range from 0 to 4
Michael J. Spencer 2:1df0b61d3b5a 706 * @param[in] byteNum Byte part number, should be in range from 0 to 3
Michael J. Spencer 2:1df0b61d3b5a 707 * @param[in] bitValue Value that contains all bits in to clear,
Michael J. Spencer 2:1df0b61d3b5a 708 * in range from 0 to 0xFF.
Michael J. Spencer 2:1df0b61d3b5a 709 * @return None
Michael J. Spencer 2:1df0b61d3b5a 710 *
Michael J. Spencer 2:1df0b61d3b5a 711 * Note:
Michael J. Spencer 2:1df0b61d3b5a 712 * - For all bits that has been set as input direction, this function will
Michael J. Spencer 2:1df0b61d3b5a 713 * not effect.
Michael J. Spencer 2:1df0b61d3b5a 714 * - For all remaining bits that are not activated in bitValue (value '0')
Michael J. Spencer 2:1df0b61d3b5a 715 * will not be effected by this function.
Michael J. Spencer 2:1df0b61d3b5a 716 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 717 void FIO_ByteClearValue(uint8_t portNum, uint8_t byteNum, uint8_t bitValue)
Michael J. Spencer 2:1df0b61d3b5a 718 {
Michael J. Spencer 2:1df0b61d3b5a 719 GPIO_Byte_TypeDef *pFIO = FIO_ByteGetPointer(portNum);
Michael J. Spencer 2:1df0b61d3b5a 720 if (pFIO != NULL) {
Michael J. Spencer 2:1df0b61d3b5a 721 if (byteNum <= 3){
Michael J. Spencer 2:1df0b61d3b5a 722 pFIO->FIOCLR[byteNum] = bitValue;
Michael J. Spencer 2:1df0b61d3b5a 723 }
Michael J. Spencer 2:1df0b61d3b5a 724 }
Michael J. Spencer 2:1df0b61d3b5a 725 }
Michael J. Spencer 2:1df0b61d3b5a 726
Michael J. Spencer 2:1df0b61d3b5a 727
Michael J. Spencer 2:1df0b61d3b5a 728 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 729 * @brief Read Current state on port pin that have input direction of GPIO
Michael J. Spencer 2:1df0b61d3b5a 730 * in byte accessible style.
Michael J. Spencer 2:1df0b61d3b5a 731 * @param[in] portNum Port number, in range from 0 to 4
Michael J. Spencer 2:1df0b61d3b5a 732 * @param[in] byteNum Byte part number, should be in range from 0 to 3
Michael J. Spencer 2:1df0b61d3b5a 733 * @return Current value of FIO port pin of specified byte part.
Michael J. Spencer 2:1df0b61d3b5a 734 * Note: Return value contain state of each port pin (bit) on that FIO regardless
Michael J. Spencer 2:1df0b61d3b5a 735 * its direction is input or output.
Michael J. Spencer 2:1df0b61d3b5a 736 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 737 uint8_t FIO_ByteReadValue(uint8_t portNum, uint8_t byteNum)
Michael J. Spencer 2:1df0b61d3b5a 738 {
Michael J. Spencer 2:1df0b61d3b5a 739 GPIO_Byte_TypeDef *pFIO = FIO_ByteGetPointer(portNum);
Michael J. Spencer 2:1df0b61d3b5a 740 if (pFIO != NULL) {
Michael J. Spencer 2:1df0b61d3b5a 741 if (byteNum <= 3){
Michael J. Spencer 2:1df0b61d3b5a 742 return (pFIO->FIOPIN[byteNum]);
Michael J. Spencer 2:1df0b61d3b5a 743 }
Michael J. Spencer 2:1df0b61d3b5a 744 }
Michael J. Spencer 2:1df0b61d3b5a 745 return (0);
Michael J. Spencer 2:1df0b61d3b5a 746 }
Michael J. Spencer 2:1df0b61d3b5a 747
Michael J. Spencer 2:1df0b61d3b5a 748 /**
Michael J. Spencer 2:1df0b61d3b5a 749 * @}
Michael J. Spencer 2:1df0b61d3b5a 750 */
Michael J. Spencer 2:1df0b61d3b5a 751
Michael J. Spencer 2:1df0b61d3b5a 752 #endif /* _GPIO */
Michael J. Spencer 2:1df0b61d3b5a 753
Michael J. Spencer 2:1df0b61d3b5a 754 /**
Michael J. Spencer 2:1df0b61d3b5a 755 * @}
Michael J. Spencer 2:1df0b61d3b5a 756 */
Michael J. Spencer 2:1df0b61d3b5a 757
Michael J. Spencer 2:1df0b61d3b5a 758 /* --------------------------------- End Of File ------------------------------ */
Michael J. Spencer 2:1df0b61d3b5a 759 #endif /* __LPC17XX__ */