LPC2478 通用输入/输出口(GPIO)

来源:互联网 发布:超人钢铁之躯 知乎 编辑:程序博客网 时间:2024/05/21 07:46

P0.0-P0.31     低速控制、高速控制

P1.0-P1.31     低速控制、高速控制

P2.0-P2.31     高速控制

P3.0-P3.31     高速控制

P4.0-P4.31     高速控制

共160个I/0口

 

P0和P2端口的每个引脚都可以提供中断功能。

每个中断都可以被编程为上升沿、下降沿或边沿产生中断。

边沿检测是异步的,因此可以在没有时钟的情况下(例如掉电模式)操作。

可以掉电唤醒。

寄存器为软件提供挂起的上升沿中断、挂起的下降沿中断和整个挂起的GPIO中断。

GPIO0与GPIO2中断与外部中断3事件共用相同的VIC通道。

 

GPIO口控制寄存器

 

1.GPIO端口方向寄存器IODIR和FIODIR  (31:0)  0 控制的引脚为输入   1控制的引脚为输出。   IO0DIR=0xFFFFFFFF;//低速P0口32个引脚全部为输出。

       每个高速GPIO口也可以通过字节和半字访问的寄存器来控制。     

  字节访问的寄存器

       FIOxDIR0  ( 8位)   对应 Px.0-Px.7

       FIOxDIR1   (8位)   对应 Px.8-Px.15

       FIOxDIR2  ( 8位)  对应 Px.16-Px.23

       FIOxDIR3   (8位)   对应 Px.24-Px.31

   半字访问的寄存器

       FIOxDIRL   (16位) 对应 Px.0-Px.15

       FIOxDIRL   (16位) 对应 Px.16-Px.31

2.GPIO端口输出置位寄存器IOSET和FIOSET(31:0) 0 控制的引脚输出不改变 1 控制的引脚输出设为高电平。      IO0SET=0xFF; //P0口的0到7脚输出为高电平

      FIOxSET0   FIOxSET1  FIOxSET2  FIOxSET3                                                               FIOxSETL     FIOxSETU

 

3.GPIO端口输出清零寄存器IOCLK和FIOCLK (31:0)0 控制的引脚输出不改变 1 控制的引脚输出设为低电平。

         FIOxCLK0   FIOxCLK1  FIOxCLK2  FIOxCLK3                                                           FIOxCLKL     FIOxCLKU

4.GPIO端口引脚值寄存器IOPIN和FIOPIN(31:0)

        FIOxPIN0   FIOxPIN1  FIOxPIN2  FIOxPIN3                                                                  FIOxPINL     FIOxPINU

 

5.高速GPIO端口屏蔽寄存器FIOMASK(31:0)   0 引脚正常,未被屏蔽    1   屏蔽对应引脚

           FIO0MASK=0xFFFFFF00;//P0口的0到7脚可以输出,其它脚被屏蔽

       FIOxMASK0   FIOxMASK1  FIOxMASK2  FIOxMASK3                                                                  FIOxMASKL     FIOxMASKU

 

 

I/O端口的中断寄存器(P0和P2口)

1.GPIO整体中断状态寄存器IOIntStatus(31:0)

                                                                                                                31:3       保留

                                                                                                                     2           P2Int           0  在P2上没有挂起的中断      1    在P2上至少有一个挂起的中断

                                                                                                                     1           保留

                                                                                                                     0           P1Int           0  在P0上没有挂起的中断      1    在P0上至少有一个挂起的中断

                            if(IOIntStatus & 0x01)  //如果PORT0上有中断挂起     

                            if(IOIntStatus & 0x04)  //如果PORT2上有中断挂起    

2.上升沿寄存器的GPIO中断使能IO0IntEnR和IO2IntEnR(31:0) 0 上升沿中断禁能   1 上升沿中断使能

                                       IO0IntEnR=IO0IntEnR | 0x01;  //使能P0.0引脚的上升沿上断

3.下降沿寄存器的GPIO中断使能IO0IntEnF和IO2IntEnF(31:0)  0 下降沿中断禁能   1  下降沿中断使能

                                       IO0IntEnF=IO0IntEnF |0x01;  //使能P0.0引脚的下降沿中断

4.上升沿寄存器的GPIO中断状态IO0IntStatR和IO2IntStatR(31:0)      0 对应引脚上没有上升沿中断 1 对应引脚上出现上升沿中断

                                     if(IO0IntStatR & 0x01)  //如果P0.0有上升沿中断产生

5.下降沿寄存器的GPIO中断状态IO0IntStatF和IO2IntStatF(31:0)      0 对应引脚上没有下降沿中断 1 对应引脚上出现下降沿中断

6. GPIO中断标志清零寄存器IO0IntClr和IO2IntClr(31:0)   向这些寄存器的某些位写入“1”,将清零对应引脚的中断标志

                     

 

SCS(System Control and  Status Register)    31:0    当0位取值为 0  P0和P1口 低速模式           取1 时 ,P0和P1口 高速模式