原创 mini2440学习-1.流水灯的实现

2009-6-30 16:08 3331 7 7 分类: MCU/ 嵌入式

买了块ARM9的开发板,mini2440,500多。上班了,还好自己的时间比较多,这几天一直在看一些资料,终于,今天上午把流水灯程序弄好了,高兴啊!


先说一下在调试过程中的所得,最后附上代码。


1、调试前或者是调试过程中一定要把ADS1.2这个调试工具怎么配置搞懂了。其实重要的就那几个。一是Target setting,二是ARM assembler和ARM C assembler中型号的选择。我选的是920T,三是ARM linker 的设置,这个比较多,我的设置是-info totals -entry 0x30000000 -ro-base 0x30000000 -map -list test.txt -first 2440init.o(init)。这中间要好好理解entry和ro,以及first的含义。最后一个就是ARM fromELF,也就是设置一下输出的文件名。


2、最最权威的资料还是ADS自带的PDF,把那些看一下基本上就不用看别的了,开发中用到的或者是开发中用不到的在那里面都有相当详细的解释。当然,在刚入门的时候,像我这样,还是找一点能用的简单的工程,是工程,可不是仅仅只有源代码,自已在上面攺,看有哪些变化,慢慢的就摸到门了。注意的是工程一定要简单,复杂了就说不了了。个人见解,不足处请见谅。


3、善用网络资源。有许多问题别人都遇到过,并且以经解决了,我们没有必要在那上面浪费时间,baidu一下,什么都有了。


注:在部分测试中我没有用2440init.s,出现了一些问题,主要是入口地址方面的。链接器会把一个文件放到入口处,而不是指定的标号,所以必须把main()放到单独的文件中才能把它放到入口处,这和仿真不一样,仿真是可以指定入口标号的。个人见解,有错的话麻烦告诉我,也是初学者啊。


源码:(测试用,没有什么注释,请谅解)


#include "2440addr.h"


#define U32 unsigned int


extern void Delay(U32 tt);


void Main(void)
{
 U32 temp;
 temp = 0x0e;
 rGPBCON = 0x155555;  //PORTB for output
 rGPBUP  = 0x03ff;   //PORTB pull_up disable
 rGPBDAT = 0x000;
 for (;;)
 {
 ;
 Delay(1200);
 rGPBDAT = (temp<<5);
 temp <<= 1;
 if (temp == 0x1C0)
  temp = 0x0e;
 }
}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /3 下一条