⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gpio.c

📁 这是一个ucos下看门狗的驱动程序
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                                      
**                                          
**                                杭州央海软件科技有限公司
**
**                                 http://www.armgcc.com
**
**--------------文件信息--------------------------------------------------------------------------------
** 文 件 名: gpio.c
** 创 建 人: 罗辉联
** 创建日期: 2006年5月10日
** 描    述: 该文件提供所有的EIC软件操作功能
**
**--------------历史版本--------------------------------------------------------------------------------
** 创 建 人: 罗辉联
** 版    本: V1.0
** 日   期: 2006年5月10日
** 描   述: 原始版本
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

#include "gpio.h"


#if EN_ARM_GPIO > 0		//决定是否编译该文件

/******************************************* 全局变量定义 ***********************************************/

/******************************************* 局部函数声明 ***********************************************/

/*********************************************************************************************************
;** 函数名称: GPIO_Reset
;** 功能描述: 由于P2.0~7作为CS0~3,A20~23,所以P2.0~7配置为AF_PP模式,其他的GPIO缺省配置为Push-Pull output
;**           其值复位为0
;** 
;** 参    数: 无
;**  
;** 返 回 值: 无
;**         
;** 作   者: 罗辉联
;** 日   期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人: 
;** 日   期: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void GPIO_Reset(void)
{
	
	GPIO0_PC0 = 0xFFFF;		//配置为Input Pull Up /Pull Down
    GPIO0_PC1 = 0xFFFF;
    GPIO0_PC2 = 0x0000;
    //GPIO0_PD  = 0x0000;		/*  reset pins */
    
    GPIO1_PC0 = 0xFFFF;		//配置为Input Pull Up /Pull Down
    GPIO1_PC1 = 0xFFFF;
    GPIO1_PC2 = 0x0000;
    //GPIO1_PD  = 0x0000;		/*  reset pins */
    
    GPIO2_PC0 = 0xFFFF;		//P2.0~7配置为AF_PP模式
    GPIO2_PC1 = 0xFFFF;
    GPIO2_PC2 = 0x00FF;
    //GPIO2_PD  &= 0x00FF;
}

/*********************************************************************************************************
;** 函数名称: GPIO_ModeConfig
;** 功能描述: IO端口模式设置
;** 
;** 参    数: port:GPIO0 GPIO1 GPIO2
;**           bit: 设置的IO位
:**           mode   :IO的工作模式如下
:**	                  GPIO_HiZ_AIN	
:**		              GPIO_IN_TTL		    
:**		              GPIO_IN_COMS	    
:**		              GPIO_IPUPD    //Input Pull Up /Pull Down
:**		              GPIO_OUT_OD   //Open Drain and out
:**		              GPIO_OUT_PP   //Push-Pull  and OUT
:**		              GPIO_AF_OD    //Open Drain and AF
:**		              GPIO_AF_PP	//Push-Pull  and AF
;** 返 回 值: 无
;**         
;** 作   者: 罗辉联
;** 日   期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人: 
;** 日   期: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/    
void GPIO_ModeConfig(GPIO_CHANNELS_T port, UWORD8 bit,GPIO_MODE_T mode)
{
	switch(mode)
	{
		case GPIO_HiZ_AIN:
			GPIOx_PC0(port) &= ~(1<<bit);
			GPIOx_PC1(port) &= ~(1<<bit);
			GPIOx_PC2(port) &= ~(1<<bit);
			break;
		case GPIO_IN_TTL:
			GPIOx_PC0(port) |= (1<<bit);
			GPIOx_PC1(port) &= ~(1<<bit);
			GPIOx_PC2(port) &= ~(1<<bit);
			break;
		case GPIO_IN_COMS:
			GPIOx_PC0(port) &= ~(1<<bit);
			GPIOx_PC1(port) |= (1<<bit);
			GPIOx_PC2(port) &= ~(1<<bit);
			break;
		case GPIO_IPUPD:
			GPIOx_PC0(port) |= (1<<bit);
			GPIOx_PC1(port) |= (1<<bit);
			GPIOx_PC2(port) &= ~(1<<bit);
			break;
		case GPIO_OUT_OD:
			GPIOx_PC0(port) &= ~(1<<bit);
			GPIOx_PC1(port) &= ~(1<<bit);
			GPIOx_PC2(port) |= (1<<bit);
			break;
		case GPIO_OUT_PP:
		    GPIOx_PC0(port) |= (1<<bit);
			GPIOx_PC1(port) &= ~(1<<bit);
			GPIOx_PC2(port) |= (1<<bit);
			break;
		case GPIO_AF_OD:
		    GPIOx_PC0(port) &= ~(1<<bit);
			GPIOx_PC1(port) |= (1<<bit);
			GPIOx_PC2(port) |= (1<<bit);
			break;
		case GPIO_AF_PP:
			GPIOx_PC0(port) |= (1<<bit);
			GPIOx_PC1(port) |= (1<<bit);
			GPIOx_PC2(port) |= (1<<bit);
			break;	    
		default:
		    break;
	}	
	
}

/*********************************************************************************************************
;** 函数名称: GPIO_SetBit
;** 功能描述: 设置GPIO端口数据
;** 
;** 参    数: port:GPIO0 GPIO1 GPIO2
:**           bit   :指定设置的位编号(0~15)
;**           value :GPIO_LOW, GPIO_HIGHT
;**
;** 返 回 值: 无
;**         
;** 作   者: 罗辉联
;** 日   期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人: 
;** 日   期: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void GPIO_SetBit(GPIO_CHANNELS_T port,UWORD8 bit,GPIO_VALUE_T value)
{
	
	if(GPIO_LOW == value)
		GPIOx_PD(port) &= ~(1<<bit); 	
	else 
		GPIOx_PD(port) |= (1<<bit);
		
}

/*********************************************************************************************************
;** 函数名称: GPIO_ReadBit,1,2
;** 功能描述: 读取GPIO_0,1,2端口数据
;** 
;** 参    数: port:GPIO0 GPIO1 GPIO2
:**           bit   :指定读取的位编号(0~15)
;**
;** 返 回 值: 读取指定GPIO位的值(0,1)
;**         
;** 作   者: 罗辉联
;** 日   期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人: 
;** 日   期: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
UWORD8 GPIO_ReadBit(GPIO_CHANNELS_T port, UWORD8 bit)
{
	
	if(GPIOx_PD(port) & (1<<bit))
		return (1);
	else
	    return (0);
}
/*********************************************************************************************************
;** 函数名称: GPIO_SetBytet
;** 功能描述: 设置GPIO_0,1,2端口数据
;** 
;** 参    数: port:GPIO0 GPIO1 GPIO2
:**           port_byte:高8位还是低8位(GPIO_MSB or GPIO_LSB)
;**           port_value:设置值
;**
;** 返 回 值: 无
;**         
;** 作   者: 罗辉联
;** 日   期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人: 
;** 日   期: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void GPIO_SetByte(GPIO_CHANNELS_T port,UWORD8 port_byte, UWORD8 port_value)
{
	
	GPIOx_PD(port)=port_byte?((GPIOx_PD(port)&0x00FF)|((UWORD16)port_value<<8))\
	                                 :(((GPIOx_PD(port)&0xFF00)|port_value));      
}

/*********************************************************************************************************
;** 函数名称: GPIO_ReadByte
;** 功能描述: Read the desired port Byte value
;** 
;** 参    数: port:GPIO0 GPIO1 GPIO2
:**           port_byte:高8位还是低8位(GPIO_MSB or GPIO_LSB)
;**
;** 返 回 值: 选择PD寄存器的高8位或者低8位
;**         
;** 作   者: 罗辉联
;** 日   期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人: 
;** 日   期: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
UWORD8 GPIO_ReadByte(GPIO_CHANNELS_T port,UWORD8 port_byte)
{
	return (UWORD8)(GPIOx_PD(port)>>port_byte);
}
/*********************************************************************************************************
;** 函数名称: GPIO_SetWord
;** 功能描述: Write word value to the selected PD register
;** 
;** 参    数: port:GPIO0 GPIO1 GPIO2
:**           port_value: 端口值
;**
;** 返 回 值: 无
;**         
;** 作   者: 罗辉联
;** 日   期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人: 
;** 日   期: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void GPIO_SetWord(GPIO_CHANNELS_T port,UWORD16 port_value)
{
	GPIOx_PD(port) = port_value;
}
/*********************************************************************************************************
;** 函数名称: GPIO_ReadWord
;** 功能描述: Read the desired port word value
;** 
;** 参    数: port:GPIO0 GPIO1 GPIO2
;**
;** 返 回 值: The selected PD register value
;**         
;** 作   者: 罗辉联
;** 日   期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人: 
;** 日   期: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
UWORD16 GPIO_ReadWord(GPIO_CHANNELS_T port)
{
	
	return (UWORD16)(GPIOx_PD(port));
}

#endif /* EN_ARM_GPIO > 0 */
/****************************************end of file*******************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -