LPC2131之GPIO

LPC2131共47个GPIO口。分别为P0[31:0]、P1[31:16],其中,P0.24未用,P0.31仅为输出口。


 LPC2131的大部分引脚都有复用功能,所以有一个专门的寄存器来设置选择该引脚使用什么功能,这个寄存器就是PINSELx.(注x表示0、1、2)。PINSEL0和PINSEL1每两位代数代表一个引脚功能选择。如PINSEL0[1:0]设置P0.0功能,PINSEL0[3:2]设置P0.1功能,其余引脚依次类推。比较特殊的是PINSEL2的设置与其他上述两个PINSEL完全不同,PINSEL2是32位寄存器,其中我们只用到PINSEL2[3:2]这2位。当PINSEL2.2位为0时,P1.36:26设置为GPIO功能;为1时P1.31:26用作一个调试端口。当PINSEL2.3位为0时,P1.25:15设置为GPIO功能;为1时P1.25:15用作一个跟踪端口。


  选择GPIO后,需要通过IODIR设置相应引脚的输入/输出状态。IODIR为32位寄存器,每位对应一个IO口,当某位为0时,则对应的IO口位被设为输入,反之,则被设为输出。如IO0DIR = 0x01,则P0.1被设为输出。


   当GPIO被设为输出时,通过写寄存器IOSET/IOCLR可以设置相应引脚输出值1/0。IOSET为32位寄存器,每位对应一个IO口,当某位为1时,则对应的IO口位输出高电平;为0时,无效。如IO0SET = 0x01,则P0.1输出高电平;IOCLR为32位寄存器,每位对应一个IO口,当某位为1时,则对应的IO口位输出低电平;为0时,无效。如IO0CLR = 0x01,则P0.1输出低电平。读IOSET寄存器,返回的值为上一次对IOSET和IOCLR寄存器的设置值,与外部环境对引脚的影响无关。


   当GPIO被设为输入时,通过读寄存器IOPIN可以知道相应引脚的当前值。IOPIN为32寄存器,每位对应一个IO口,当某位为1时,则对应的IO口位当前值为高电平;当某位为0时,则对应的IO口位当前值为低电平。


   LPC的IO口与我们熟悉的51单片机最大的不同是:IO的输出需要寄存器IOSET和IOCLR,这两个寄存器一次只能输出高电平或低电平,而无法使IO口同时输出包含0和1的二进制数。当我们需要同时置位和清零几个IO口时,就需要用到IOPIN寄存器了。对IOPIN寄存器进行写操作时,就可以设置相应的IO口同时输出包含0和1的二进制数。如IO0PIN = 0x05; 则P0.0和P0.2输出高电平,其他引脚输出低电平。


下图为GPIO的使用流程:



 


接下来我们来看一个实例,看看C程序是怎么实现对GPIO的操作。


 


#include "config.h"


 


const uint32 BEEP = 1 << 7;                   // P0.7控制蜂鸣器,低电平蜂鸣


const uint32 KEY1 = 1 << 16;                // P0.16连接KEY1,按下为低电平


 


/***************************************************************


** 函数名称 main()


** 函数功能 GPIO输入实验测试。


**                  检测按键KEY1KEY1按下 ,蜂鸣器蜂鸣,松开后停止蜂鸣。


** 跳线说明 :把JP8KEY1跳线短接,JP11连接蜂鸣器。


***************************************************************/


int main (void)


{


       PINSEL0 = 0x00000000;                        // 所有管脚连接GPIO   


       PINSEL1 = 0x00000000;


       IO0DIR  = BEEP;                                   // 蜂鸣器控制口输出,其余输入


      


       while (1)


       {


              if ((IO0PIN & KEY1) == 0)  IO0CLR = BEEP;   


                                                                  // 如果KEY1按下,蜂鸣器鸣叫


                     else IO0SET = BEEP;            // 松开则停止蜂鸣


       }


      


}

写好的C语言程序怎么在MDK中调试。


首先进入MDK,然后打开一个周立功提供的工程模板:点击看大图


     接着我们把写好的C语言程序拷贝到main.c中:


点击看大图


那么接下来就是保存数据,并且编译。


,OK编译通过。


    然后生成可执行文件:


点击看大图


    好了,那么下面我们需要设置一下调试工具。点击options for target ,


选择debug选项,在USE选项中选择J-LINK/J-TRACE :


    接着选择Utilities选项,在Use Target Driver foe flash Programming 中选择J-LINK/J-TRACE 


    点击看大图


    最后需要单击settings按钮,在弹出的界面中单击add按钮。


点击看大图


在弹出的界面中选择自己ARM芯片的flash,因为本人使用的是LCP2131的开发板,所以选择的是LCP2100系列的32K flash. 


最后点击OK,这样MDK的jlink调试工具就设置完了。


然后单击Download to flash Memory 按钮,往flash中下载程序,当信息栏出现verify OK的提示,就表示已经下载成功了。我们可以接着下一次进行调试。


我们单击start/stop Debug session按钮,MDK就会进入调试界面,我们可以选择全速运行、单步调试等功能对程序进行调试,并且调试结果将在开发板上显示。


OK,这就是我的第一个LPC的程序,虽然简单,但是中间也碰到了不少问题,编译出错、下载不成功、jlink设置错误等等问题。不过在热心的菜头、菜1等朋友的帮助下都一一解决了,在这里谢谢这些热心的朋友。



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值