原创 点亮第一盏灯 (ARM LPC2131 Proteus + Keil For ARM)

2009-9-5 00:55 7056 4 13 分类: MCU/ 嵌入式
学习ARM最基本的是能够让系统跑起来,起码能跑到main函数,控制一个GPIO。
如此一来点亮一盏LED灯就是入门操作了。

1. 建立Keil工程
Open Keil -> File -> New -> Project -> NXP -> LPC2131


点击看大图

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

点击看大图

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

点击看大图

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

下面开始画Proteus电路图如下:
点击看大图

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

96919749-9fd9-40b2-a40b-0263ab637fac.JPG

这样设置就可以让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灯就被点亮啦。


如下是相应的工程文件



https://static.assets-stash.eet-china.com/album/old-resources/2009/9/5/51f78044-180d-4e17-8018-c0fb26c13e87.rar(Proteus + Keil 工程 档案)
PARTNER CONTENT

文章评论9条评论)

登录后参与讨论

用户377235 2012-10-7 14:45

点亮了一盏灯,谢谢

用户1320319 2011-2-21 02:20

谢谢....

用户178146 2009-9-17 17:19

用户52478 2009-9-16 15:13

谢谢。昨天看了wangjin的blog我看他做的51和Proteus联调试,里面有个插件。这才想到我的看不到这个选项可能是没有插件而不是版本问题。

用户1022405 2009-9-16 12:42

这个需要额外安装一个Proteus的插件,具体做法可以上网搜索“Proteus和Keil For ARM的联调”

用户52478 2009-9-15 12:40

可以共享下你的keil v3.5和MDK304吗 比如QQ中转站

用户52478 2009-9-13 19:49

我用的MDK320,keil的版本是V3.6, proteus是 V7.12,可是在debug里面看不见到proteus这一项目

用户1022405 2009-9-11 22:38

Keil用的是V3.5版, Keil For ARM用的是“mdk304.exe” Realview没有试过和Proteus联调,不知道是不是可以。

用户52478 2009-9-11 12:53

能说下keil用的什么版本吗 realview可以吗
相关推荐阅读
我要评论
9
4
关闭 站长推荐上一条 /3 下一条