📄 gpio.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 + -