📄 lpc214x test.c
字号:
PINSEL2 &= 0xFFFFFFFB;
}
else if(io_fnct == 1)
{
PINSEL2 |= BIT2;
}
else
{
error = 1;
}
}
}
else
{
error = 2;
}
return(error);
}
/***********************************************************************
* 设置IO方向函数 *
* 功能描述:对IO方向进行设置,应在该IO设置成GPIO功能后再设置方向。 *
* 输入参数:io_port IO口模块编号 *
* io_num IO编号 *
* i_o 方向,0:输入,1:输出 *
* 输出参数:error 错误信息, 0:正常, 1:方向错误, *
* 2:IO编号错误, 3:IO模块错误 *
************************************************************************/
INT8U CPU_IO_SetDir(INT8U io_port, INT8U io_num, INT8U i_o)
{
INT8U error = 0;
if((i_o == CPU_IO_DIR_I)||(i_o == CPU_IO_DIR_O))
{
if(io_num < 32)
{
switch(io_port)
{
case 0:
IO0DIR &= ~(0x00000001<<io_num);
IO0DIR |= i_o<<io_num;
break;
case 1:
if(io_num > 15)
{
IO1DIR &= ~(0x00000001<<io_num);
IO1DIR |= i_o<<io_num;
}
else
{
error = 2;
}
break;
#ifdef CPU_LPC2200
case 2:
IO2DIR &= ~(0x00000001<<io_num);
IO2DIR |= i_o<<io_num;
break;
case 3:
IO3DIR &= ~(0x00000001<<io_num);
IO3DIR |= i_o<<io_num;
break;
#endif
default :
error = 3;
break;
}
}
else
{
error = 2;
}
}
else
{
error = 1;
}
return(error);
}
/***********************************************************************
* 将引脚设置成IO口函数 *
* 功能描述:将指定P口设置设置成GPIO,并设置方向。 *
* 输入参数:io_port IO口模块编号 *
* io_num IO编号 *
* i_o 方向,0:输入,1:输出 *
* 输出参数:error 错误信息, 0:正常, 1:方向错误, *
* 2:IO编号错误, 3:IO模块错误 *
************************************************************************/
INT8U CPU_IO_SetAsGpio(INT8U port, INT8U io_num, INT8U i_o)
{
INT8U error = 0;
if(io_num > 31) return 2;
switch(port)
{
case 0:
error = CPU_IO_SetP0Fnct(io_num, CPU_IO_GPIO);
break;
case 1:
error = CPU_IO_SetP1Fnct(io_num, CPU_IO_GPIO);
break;
#ifdef CPU_LPC2200
case 2:
CPU_IO_SetDataBus(0);
if((io_num == 29) || (io_num == 28))
PINSEL2 &= ~BIT20;
else if(io_num == 30)
PINSEL2 &= ~BIT21;
else if(io_num == 31)
PINSEL2 &= ~BIT22;
break;
case 3:
if(io_num >= 28)
{
CPU_IO_SetDataBus(0);
if(io_num == 28)
PINSEL2 &= ~BIT7;
else if(io_num == 29)
PINSEL2 &= ~BIT6;
}
else if(io_num >= 24)
{
if(io_num == 24)
PINSEL2 &= ~(BIT16+BIT17);
else if(io_num == 25)
PINSEL2 &= ~(BIT14+BIT15);
else if(io_num == 26)
PINSEL2 &= ~BIT11;
else if(io_num == 27)
PINSEL2 &= ~BIT8;
}
else if(io_num >= 2)
{
CPU_IO_SetAddrBus(0);
}
else
{
if(io_num == 1)
PINSEL2 &= ~BIT24;
else if(io_num == 0)
PINSEL2 &= ~BIT23;
}
break;
#endif
default :
error = 3;
break;
}
#ifdef CPU_LPC2200
if(i_o < 4)
#endif
#ifdef CPU_LPC2100
if(i_o < 2)
#endif
{
if(0 == error)
CPU_IO_SetDir(port, io_num, i_o);
}
else
{
error = 1;
}
return(error);
}
/***********************************************************************
* 引脚置位函数 *
* 功能描述:将指定P口置位。 *
* 输入参数:port IO口模块编号 *
* io_num IO编号 *
* 输出参数:void *
************************************************************************/
void CPU_IO_SetPin(INT8U port, INT8U io_num)
{
switch(port)
{
case 0:
IO0SET = 1 << io_num;
break;
case 1:
IO1SET = 1 << io_num;
break;
#ifdef CPU_LPC2200
case 2:
IO2SET = 1 << io_num;
break;
case 3:
IO3SET = 1 << io_num;
break;
#endif
default:
break;
}
}
/***********************************************************************
* 引脚复位函数 *
* 功能描述:将指定P口复位。 *
* 输入参数:port IO口模块编号 *
* io_num IO编号 *
* 输出参数:void *
************************************************************************/
void CPU_IO_ClrPin(INT8U port, INT8U io_num)
{
switch(port)
{
case 0:
IO0CLR = 1 << io_num;
break;
case 1:
IO1CLR = 1 << io_num;
break;
#ifdef CPU_LPC2200
case 2:
IO2CLR = 1 << io_num;
break;
case 3:
IO3CLR = 1 << io_num;
break;
#endif
default:
break;
}
}
/***********************************************************************
* 获取引脚状态函数 *
* 功能描述:获取指定P口状态。 *
* 输入参数:port IO口模块编号 *
* io_num IO编号 *
* 输出参数:void *
************************************************************************/
INT8U CPU_IO_GetPinState(INT8U port, INT8U io_num)
{
INT8U state = 0;
if(io_num < 32)
{
switch(port)
{
case 0:
if((IO0PIN & (BIT0<<io_num)))
state = 1;
break;
case 1:
if((IO1PIN & (BIT0<<io_num)))
state = 1;
break;
#ifdef CPU_LPC2200
case 2:
if((IO2PIN & (BIT0<<io_num)))
state = 1;
break;
case 3:
if((IO3PIN & (BIT0<<io_num)))
state = 1;
break;
#endif
default:
break;
}
}
return(state);
}
#ifdef CPU_LPC2200
/***********************************************************************
* 设置数据总线函数 *
* 功能描述:对数据总线进行设置。 *
* 输入参数:mode 功能, 0: 无总线,相应引脚用作GPIO; *
* 8: 8位数据总线; 16:16位数据总线; *
* 32: 32位数据总线 *
* 输出参数:无 *
************************************************************************/
void CPU_IO_SetDataBus(INT8U mode)
{
switch(mode)
{
case 0: //全部用作GPIO
PINSEL2 |= 0x00000003<<4;
break;
case 8: //用作8位数据总线
PINSEL2 &= ~(0x00000003<<4);
break;
case 16: //用作16位数据总线
PINSEL2 &= ~(0x00000003<<4);
PINSEL2 |= 0x00000001<<4;
break;
case 32: //用作32位数据总线
PINSEL2 &= ~(0x00000003<<4);
PINSEL2 |= 0x00000002<<4;
break;
default:
break;
}
}
/***********************************************************************
* 设置地址总线函数 *
* 功能描述:对地址总线进行设置。 *
* 输入参数:mode 功能, 0: 无总线,相应引脚用作GPIO; *
* 2: 2位地址总线; 4:4位地址总线; *
* 6: 6位地址总线; 8:8位地址总线; *
* 10:10位地址总线; 14:14位地址总线; *
* 16:16位地址总线; 18:18位地址总线; *
* 22:22位地址总线; 24:24位地址总线; *
* 输出参数:无 *
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -