分享

Cortex

 BeautymengRoom 2014-03-19
分类: Cortex-M3(NXP LPC1788) 2012-06-07 16:02 1925人阅读 评论(4) 收藏 举报

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

GPIO_LED

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

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


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

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多