新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > Cortex-M3 (NXP LPC1788)之GPIO

Cortex-M3 (NXP LPC1788)之GPIO

作者:时间:2016-11-19来源:网络收藏

经过前一篇的分析,现在可以进入C环境进行各个模块的学习。首先进行简单的GPIO控制LED灯的操作,开发板通过GPIO1.18控制LED灯,电路如下图:

本文引用地址:http://www.eepw.com.cn/article/201611/318445.htm

为了对LPC1788的内部结构有更好的理解和学习,虽然NXP给出了封装好的库函数,但是我将自己编写代码便于直接对内部原理进行分析。代码如下

  1. #definerFIO1DIR(*(volatileunsigned*)0x20098020)//高速GPIO方向控制寄存器,用于配置管脚的输入或输出,默认为输入
  2. #definerFIO1MASK(*(volatileunsigned*)0x20098030)//高速GPIO屏蔽寄存器,被屏蔽的位将不能进行GPIO的控制操作,默认无效
  3. #definerFIO1PIN(*(volatileunsigned*)0x20098034)//高速GPIO管脚值寄存器,可以操作未被FIOXMASK屏蔽的GPIO端口
  4. #definerFIO1SET(*(volatileunsigned*)0x20098038)//高速GPIO管脚置位寄存器,置一操作使相应位输出高电平
  5. #definerFIO1CLR(*(volatileunsigned*)0x2009803c)//高速GPIO管脚清楚寄存器,置一操作使相应位输出低电平
  6. voidDelay(int);
  7. intmain(void)
  8. {
  9. rFIO1DIR|=(1<<18);//GPIO1.18->OUTPUT
  10. while(1)
  11. {
  12. rFIO1SET|=(1<<18);//输出高电平可以用rFIO1PIN|=(1<<18);
  13. Delay(500000);
  14. rFIO1CLR|=(1<<18);//输出低电平可以用rFIO1PIN&=~(1<<18);
  15. Delay(500000);
  16. }
  17. }
  18. voidDelay(inti)
  19. {
  20. intk;
  21. for(k=0;k
  22. }
  23. voidSystemInit(void)
  24. {
  25. }

程序比较简单,对于GPIO的操作我们可以使用输出置位寄存器FIOXSET和输出清零寄存器FIOXCLR进行操作,也可以直接使用GPIO管脚值寄存器FIOXPIN进行操作。程序最后写了一个void SystemInit(void)空函数,是因为在启动程序startup_LPC177x_8x.S中 IMPORT SystemInit 声明了一个外部函数,并且LDR R0, =SystemInit执行该函数。如果不定义该函数编译会报错。 我们可以在该函数中进行LPC1788的时钟初始化。我们的程序中没有进行初始化,根据LPC1788的数据手册,系统上电或任何复位,将使用内部的IRC作为时钟源。而后可以在软件上进行切换,而该切换就可以在void SystemInit(void)中实现。

最后可以使用之前环境搭建中介绍的进行Debug调试或者下载程序。



评论


相关推荐

技术专区

关闭