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

📄 lpc214x test.c

📁 LPC2140 cpu外设全接口 注释详细到极点了
💻 C
📖 第 1 页 / 共 5 页
字号:
                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 + -