763 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			763 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /**********************************************************************
 | |
| * $Id$		lpc17xx_gpio.c				2010-05-21
 | |
| *//**
 | |
| * @file		lpc17xx_gpio.c
 | |
| * @brief	Contains all functions support for GPIO firmware
 | |
| * 			library on LPC17xx
 | |
| * @version	2.0
 | |
| * @date		21. May. 2010
 | |
| * @author	NXP MCU SW Application Team
 | |
| *
 | |
| * Copyright(C) 2010, 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.
 | |
| * Permission to use, copy, modify, and distribute this software and its
 | |
| * documentation is hereby granted, under NXP Semiconductors'
 | |
| * relevant copyright in the software, without fee, provided that it
 | |
| * is used in conjunction with NXP Semiconductors microcontrollers.  This
 | |
| * copyright, permission, and disclaimer notice must appear in all copies of
 | |
| * this code.
 | |
| **********************************************************************/
 | |
| 
 | |
| /* Peripheral group ----------------------------------------------------------- */
 | |
| /** @addtogroup GPIO
 | |
|  * @{
 | |
|  */
 | |
| 
 | |
| /* Includes ------------------------------------------------------------------- */
 | |
| #include "lpc17xx_gpio.h"
 | |
| 
 | |
| /* If this source file built with example, the LPC17xx FW library configuration
 | |
|  * file in each example directory ("lpc17xx_libcfg.h") must be included,
 | |
|  * otherwise the default FW library configuration file must be included instead
 | |
|  */
 | |
| #ifdef __BUILD_WITH_EXAMPLE__
 | |
| #include "lpc17xx_libcfg.h"
 | |
| #else
 | |
| #include "lpc17xx_libcfg_default.h"
 | |
| #endif /* __BUILD_WITH_EXAMPLE__ */
 | |
| 
 | |
| 
 | |
| #ifdef _GPIO
 | |
| 
 | |
| /* Private Functions ---------------------------------------------------------- */
 | |
| 
 | |
| static LPC_GPIO_TypeDef *GPIO_GetPointer(uint8_t portNum);
 | |
| static GPIO_HalfWord_TypeDef *FIO_HalfWordGetPointer(uint8_t portNum);
 | |
| static GPIO_Byte_TypeDef *FIO_ByteGetPointer(uint8_t portNum);
 | |
| 
 | |
| /*********************************************************************//**
 | |
|  * @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_GPIO_TypeDef *GPIO_GetPointer(uint8_t portNum)
 | |
| {
 | |
| 	LPC_GPIO_TypeDef *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;
 | |
| }
 | |
| 
 | |
| /* 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)
 | |
| {
 | |
| 	LPC_GPIO_TypeDef *pGPIO = GPIO_GetPointer(portNum);
 | |
| 
 | |
| 	if (pGPIO != NULL) {
 | |
| 		// Enable Output
 | |
| 		if (dir) {
 | |
| 			pGPIO->FIODIR |= bitValue;
 | |
| 		}
 | |
| 		// Enable Input
 | |
| 		else {
 | |
| 			pGPIO->FIODIR &= ~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,
 | |
|  * 							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_TypeDef *pGPIO = GPIO_GetPointer(portNum);
 | |
| 
 | |
| 	if (pGPIO != NULL) {
 | |
| 		pGPIO->FIOSET = 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,
 | |
|  * 							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_TypeDef *pGPIO = GPIO_GetPointer(portNum);
 | |
| 
 | |
| 	if (pGPIO != NULL) {
 | |
| 		pGPIO->FIOCLR = 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)
 | |
| {
 | |
| 	LPC_GPIO_TypeDef *pGPIO = GPIO_GetPointer(portNum);
 | |
| 
 | |
| 	if (pGPIO != NULL) {
 | |
| 		return pGPIO->FIOPIN;
 | |
| 	}
 | |
| 
 | |
| 	return (0);
 | |
| }
 | |
| 
 | |
| /*********************************************************************//**
 | |
|  * @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,
 | |
|  * 							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		Bool	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 ((FunctionalState)(((LPC_GPIOINT->IO0IntStatR)>>pinNum)& 0x1));
 | |
| 	else if ((portNum == 2) && (edgeState == 0))
 | |
| 		return ((FunctionalState)(((LPC_GPIOINT->IO2IntStatR)>>pinNum)& 0x1));
 | |
| 	else if ((portNum == 0) && (edgeState == 1))//Falling Edge
 | |
| 		return ((FunctionalState)(((LPC_GPIOINT->IO0IntStatF)>>pinNum)& 0x1));
 | |
| 	else if ((portNum == 2) && (edgeState == 1))
 | |
| 		return ((FunctionalState)(((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,
 | |
|  * 							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);
 | |
| }
 | |
| 
 | |
| /* 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));
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * @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);
 | |
| }
 | |
| /*********************************************************************//**
 | |
|  * @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,
 | |
|  * 							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)
 | |
| {
 | |
| 	LPC_GPIO_TypeDef *pFIO = GPIO_GetPointer(portNum);
 | |
| 	if(pFIO != NULL) {
 | |
| 		// Mask
 | |
| 		if (maskValue){
 | |
| 			pFIO->FIOMASK |= bitValue;
 | |
| 		}
 | |
| 		// Un-mask
 | |
| 		else {
 | |
| 			pFIO->FIOMASK &= ~bitValue;
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 
 | |
| /* FIO halfword accessible ------------------------------------------------------------- */
 | |
| 
 | |
| /*********************************************************************//**
 | |
|  * @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,
 | |
|  * 							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,
 | |
|  * 							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,
 | |
|  * 							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,
 | |
|  * 							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,
 | |
|  * 							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 /* _GPIO */
 | |
| 
 | |
| /**
 | |
|  * @}
 | |
|  */
 | |
| 
 | |
| /* --------------------------------- End Of File ------------------------------ */
 |