Date: March 20, 2011 This library is created from "LPC17xx CMSIS-Compliant Standard Peripheral Firmware Driver Library (GNU, Keil, IAR) (Jan 28, 2011)", available from NXP's website, under "All microcontrollers support documents" [[http://ics.nxp.com/support/documents/microcontrollers/?type=software]] You will need to follow [[/projects/libraries/svn/mbed/trunk/LPC1768/LPC17xx.h]] while using this library Examples provided here [[/users/frank26080115/programs/LPC1700CMSIS_Examples/]] The beautiful thing is that NXP does not place copyright protection on any of the files in here Only a few modifications are made to make it compile with the mbed online compiler, I fixed some warnings as well. This is untested as of March 20, 2011 Forum post about this library: [[/forum/mbed/topic/2030/]]

Committer:
frank26080115
Date:
Sun Mar 20 18:45:15 2011 +0000
Revision:
0:84d7747641aa

        

Who changed what in which revision?

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