Keil与Proteus联调ARM举例

  • 格式:docx
  • 大小:350.62 KB
  • 文档页数:5

下载文档原格式

  / 5
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Keil与Proteus联调ARM举例

学习ARM最基本的是能够让系统跑起来,起码能跑到main函数,控制一个GPIO。如此一来点亮一盏LED灯就是入门操作了。

1. 建立Keil工程

Open Keil -> File -> New -> Project -> NXP -> LPC2131

第一步可以用Keil自带的Startup.s来学习

在工程配置里面勾上产生HEX文件,便于Proteus仿真用

同时选择Debug为Proteus,这样就可让Proteus和Keil联调了。

下面开始画Proteus电路图如下:

Proteus基本电路图很简单,基本上只要电源、接地接对了就可以跑了。

这样设置就可以让Keil和Proteus联调了

接下来就是写ARM的Code,由于我们用来Keil默认的Startup.s,所以第一步先不碰可怕的汇编。

像写PC程序一样写个main函数如下:

int main(void)

{

while(1);

}

编译通过,产生Hex文件,用如下方式让Proteus的ARM连接上Keil编译的HEX程序

这样Proteus就设定了ARM的程序输入的HEX文件

到这里就可用Keil和Proteus联调debug,虽然代码只有while(1),但是可以调试的。

接下来就是如何通过控制GPIO来点亮LED灯了。

了解2131控制GPIO有如下步骤:

1. 设置PIN的功能选择为GPIO

2. 设置PIN的输出方向

3. 设置PIN输出的电平1/0

对应程序如下:

// arm2131 ledon projec main function

#define vWriteReg(addr, val) (*((volatile unsigned long *)(addr)) = (val))

#define dReadReg(addr) (*((volatile unsigned long *)(addr)))

#define vWriteRegMask(addr, mask, val) vWriteReg(addr, dReadReg(addr) & (~(mask)) | (val&(mask)))

#define REG_BASE (0xE0000000)

#define REG_PIN0_SEL (REG_BASE + 0x2C000)

#define RET_IO0_ST (REG_BASE + 0x28000)

#define REG_IO0_SET (REG_BASE + 0x28004)

#define REG_IO0_DIR (REG_BASE + 0x28008)

#define REG_IO0_CLR (REG_BASE + 0x2800C)

int main(void)

{

// P0.0 function select as GPIO

vWriteRegMask(REG_PIN0_SEL, 0x03, 0x00);

vWriteReg(REG_IO0_DIR, 1<<0);

vWriteReg(REG_IO0_CLR, 1<<0);

while(1);

}

至此LED灯就被点亮啦。

如下是相应的工程文件