木易

【转】ARM学习经验(二)

0
阅读(3029)

第一个程序--流水灯

当前面这些都弄的差不多了,下面就可以通过实际写程序来进一步熟悉2131的功能模块了。功能模块里面最简单的就是通用IO口了,下面先写一个流水灯程序。开发板的P1.18---P1.25接了8个共阳极的发光二极管,这个流水灯程序就是控制这8个发光管按照一定的次序点亮,熄灭。首先建立工程,选择MCU类型,添加startup启动程序,建立一个c程序文件,内容如下:
#include

#define uchar unsigned char
#define uint unsigned int

const uint LEDS8 = (0xff<<18);

void DelayNS( uint dly )
{
uint i;
for( ; dly>0; dly-- )
for( i=0; i<50000; i++ );
}


int main( void )
{
uchar i;
const uint LED_TBL[] =
{
0x00, 0xff, //全部熄灭后,再全部点亮
0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, //依次逐个点亮
0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff, //依次逐个叠加
0xff, 0x7f, 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01, //依次逐个递减
0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81, //两个靠拢后分开
0x81, 0xc3, 0xe7, 0xff, 0xff, 0xe7, 0xc3, 0x81 //从两边叠加后递减
};
//选择P1.16---P1.25为GPIO
PINSEL2 = PINSEL2 & 0xf7;
//设置P1.18---P1.25为输出
IO1DIR = LEDS8;

while( 1 )
{
for( i=0; i<42; i++ )
{
IO1SET = ~((LED_TBL) << 18 );
DelayNS( 15 );
IO1CLR = ((LED_TBL) << 18 );
DelayNS( 15 );
}
}
return 0;
}

编译,连接,选择软件仿真,打开外围接口的IO1口,运行,就可以看到大概的效果了,IO1SET里面的小格子依次变化。
  这个程序很简单,通过这个程序,可以先了解下arm程序的格式,最主要的是,我想通过这个小程序讲下自己的调试经历。

程序在2131的RAM中仿真调试

程序写好了,如何验证正确性呢?1:仿真调试;2:写到硬件实际运行。这里,我主要讲讲仿真调试。
仿真调试常常作为我们测试的第一个步骤,以前写c51程序的时候,我们可以有两个选择,一个是keil的软件仿真,另外就是用仿真器调试。LPC2131带有在线调试功能,用开发板配套的H-JTAG仿真器可以连接PC,进行程序调试(ulink早就有了,可是要的贵啊,先拿这个H-Jtag练手吧)。使用H-JTAG可以有两种方法在线调试,1:在lpc2131的RAM中调试;2把程序下载到lpc2131的flash中,再进行调试。
先说说程序在RAM中调试的方法(网上找的资料,然后自己整理验证后的)。首先在项目文件夹下新建两个空文件夹,分别取名debuginram,debuginflash。选择菜单Project->Options for Target`******`,选择Output选项卡,点击Select Folder for Objects...,将输出定位到debuginram文件夹,然后选择Listing选项卡,同上,输出定位到debuginram文件夹。选择Linker选项卡,取消Use Memory Layout from Target Dialog,把R/O Base修改为0x40000000,R/W Base修改为0x40001800,把Scatter File项清空。
选择Debug选项卡,选择右边的设备为RDI Interface Driver,点击旁边的Settings,将Browse for RDI Driver DLL定位到H-JTAG的安装目录下的H-JTAG.dll,不要选择Debug下Cache Options的Cache Code,Cache Memory。OK保存。在项目文件夹下建立一个文本文件,名字随便取,内容为:

//debuginram配置文件


FUNC void Setup( void )
{
//程序入口点
PC = 0x40000000;
}

LOAD debuginram****.axf INCREMENTAL

Setup();

g,main


****标示你自己的项目名字!
保存关闭,修改文件类型为ini格式。
选择菜单Project->Options for Target`******`,选择Debug选项卡,将右边的Initialization 内容定位到刚才建立的那个ini文件,确定保存。然后编译,打开H-JTAG程序,打开H-Flash,Flash Selection选择NXP的LPC2131,点击左面的Programming,Check一下,然后把H-Flash和H-Jtag最小化。在keil里选择Debug->Start Debug,如果前面的设置都正确,等一下程序运行点就会定位到main函数,你就可以开始仿真运行了。
选择在RAM中仿真运行,还有些要注意:1程序不能太大,不能超过芯片的RAM空间,2要把芯片先擦空,否则上电就无法进入调试模式。



关于Keil最新版本(3.0X)的汉字注释紊乱改进问题

在Keil的MDK3.05及以前的版本中,都存在汉字注释及关键字紊乱的问题。
改进方法很简单,只需将字体改为MingLiu,去掉斜体。
分别对asm,c,c++在ConfigurationColors & Font下进行以下同样设置即可
Text 选MingLiu
/*Comment*/ 选Normal
//or;Comment 选Normal
Keyword 选自己喜欢的颜色。

注:本方法对Keil C51同样有效

现在开始逐个功能模块的程序调试

在经历了我上面说的那么多过程,现在该开始动手写程序了。只看资料是没有用的,通过具体写程序来进一步了解LPC2131的各个功能模块,并结合以前工作中的情况,把一些功能逐步实现,比如说,配套资料里面只提到了按键的中断,那么我们就要想到实际工作中要用到的按键防抖动,这个功能如何在ARM开发板上实现,跟我们以前用51有什么区别,有什么经验可以借鉴的,这样,我们一个一个功能模块调试下来,就可以达到熟练使用的目的了。

Baidu
map