经过前一篇的剖析,现在能够进入C环境进行各个模块的学习。首要进行简略的GPIO操控LED灯的操作,开发板经过GPIO1.18操控LED灯,电路如下图:
为了对LPC1788的内部结构有更好的了解和学习,尽管NXP给出了封装好的库函数,可是我将自己编写代码便于直接对内部原理进行剖析。代码如下
- #definerFIO1DIR(*(volatileunsigned*)0x20098020)//高速GPIO方向操控寄存器,用于装备管脚的输入或输出,默以为输入
- #definerFIO1MASK(*(volatileunsigned*)0x20098030)//高速GPIO屏蔽寄存器,被屏蔽的位将不能进行GPIO的操控操作,默许无效
- #definerFIO1PIN(*(volatileunsigned*)0x20098034)//高速GPIO管脚值寄存器,能够操作未被FIOXMASK屏蔽的GPIO端口
- #definerFIO1SET(*(volatileunsigned*)0x20098038)//高速GPIO管脚置位寄存器,置一操作使相应位输出高电平
- #definerFIO1CLR(*(volatileunsigned*)0x2009803c)//高速GPIO管脚清楚寄存器,置一操作使相应位输出低电平
- voidDelay(int);
- intmain(void)
- {
- rFIO1DIR|=(1<<18);//GPIO1.18->OUTPUT
- while(1)
- {
- rFIO1SET|=(1<<18);//输出高电平能够用rFIO1PIN|=(1<<18);
- Delay(500000);
- rFIO1CLR|=(1<<18);//输出低电平能够用rFIO1PIN&=~(1<<18);
- Delay(500000);
- }
- }
- voidDelay(inti)
- {
- intk;
- for(k=0;k
- }
- voidSystemInit(void)
- {
- }
程序比较简略,关于GPIO的操作咱们能够运用输出置位寄存器FIOXSET和输出清零寄存器FIOXCLR进行操作,也能够直接运用GPIO管脚值寄存器FIOXPIN进行操作。程序最终写了一个void SystemInit(void)空函数,是因为在发动程序startup_LPC177x_8x.S中 IMPORT SystemInit 声明晰一个外部函数,而且LDR R0, =SystemInit碑文该函数。假如不界说该函数编译会报错。 咱们能够在该函数中进行LPC1788的时钟初始化。咱们的程序中没有进行初始化,依据LPC1788的数据手册,体系上电或任何复位,将运用内部的IRC作为时钟源。然后能够在软件上进行切换,而该切换就能够在void SystemInit(void)中完成。
最终能够运用之前环境建立中介绍的进行Debug调试或许下载程序。