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