?? gpio.c
字號:
/****************************************Copyright (c)**************************************************
** 廣州周立功單片機發展有限公司
** 研 究 所
** 產品一部
**
** http://www.zlgmcu.com
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: GPIO.c
**創 建 人: zhangbin
**最后修改日期: 2007-3-20
**描 述: LPC2400通用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 + -