学习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灯就被点亮啦。
如下是相应的工程文件
https://static.assets-stash.eet-china.com/album/old-resources/2009/9/5/51f78044-180d-4e17-8018-c0fb26c13e87.rar(Proteus + Keil 工程 档案)
用户377235 2012-10-7 14:45
用户1320319 2011-2-21 02:20
用户178146 2009-9-17 17:19
用户52478 2009-9-16 15:13
用户1022405 2009-9-16 12:42
用户52478 2009-9-15 12:40
用户52478 2009-9-13 19:49
用户1022405 2009-9-11 22:38
用户52478 2009-9-11 12:53