/********************************************************************** | |
* $Id$ lpc18xx_gpio.c 2011-06-02 | |
*//** | |
* @file lpc18xx_gpio.c | |
* @brief Contains all functions support for GPIO firmware library | |
* on LPC18xx | |
* @version 1.0 | |
* @date 02. June. 2011 | |
* @author NXP MCU SW Application Team | |
* | |
* Copyright(C) 2011, NXP Semiconductor | |
* All rights reserved. | |
* | |
*********************************************************************** | |
* Software that is described herein is for illustrative purposes only | |
* which provides customers with programming information regarding the | |
* products. This software is supplied "AS IS" without any warranties. | |
* NXP Semiconductors assumes no responsibility or liability for the | |
* use of the software, conveys no license or title under any patent, | |
* copyright, or mask work right to the product. NXP Semiconductors | |
* reserves the right to make changes in the software without | |
* notification. NXP Semiconductors also make no representation or | |
* warranty that such application will be suitable for the specified | |
* use without further testing or modification. | |
**********************************************************************/ | |
/* Peripheral group ----------------------------------------------------------- */ | |
/** @addtogroup GPIO | |
* @{ | |
*/ | |
/* Includes ------------------------------------------------------------------- */ | |
#include "lpc18xx_gpio.h" | |
#include "lpc_types.h" | |
/* If this source file built with example, the LPC18xx FW library configuration | |
* file in each example directory ("lpc18xx_libcfg.h") must be included, | |
* otherwise the default FW library configuration file must be included instead | |
*/ | |
#ifdef __BUILD_WITH_EXAMPLE__ | |
#include "lpc18xx_libcfg.h" | |
#else | |
#include "lpc18xx_libcfg_default.h" | |
#endif /* __BUILD_WITH_EXAMPLE__ */ | |
#ifdef _GPIO | |
/* Private Functions ---------------------------------------------------------- */ | |
//static LPC_GPIOn_Type *GPIO_GetPointer(uint8_t portNum); | |
//static GPIO_HalfWord_TypeDef *FIO_HalfWordGetPointer(uint8_t portNum); | |
//static GPIO_Byte_TypeDef *FIO_ByteGetPointer(uint8_t portNum); | |
#if 0 | |
/*********************************************************************//** | |
* @brief Get pointer to GPIO peripheral due to GPIO port | |
* @param[in] portNum Port Number value, should be in range from 0 to 4. | |
* @return Pointer to GPIO peripheral | |
**********************************************************************/ | |
static LPC_GPIOn_Type *GPIO_GetPointer(uint8_t portNum) | |
{ | |
LPC_GPIOn_Type *pGPIO = NULL; | |
switch (portNum) | |
{ | |
case 0: | |
pGPIO = LPC_GPIO0; | |
break; | |
case 1: | |
pGPIO = LPC_GPIO1; | |
break; | |
case 2: | |
pGPIO = LPC_GPIO2; | |
break; | |
case 3: | |
pGPIO = LPC_GPIO3; | |
break; | |
case 4: | |
pGPIO = LPC_GPIO4; | |
break; | |
default: | |
break; | |
} | |
return pGPIO; | |
} | |
/*********************************************************************//** | |
* @brief Get pointer to FIO peripheral in halfword accessible style | |
* due to FIO port | |
* @param[in] portNum Port Number value, should be in range from 0 to 4. | |
* @return Pointer to FIO peripheral | |
**********************************************************************/ | |
static GPIO_HalfWord_TypeDef *FIO_HalfWordGetPointer(uint8_t portNum) | |
{ | |
GPIO_HalfWord_TypeDef *pFIO = NULL; | |
switch (portNum) | |
{ | |
case 0: | |
pFIO = GPIO0_HalfWord; | |
break; | |
case 1: | |
pFIO = GPIO1_HalfWord; | |
break; | |
case 2: | |
pFIO = GPIO2_HalfWord; | |
break; | |
case 3: | |
pFIO = GPIO3_HalfWord; | |
break; | |
case 4: | |
pFIO = GPIO4_HalfWord; | |
break; | |
default: | |
break; | |
} | |
return pFIO; | |
} | |
/*********************************************************************//** | |
* @brief Get pointer to FIO peripheral in byte accessible style | |
* due to FIO port | |
* @param[in] portNum Port Number value, should be in range from 0 to 4. | |
* @return Pointer to FIO peripheral | |
**********************************************************************/ | |
static GPIO_Byte_TypeDef *FIO_ByteGetPointer(uint8_t portNum) | |
{ | |
GPIO_Byte_TypeDef *pFIO = NULL; | |
switch (portNum) | |
{ | |
case 0: | |
pFIO = GPIO0_Byte; | |
break; | |
case 1: | |
pFIO = GPIO1_Byte; | |
break; | |
case 2: | |
pFIO = GPIO2_Byte; | |
break; | |
case 3: | |
pFIO = GPIO3_Byte; | |
break; | |
case 4: | |
pFIO = GPIO4_Byte; | |
break; | |
default: | |
break; | |
} | |
return pFIO; | |
} | |
#endif | |
/* End of Private Functions --------------------------------------------------- */ | |
/* Public Functions ----------------------------------------------------------- */ | |
/** @addtogroup GPIO_Public_Functions | |
* @{ | |
*/ | |
/* GPIO ------------------------------------------------------------------------------ */ | |
/*********************************************************************//** | |
* @brief Set Direction for GPIO port. | |
* @param[in] portNum Port Number value, should be in range from 0 to 4 | |
* @param[in] bitValue Value that contains all bits to set direction, | |
* in range from 0 to 0xFFFFFFFF. | |
* example: value 0x5 to set direction for bit 0 and bit 1. | |
* @param[in] dir Direction value, should be: | |
* - 0: Input. | |
* - 1: Output. | |
* @return None | |
* | |
* Note: | |
* All remaining bits that are not activated in bitValue (value '0') | |
* will not be effected by this function. | |
**********************************************************************/ | |
void GPIO_SetDir(uint8_t portNum, uint32_t bitValue, uint8_t dir) | |
{ | |
if (dir) | |
{ | |
LPC_GPIO_PORT->DIR[portNum] |= bitValue; | |
} else | |
{ | |
LPC_GPIO_PORT->DIR[portNum] &= ~bitValue; | |
} | |
} | |
/*********************************************************************//** | |
* @brief Set Value for bits that have output direction on GPIO port. | |
* @param[in] portNum Port number value, should be in range from 0 to 4 | |
* @param[in] bitValue Value that contains all bits on GPIO to set, should | |
* be in range from 0 to 0xFFFFFFFF. | |
* example: value 0x5 to set bit 0 and bit 1. | |
* @return None | |
* | |
* Note: | |
* - For all bits that has been set as input direction, this function will | |
* not effect. | |
* - For all remaining bits that are not activated in bitValue (value '0') | |
* will not be effected by this function. | |
**********************************************************************/ | |
void GPIO_SetValue(uint8_t portNum, uint32_t bitValue) | |
{ | |
LPC_GPIO_PORT->SET[portNum] = bitValue; | |
} | |
/*********************************************************************//** | |
* @brief Clear Value for bits that have output direction on GPIO port. | |
* @param[in] portNum Port number value, should be in range from 0 to 4 | |
* @param[in] bitValue Value that contains all bits on GPIO to clear, should | |
* be in range from 0 to 0xFFFFFFFF. | |
* example: value 0x5 to clear bit 0 and bit 1. | |
* @return None | |
* | |
* Note: | |
* - For all bits that has been set as input direction, this function will | |
* not effect. | |
* - For all remaining bits that are not activated in bitValue (value '0') | |
* will not be effected by this function. | |
**********************************************************************/ | |
void GPIO_ClearValue(uint8_t portNum, uint32_t bitValue) | |
{ | |
LPC_GPIO_PORT->CLR[portNum] = bitValue; | |
} | |
/*********************************************************************//** | |
* @brief Read Current state on port pin that have input direction of GPIO | |
* @param[in] portNum Port number to read value, in range from 0 to 4 | |
* @return Current value of GPIO port. | |
* | |
* Note: Return value contain state of each port pin (bit) on that GPIO regardless | |
* its direction is input or output. | |
**********************************************************************/ | |
uint32_t GPIO_ReadValue(uint8_t portNum) | |
{ | |
return LPC_GPIO_PORT->PIN[portNum]; | |
} | |
#ifdef GPIO_INT | |
/*********************************************************************//** | |
* @brief Enable GPIO interrupt (just used for P0.0-P0.30, P2.0-P2.13) | |
* @param[in] portNum Port number to read value, should be: 0 or 2 | |
* @param[in] bitValue Value that contains all bits on GPIO to enable, | |
* should be in range from 0 to 0xFFFFFFFF. | |
* @param[in] edgeState state of edge, should be: | |
* - 0: Rising edge | |
* - 1: Falling edge | |
* @return None | |
**********************************************************************/ | |
void GPIO_IntCmd(uint8_t portNum, uint32_t bitValue, uint8_t edgeState) | |
{ | |
if((portNum == 0)&&(edgeState == 0)) | |
LPC_GPIOINT->IO0IntEnR = bitValue; | |
else if ((portNum == 2)&&(edgeState == 0)) | |
LPC_GPIOINT->IO2IntEnR = bitValue; | |
else if ((portNum == 0)&&(edgeState == 1)) | |
LPC_GPIOINT->IO0IntEnF = bitValue; | |
else if ((portNum == 2)&&(edgeState == 1)) | |
LPC_GPIOINT->IO2IntEnF = bitValue; | |
else | |
//Error | |
while(1); | |
} | |
/*********************************************************************//** | |
* @brief Get GPIO Interrupt Status (just used for P0.0-P0.30, P2.0-P2.13) | |
* @param[in] portNum Port number to read value, should be: 0 or 2 | |
* @param[in] pinNum Pin number, should be: 0..30(with port 0) and 0..13 | |
* (with port 2) | |
* @param[in] edgeState state of edge, should be: | |
* - 0 :Rising edge | |
* - 1 :Falling edge | |
* @return Function status, could be: | |
* - ENABLE :Interrupt has been generated due to a rising edge on P0.0 | |
* - DISABLE :A rising edge has not been detected on P0.0 | |
**********************************************************************/ | |
FunctionalState GPIO_GetIntStatus(uint8_t portNum, uint32_t pinNum, uint8_t edgeState) | |
{ | |
if((portNum == 0) && (edgeState == 0))//Rising Edge | |
return (((LPC_GPIOINT->IO0IntStatR)>>pinNum)& 0x1); | |
else if ((portNum == 2) && (edgeState == 0)) | |
return (((LPC_GPIOINT->IO2IntStatR)>>pinNum)& 0x1); | |
else if ((portNum == 0) && (edgeState == 1))//Falling Edge | |
return (((LPC_GPIOINT->IO0IntStatF)>>pinNum)& 0x1); | |
else if ((portNum == 2) && (edgeState == 1)) | |
return (((LPC_GPIOINT->IO2IntStatF)>>pinNum)& 0x1); | |
else | |
//Error | |
while(1); | |
} | |
/*********************************************************************//** | |
* @brief Clear GPIO interrupt (just used for P0.0-P0.30, P2.0-P2.13) | |
* @param[in] portNum Port number to read value, should be: 0 or 2 | |
* @param[in] bitValue Value that contains all bits on GPIO to enable, | |
* should be in range from 0 to 0xFFFFFFFF. | |
* @return None | |
**********************************************************************/ | |
void GPIO_ClearInt(uint8_t portNum, uint32_t bitValue) | |
{ | |
if(portNum == 0) | |
LPC_GPIOINT->IO0IntClr = bitValue; | |
else if (portNum == 2) | |
LPC_GPIOINT->IO2IntClr = bitValue; | |
else | |
//Invalid portNum | |
while(1); | |
} | |
#endif | |
/* FIO word accessible ----------------------------------------------------------------- */ | |
/* Stub function for FIO (word-accessible) style */ | |
/** | |
* @brief The same with GPIO_SetDir() | |
*/ | |
void FIO_SetDir(uint8_t portNum, uint32_t bitValue, uint8_t dir) | |
{ | |
GPIO_SetDir(portNum, bitValue, dir); | |
} | |
/** | |
* @brief The same with GPIO_SetValue() | |
*/ | |
void FIO_SetValue(uint8_t portNum, uint32_t bitValue) | |
{ | |
GPIO_SetValue(portNum, bitValue); | |
} | |
/** | |
* @brief The same with GPIO_ClearValue() | |
*/ | |
void FIO_ClearValue(uint8_t portNum, uint32_t bitValue) | |
{ | |
GPIO_ClearValue(portNum, bitValue); | |
} | |
/** | |
* @brief The same with GPIO_ReadValue() | |
*/ | |
uint32_t FIO_ReadValue(uint8_t portNum) | |
{ | |
return (GPIO_ReadValue(portNum)); | |
} | |
#ifdef GPIO_INT | |
/** | |
* @brief The same with GPIO_IntCmd() | |
*/ | |
void FIO_IntCmd(uint8_t portNum, uint32_t bitValue, uint8_t edgeState) | |
{ | |
GPIO_IntCmd(portNum, bitValue, edgeState); | |
} | |
/** | |
* @brief The same with GPIO_GetIntStatus() | |
*/ | |
FunctionalState FIO_GetIntStatus(uint8_t portNum, uint32_t pinNum, uint8_t edgeState) | |
{ | |
return (GPIO_GetIntStatus(portNum, pinNum, edgeState)); | |
} | |
/** | |
* @brief The same with GPIO_ClearInt() | |
*/ | |
void FIO_ClearInt(uint8_t portNum, uint32_t bitValue) | |
{ | |
GPIO_ClearInt(portNum, bitValue); | |
} | |
#endif | |
/*********************************************************************//** | |
* @brief Set mask value for bits in FIO port | |
* @param[in] portNum Port number, in range from 0 to 4 | |
* @param[in] bitValue Value that contains all bits in to set, should be | |
* in range from 0 to 0xFFFFFFFF. | |
* @param[in] maskValue Mask value contains state value for each bit: | |
* - 0 :not mask. | |
* - 1 :mask. | |
* @return None | |
* | |
* Note: | |
* - All remaining bits that are not activated in bitValue (value '0') | |
* will not be effected by this function. | |
* - After executing this function, in mask register, value '0' on each bit | |
* enables an access to the corresponding physical pin via a read or write access, | |
* while value '1' on bit (masked) that corresponding pin will not be changed | |
* with write access and if read, will not be reflected in the updated pin. | |
**********************************************************************/ | |
void FIO_SetMask(uint8_t portNum, uint32_t bitValue, uint8_t maskValue) | |
{ | |
if (maskValue) | |
{ | |
LPC_GPIO_PORT->MASK[portNum] |= bitValue; | |
} else | |
{ | |
LPC_GPIO_PORT->MASK[portNum] &= ~bitValue; | |
} | |
} | |
/* FIO halfword accessible ------------------------------------------------------------- */ | |
#if 0 | |
/*********************************************************************//** | |
* @brief Set direction for FIO port in halfword accessible style | |
* @param[in] portNum Port number, in range from 0 to 4 | |
* @param[in] halfwordNum HalfWord part number, should be 0 (lower) or 1(upper) | |
* @param[in] bitValue Value that contains all bits in to set direction, | |
* in range from 0 to 0xFFFF. | |
* @param[in] dir Direction value, should be: | |
* - 0 :Input. | |
* - 1 :Output. | |
* @return None | |
* | |
* Note: All remaining bits that are not activated in bitValue (value '0') | |
* will not be effected by this function. | |
**********************************************************************/ | |
void FIO_HalfWordSetDir(uint8_t portNum, uint8_t halfwordNum, uint16_t bitValue, uint8_t dir) | |
{ | |
GPIO_HalfWord_TypeDef *pFIO = FIO_HalfWordGetPointer(portNum); | |
if(pFIO != NULL) | |
{ | |
// Output direction | |
if (dir) | |
{ | |
// Upper | |
if(halfwordNum) | |
{ | |
pFIO->FIODIRU |= bitValue; | |
} | |
// lower | |
else | |
{ | |
pFIO->FIODIRL |= bitValue; | |
} | |
} | |
// Input direction | |
else | |
{ | |
// Upper | |
if(halfwordNum) | |
{ | |
pFIO->FIODIRU &= ~bitValue; | |
} | |
// lower | |
else | |
{ | |
pFIO->FIODIRL &= ~bitValue; | |
} | |
} | |
} | |
} | |
/*********************************************************************//** | |
* @brief Set mask value for bits in FIO port in halfword accessible style | |
* @param[in] portNum Port number, in range from 0 to 4 | |
* @param[in] halfwordNum HalfWord part number, should be 0 (lower) or 1(upper) | |
* @param[in] bitValue Value that contains all bits in to set, | |
* in range from 0 to 0xFFFF. | |
* @param[in] maskValue Mask value contains state value for each bit: | |
* - 0: not mask. | |
* - 1: mask. | |
* @return None | |
* | |
* Note: | |
* - All remaining bits that are not activated in bitValue (value '0') | |
* will not be effected by this function. | |
* - After executing this function, in mask register, value '0' on each bit | |
* enables an access to the corresponding physical pin via a read or write access, | |
* while value '1' on bit (masked) that corresponding pin will not be changed | |
* with write access and if read, will not be reflected in the updated pin. | |
**********************************************************************/ | |
void FIO_HalfWordSetMask(uint8_t portNum, uint8_t halfwordNum, uint16_t bitValue, uint8_t maskValue) | |
{ | |
GPIO_HalfWord_TypeDef *pFIO = FIO_HalfWordGetPointer(portNum); | |
if(pFIO != NULL) | |
{ | |
// Mask | |
if (maskValue) | |
{ | |
// Upper | |
if(halfwordNum) | |
{ | |
pFIO->FIOMASKU |= bitValue; | |
} | |
// lower | |
else | |
{ | |
pFIO->FIOMASKL |= bitValue; | |
} | |
} | |
// Un-mask | |
else | |
{ | |
// Upper | |
if(halfwordNum) | |
{ | |
pFIO->FIOMASKU &= ~bitValue; | |
} | |
// lower | |
else | |
{ | |
pFIO->FIOMASKL &= ~bitValue; | |
} | |
} | |
} | |
} | |
/*********************************************************************//** | |
* @brief Set bits for FIO port in halfword accessible style | |
* @param[in] portNum Port number, in range from 0 to 4 | |
* @param[in] halfwordNum HalfWord part number, should be 0 (lower) or 1(upper) | |
* @param[in] bitValue Value that contains all bits in to set, should be | |
* in range from 0 to 0xFFFF. | |
* @return None | |
* | |
* Note: | |
* - For all bits that has been set as input direction, this function will | |
* not effect. | |
* - For all remaining bits that are not activated in bitValue (value '0') | |
* will not be effected by this function. | |
**********************************************************************/ | |
void FIO_HalfWordSetValue(uint8_t portNum, uint8_t halfwordNum, uint16_t bitValue) | |
{ | |
GPIO_HalfWord_TypeDef *pFIO = FIO_HalfWordGetPointer(portNum); | |
if(pFIO != NULL) | |
{ | |
// Upper | |
if(halfwordNum) | |
{ | |
pFIO->FIOSETU = bitValue; | |
} | |
// lower | |
else | |
{ | |
pFIO->FIOSETL = bitValue; | |
} | |
} | |
} | |
/*********************************************************************//** | |
* @brief Clear bits for FIO port in halfword accessible style | |
* @param[in] portNum Port number, in range from 0 to 4 | |
* @param[in] halfwordNum HalfWord part number, should be 0 (lower) or 1(upper) | |
* @param[in] bitValue Value that contains all bits in to clear, should be | |
* in range from 0 to 0xFFFF. | |
* @return None | |
* | |
* Note: | |
* - For all bits that has been set as input direction, this function will | |
* not effect. | |
* - For all remaining bits that are not activated in bitValue (value '0') | |
* will not be effected by this function. | |
**********************************************************************/ | |
void FIO_HalfWordClearValue(uint8_t portNum, uint8_t halfwordNum, uint16_t bitValue) | |
{ | |
GPIO_HalfWord_TypeDef *pFIO = FIO_HalfWordGetPointer(portNum); | |
if(pFIO != NULL) | |
{ | |
// Upper | |
if(halfwordNum) | |
{ | |
pFIO->FIOCLRU = bitValue; | |
} | |
// lower | |
else | |
{ | |
pFIO->FIOCLRL = bitValue; | |
} | |
} | |
} | |
/*********************************************************************//** | |
* @brief Read Current state on port pin that have input direction of GPIO | |
* in halfword accessible style. | |
* @param[in] portNum Port number, in range from 0 to 4 | |
* @param[in] halfwordNum HalfWord part number, should be 0 (lower) or 1(upper) | |
* @return Current value of FIO port pin of specified halfword. | |
* Note: Return value contain state of each port pin (bit) on that FIO regardless | |
* its direction is input or output. | |
**********************************************************************/ | |
uint16_t FIO_HalfWordReadValue(uint8_t portNum, uint8_t halfwordNum) | |
{ | |
GPIO_HalfWord_TypeDef *pFIO = FIO_HalfWordGetPointer(portNum); | |
if(pFIO != NULL) | |
{ | |
// Upper | |
if(halfwordNum) | |
{ | |
return (pFIO->FIOPINU); | |
} | |
// lower | |
else | |
{ | |
return (pFIO->FIOPINL); | |
} | |
} | |
return (0); | |
} | |
/* FIO Byte accessible ------------------------------------------------------------ */ | |
/*********************************************************************//** | |
* @brief Set direction for FIO port in byte accessible style | |
* @param[in] portNum Port number, in range from 0 to 4 | |
* @param[in] byteNum Byte part number, should be in range from 0 to 3 | |
* @param[in] bitValue Value that contains all bits in to set direction, | |
* in range from 0 to 0xFF. | |
* @param[in] dir Direction value, should be: | |
* - 0: Input. | |
* - 1: Output. | |
* @return None | |
* | |
* Note: All remaining bits that are not activated in bitValue (value '0') | |
* will not be effected by this function. | |
**********************************************************************/ | |
void FIO_ByteSetDir(uint8_t portNum, uint8_t byteNum, uint8_t bitValue, uint8_t dir) | |
{ | |
GPIO_Byte_TypeDef *pFIO = FIO_ByteGetPointer(portNum); | |
if(pFIO != NULL) | |
{ | |
// Output direction | |
if (dir) | |
{ | |
if (byteNum <= 3) | |
{ | |
pFIO->FIODIR[byteNum] |= bitValue; | |
} | |
} | |
// Input direction | |
else | |
{ | |
if (byteNum <= 3) | |
{ | |
pFIO->FIODIR[byteNum] &= ~bitValue; | |
} | |
} | |
} | |
} | |
/*********************************************************************//** | |
* @brief Set mask value for bits in FIO port in byte accessible style | |
* @param[in] portNum Port number, in range from 0 to 4 | |
* @param[in] byteNum Byte part number, should be in range from 0 to 3 | |
* @param[in] bitValue Value that contains all bits in to set mask, should | |
* be in range from 0 to 0xFF. | |
* @param[in] maskValue Mask value contains state value for each bit: | |
* - 0: not mask. | |
* - 1: mask. | |
* @return None | |
* | |
* Note: | |
* - All remaining bits that are not activated in bitValue (value '0') | |
* will not be effected by this function. | |
* - After executing this function, in mask register, value '0' on each bit | |
* enables an access to the corresponding physical pin via a read or write access, | |
* while value '1' on bit (masked) that corresponding pin will not be changed | |
* with write access and if read, will not be reflected in the updated pin. | |
**********************************************************************/ | |
void FIO_ByteSetMask(uint8_t portNum, uint8_t byteNum, uint8_t bitValue, uint8_t maskValue) | |
{ | |
GPIO_Byte_TypeDef *pFIO = FIO_ByteGetPointer(portNum); | |
if(pFIO != NULL) | |
{ | |
// Mask | |
if (maskValue) | |
{ | |
if (byteNum <= 3) | |
{ | |
pFIO->FIOMASK[byteNum] |= bitValue; | |
} | |
} | |
// Un-mask | |
else { | |
if (byteNum <= 3) | |
{ | |
pFIO->FIOMASK[byteNum] &= ~bitValue; | |
} | |
} | |
} | |
} | |
/*********************************************************************//** | |
* @brief Set bits for FIO port in byte accessible style | |
* @param[in] portNum Port number, in range from 0 to 4 | |
* @param[in] byteNum Byte part number, should be in range from 0 to 3 | |
* @param[in] bitValue Value that contains all bits in to set, should | |
* be in range from 0 to 0xFF. | |
* @return None | |
* | |
* Note: | |
* - For all bits that has been set as input direction, this function will | |
* not effect. | |
* - For all remaining bits that are not activated in bitValue (value '0') | |
* will not be effected by this function. | |
**********************************************************************/ | |
void FIO_ByteSetValue(uint8_t portNum, uint8_t byteNum, uint8_t bitValue) | |
{ | |
GPIO_Byte_TypeDef *pFIO = FIO_ByteGetPointer(portNum); | |
if (pFIO != NULL) { | |
if (byteNum <= 3) | |
{ | |
pFIO->FIOSET[byteNum] = bitValue; | |
} | |
} | |
} | |
/*********************************************************************//** | |
* @brief Clear bits for FIO port in byte accessible style | |
* @param[in] portNum Port number, in range from 0 to 4 | |
* @param[in] byteNum Byte part number, should be in range from 0 to 3 | |
* @param[in] bitValue Value that contains all bits in to clear, should | |
* be in range from 0 to 0xFF. | |
* @return None | |
* | |
* Note: | |
* - For all bits that has been set as input direction, this function will | |
* not effect. | |
* - For all remaining bits that are not activated in bitValue (value '0') | |
* will not be effected by this function. | |
**********************************************************************/ | |
void FIO_ByteClearValue(uint8_t portNum, uint8_t byteNum, uint8_t bitValue) | |
{ | |
GPIO_Byte_TypeDef *pFIO = FIO_ByteGetPointer(portNum); | |
if (pFIO != NULL) | |
{ | |
if (byteNum <= 3) | |
{ | |
pFIO->FIOCLR[byteNum] = bitValue; | |
} | |
} | |
} | |
/*********************************************************************//** | |
* @brief Read Current state on port pin that have input direction of GPIO | |
* in byte accessible style. | |
* @param[in] portNum Port number, in range from 0 to 4 | |
* @param[in] byteNum Byte part number, should be in range from 0 to 3 | |
* @return Current value of FIO port pin of specified byte part. | |
* Note: Return value contain state of each port pin (bit) on that FIO regardless | |
* its direction is input or output. | |
**********************************************************************/ | |
uint8_t FIO_ByteReadValue(uint8_t portNum, uint8_t byteNum) | |
{ | |
GPIO_Byte_TypeDef *pFIO = FIO_ByteGetPointer(portNum); | |
if (pFIO != NULL) | |
{ | |
if (byteNum <= 3) | |
{ | |
return (pFIO->FIOPIN[byteNum]); | |
} | |
} | |
return (0); | |
} | |
#endif | |
/** | |
* @} | |
*/ | |
#endif /* _GPIO */ | |
/** | |
* @} | |
*/ | |
/* --------------------------------- End Of File ------------------------------ */ |