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

📄 gpio.c

📁 飞利浦ARM7
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               广州周立功单片机发展有限公司
**                                     研    究    所
**                                        产品一部 
**
**                                 http://www.zlgmcu.com
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: GPIO.c
**创   建   人: zhangbin
**最后修改日期: 2007-3-20
**描        述: LPC2300通用GPIO操作软件包。
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: zhangbin
** 版  本: v1.00
** 日 期: 2007-3-20
** 描 述: GPIO操作软件包。
**
**------------------------------------------------------------------------------------------------------
** 修改人:
** 版  本:
** 日 期:
** 描 述:
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include "GPIO.h"

/*******************************************************************************************************
** 函数名称:GPIO0_Init
** 函数功能:初始化P0口为GPIO功能。
** 入口参数:PIN_No	引脚号,按位模式操作
			 type	引脚、输入输出类型
			 		0 	输入
			 		非0	输出。
** 出口参数:0	成功
**			 1	失败
** 调用示例:GPIO0_Init(1<<4, 1);	// P0.4初始化为GPIO输出类型
********************************************************************************************************/
void  GPIO0_Init(uint32 PIN ,uint8 type)
{
	uint8  i;
#ifdef	Fast_GPIO		// 快速IO
	SCS |= 0x01;	
#else
	SCS &= 0xFFFFFFFE;
#endif	
	for(i=0; i<16; i++)				// P0.0 ~ P0.15
	{
		if(((1<<i) & PIN) != 0)
		{
			PINSEL0 &= (~(3<<2*i));
#ifdef Fast_GPIO 			
			if(type == 0)
			{
				FIO0DIR &= (~(1<<i));
			}
			else
			{
				FIO0DIR |= (1<<i);
			}
#else
			if(type == 0)
			{
				IO0DIR &= (~(1<<i));
			}
			else
			{
				IO0DIR |= (1<<i);
			}
#endif			
		}		
	}
	for(i=16; i<32; i++)			// P0.16 ~ P0.31
	{
		if(((1<<i) & PIN) != 0)
		{
			PINSEL1 &= (~(3<<2*(i-16)));
#ifdef Fast_GPIO 			
			if(type == 0)
			{
				FIO0DIR &= (~(1<<i));
			}
			else
			{
				FIO0DIR |= (1<<i);
			}
#else
			if(type == 0)
			{
				IO0DIR &= (~(1<<i));
			}
			else
			{
				IO0DIR |= (1<<i);
			}
#endif					
		}
	}
}

/*******************************************************************************************************
** 函数名称:GPIO1_Init
** 函数功能:初始化P1口为GPIO功能。
** 入口参数:PIN_No	引脚号,按位模式操作
			 type	引脚、输入输出类型
			 		0 	输入
			 		非0	输出。
** 出口参数:0	成功
**			 1	失败
** 调用示例:GPIO1_Init(1<<4, 1);	// P1.4初始化为GPIO输出类型
********************************************************************************************************/
void  GPIO1_Init(uint32 PIN ,uint8 type)
{
	uint8  i;
#ifdef	Fast_GPIO		// 快速IO
	SCS |= 0x01;	
#else
	SCS &= 0xFFFFFFFE;
#endif	
	for(i=0; i<16; i++)				// P0.1 ~ P1.15
	{
		if(((1<<i) & PIN) != 0)
		{
			PINSEL2 &= (~(3<<2*i));
#ifdef Fast_GPIO 			
			if(type == 0)
			{
				FIO1DIR &= (~(1<<i));
			}
			else
			{
				FIO1DIR |= (1<<i);
			}
#else
			if(type == 0)
			{
				IO1DIR &= (~(1<<i));
			}
			else
			{
				IO1DIR |= (1<<i);
			}
#endif			
		}		
	}
	for(i=16; i<32; i++)			// P1.16 ~ P1.31
	{
		if(((1<<i) & PIN) != 0)
		{
			PINSEL3 &= (~(3<<2*(i-16)));
#ifdef Fast_GPIO 			
			if(type == 0)
			{
				FIO1DIR &= (~(1<<i));
			}
			else
			{
				FIO1DIR |= (1<<i);
			}
#else
			if(type == 0)
			{
				IO1DIR &= (~(1<<i));
			}
			else
			{
				IO1DIR |= (1<<i);
			}
#endif					
		}
	}
}

/*******************************************************************************************************
** 函数名称:GPIO2_Init
** 函数功能:初始化P2口为GPIO功能。
** 入口参数:PIN_No	引脚号,按位模式操作
			 type	引脚、输入输出类型
			 		0 	输入
			 		非0	输出
** 出口参数:0	成功
**			 1	失败
** 调用示例:GPIO2_Init(1<<4, 1);	// P2.4初始化为GPIO输出类型
** 说明:P2口只能使用快速IO操作。
********************************************************************************************************/
void  GPIO2_Init(uint32 PIN ,uint8 type)
{
	uint8  i;
	for(i=0; i<16; i++)				// P2.0 ~ P2.15
	{
		if(((1<<i) & PIN) != 0)
		{
			PINSEL4 &= (~(3<<2*i));
			if(type == 0)
			{
				FIO2DIR &= (~(1<<i));
			}
			else
			{
				FIO2DIR |= (1<<i);
			}
		}		
	}
	for(i=16; i<32; i++)			// P2.16 ~ P2.31
	{
		if(((1<<i) & PIN) != 0)
		{
			PINSEL5 &= (~(3<<2*(i-16)));
			if(type == 0)
			{
				FIO2DIR &= (~(1<<i));
			}
			else
			{
				FIO2DIR |= (1<<i);
			}
		}
	}
}

/*******************************************************************************************************
** 函数名称:GPIO3_Init
** 函数功能:初始化P3口为GPIO功能。
** 入口参数:PIN_No	引脚号,按位模式操作
			 type	引脚、输入输出类型
			 		0 	输入
			 		非0	输出
** 出口参数:0	成功
**			 1	失败
** 调用示例:GPIO3_Init(1<<4, 1);	// P3.4初始化为GPIO输出类型
** 说明:P3口只能使用快速IO操作。
********************************************************************************************************/
void  GPIO3_Init(uint32 PIN ,uint8 type)
{
	uint8  i;
	for(i=0; i<16; i++)				// P3.0 ~ P3.15
	{
		if(((1<<i) & PIN) != 0)
		{
			PINSEL6 &= (~(3<<2*i));
			if(type == 0)
			{
				FIO3DIR &= (~(1<<i));
			}
			else
			{
				FIO3DIR |= (1<<i);
			}
		}		
	}
	for(i=16; i<32; i++)			// P3.16 ~ P3.31
	{
		if(((1<<i) & PIN) != 0)
		{
			PINSEL7 &= (~(3<<2*(i-16)));
			if(type == 0)
			{
				FIO3DIR &= (~(1<<i));
			}
			else
			{
				FIO3DIR |= (1<<i);
			}
		}
	}
}
/*******************************************************************************************************
** 函数名称:GPIO4_Init
** 函数功能:初始化P4口为GPIO功能。
** 入口参数:PIN_No	引脚号,按位模式操作
			 type	引脚、输入输出类型
			 		0 	输入
			 		非0	输出
** 出口参数:0	成功
**			 1	失败
** 调用示例:GPIO4_Init(1<<4, 1);	// P4.4初始化为GPIO输出类型
** 说明:P3口只能使用快速IO操作。
********************************************************************************************************/
void  GPIO4_Init(uint32 PIN ,uint8 type)
{
	uint8  i;
	for(i=0; i<16; i++)				// P4.0 ~ P4.15
	{
		if(((1<<i) & PIN) != 0)
		{
			PINSEL8 &= (~(3<<2*i));
			if(type == 0)
			{
				FIO4DIR &= (~(1<<i));
			}
			else
			{
				FIO4DIR |= (1<<i);
			}
		}		
	}
	for(i=16; i<32; i++)			// P4.16 ~ P4.31
	{
		if(((1<<i) & PIN) != 0)
		{
			PINSEL9 &= (~(3<<2*(i-16)));
			if(type == 0)
			{
				FIO4DIR &= (~(1<<i));
			}
			else
			{
				FIO4DIR |= (1<<i);
			}
		}
	}
}

⌨️ 快捷键说明

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