kingG 发表于 2013-4-3 16:19:48

转帖:<筱静的ARM学习日志_01>ARM11裸机环境搭建与程序调试详解

首先说明一下,我只是一个嵌入式的新手,之前在学校的时候只学过简单的51单片机、基础的C语言和数电模电。上课的时候听老师说过嵌入式,但对这个词没有什么概念,也不知道学嵌入式能干什么。虽然自己在网上看了很多关于嵌入式学习的帖子,但还是一知半解,不知该从何入手。那种茫然的感觉真挺郁闷的--!
  快毕业了,有幸来到一家从事嵌入式产品设计的公司实习。在师傅的带领下开始接触基础的嵌入式开发。一个星期的岗前培训给我最大的感觉是:有人带比自己学快很多。也正是这个想法,让我打算通过日志记录自己每天的收获和感悟,分享给大家。希望能够通过这种形式和正在学嵌入式的朋友们互相交流,也真心希望能够得到行业内前辈们的指导。
  PS:由于个人能力暂时比较有限,在这里不敢妄谈经验。不过帖子里每一步都是我亲自操作完成的,如果帖子描述的不是很详细,大家可以看一下操作视频。希望通过图文+视频的方式,将实现过程更清晰的呈现给大家,也希望各位前辈在闲暇之余能指点一下,这里先谢过了~(*^__^*) 嘻嘻……
  
  先上视频了
  第一次录的没经验,分辨率设置低了,上传优酷之后变得有点儿模糊,所以下面也给出了网盘地址,里面是视频源文件,70M左右

优酷版视频点击观看

原版视频网盘版点击这里下载

PS:等到视频录制结束之后再听才发现和之前的初衷差别蛮大的,尤其是开场白,这是后来加上的,感觉还不如不加呢o(╯□╰)o原本希望用一种轻松的语气和讨论的方式和大家交流,结果听起来很像是说教,过于正式和严肃了。第一次录制视频,心情比较复杂和忐忑,语言表达的也很不自然...希望在今后的视频中可以带给大家一种更加轻松的感觉。学习不一定是痛苦的,交流不一定是严肃的,简单一些,或许更自然。
  
第一期内容是最基础的无操作系统下基于ARM处理器流水灯的实现。
开发环境:WinXP
软件工具:RVDS2.2下的CodeWarrior、AXD,至于RVDS2.2软件,只要从网上下载并安装到自己的计算机上就可以了
硬件平台:ARM11 S3C6410处理器、J-LINK V8(使用前要安装相应的驱动哦~)

    在这里想先和大家分享一个小感悟,这两天才发现的:
就以这个流水灯实现为例,之前在学校老师讲流水灯的实现用了6节课,而且听完了还不是很清楚。原因在于老师会先讲什么是寄存器,什么是寻址,然后是汇编的各个指令...其实这些内容里面和流水灯实现关联都不够紧密,听的很多,可没什么重点。如果从目标出发来看这个问题我觉得会更清晰。

    流水灯为什么会亮->LED发光->LED为什么会发光->LED两端有了高低压差->LED两端为什么会有压差->电路连接一段是高电平另一端是ARM的某个管脚->只要ARM管脚输出低电平LED就会亮->ARM管脚如何输出低电平/哪个管脚输出低电平?

这样一想思路就清楚了。流水灯的实现也就很简单了:
1.查看原理图,找到连接LED的ARM管脚
2.查看ARM手册,找到这个管脚的位置及控制方法(寄存器)
3.使用某个软件(这里使用的是ADS)编写一个控制该寄存器程序
4.通过工具(JLINK)连接PC和处理器平台,把编写好的程序从PC机下载到处理器平台运行。
  这是自己这几天实习的小感悟,换一种思路学习,或许会事半功倍,希望能给初学者朋友一些启发。

  接下来是流水灯在ARM11处理器实现的具体内容:

  首先是原理图和寄存器介绍:
http://www.amobbs.com/data/attachment/forum/201304/03/094151afdozwkorq9jrd2j.png.thumb.jpg

这个呢,就是led的原理图,这里就可以明白的看到led是如何点亮的。VDD33V代表高电平,只要NLED3输出为低电平就可以点亮LED灯了。

http://www.amobbs.com/data/attachment/forum/201304/03/094302gz7fczif15c7i5ii.png.thumb.jpg

这就是管脚的连接方式,这样就可以找到控制led的寄存器。方块里面的代表了ARM处理器的相关引脚和功能。

kingG 发表于 2013-4-3 16:25:14

http://www.amobbs.com/data/attachment/forum/201304/03/094303qwrlwxpcvh2zwwhu.png.thumb.jpg

http://www.amobbs.com/data/attachment/forum/201304/03/0943041huuouubg8ftuffz.png.thumb.jpg

http://www.amobbs.com/data/attachment/forum/201304/03/094301ddi8dwi8q0f5fqz8.png.thumb.jpg
这三张截图向我们介绍了控制led灯的寄存器的概况

http://www.amobbs.com/data/attachment/forum/201304/03/094511dnoniib319ia19n3.png.thumb.jpg

这时在RVDS2.2中创建一个工程,用到的软件就是CodeWarrior

http://www.amobbs.com/data/attachment/forum/201304/03/094537addlrjaib2irnviv.png.thumb.jpg

这张图显示了在所建的工程中添加一个文本文件用来编写实现代码

kingG 发表于 2013-4-3 16:30:15

http://www.amobbs.com/data/attachment/forum/201304/03/094629g9v71wn8mzvc2dh1.png.thumb.jpg

代码写好之后,我们需要配置一下Release中的对应选项

http://www.amobbs.com/data/attachment/forum/201304/03/094537addlrjaib2irnviv.png.thumb.jpg

http://www.amobbs.com/data/attachment/forum/201304/03/094719i9ti5ebnetjimfv0.png.thumb.jpg

http://www.amobbs.com/data/attachment/forum/201304/03/094720tnarlgttjca0s0al.png.thumb.jpg

http://www.amobbs.com/data/attachment/forum/201304/03/094715xyy90wo2e0dppsdm.png.thumb.jpg

http://www.amobbs.com/data/attachment/forum/201304/03/094914t67d2nnrise17t41.png.thumb.jpg

kingG 发表于 2013-4-3 16:33:25

在调试之前呢,我们需要添加相应的JLINK动态库

http://www.amobbs.com/data/attachment/forum/201304/03/094914t67d2nnrise17t41.png.thumb.jpg

http://www.amobbs.com/data/attachment/forum/201304/03/0949494tkzrk7u7lze4k2n.jpg.thumb.jpg

这张图中可以大致地看出JLINK的连接方式,连接比较简单,线都是防误插的,只要都连上就可以喽~

kingG 发表于 2013-4-3 16:34:12

最后我在这里把视频中的代码也贴上来,希望朋友们可以用到:
  
  Main.c文件:
  #define rGPMCON    (*(volatile unsigned *)(0x7F008820))
  #define rGPMDAT    (*(volatile unsigned *)(0x7F008824))
  #define rGPMPUD    (*(volatile unsigned *)(0x7F008828))
  void msDelay(int time)
  {
        volatile unsigned int i,j;
        for(i = 0; i < 2000000; i++)
            for(j=0; j<time; j++);
  }
  void GPIO_Init(void)
  {
      rGPMCON= 0x11111;//初始化控制寄存器,使每一个寄存器处于output状态
  rGPMDAT= 0X1F;//初始化控制寄存器,使每一个灯都灭着
  }
  void LedTest(void)
  {
      volatile unsigned int i;
      while (1)
      {
        for(i=0; i<4; i++)
        {
              rGPMDAT= ~(1<<i);//用位操作控制灯的循环点亮
              msDelay(10);//延时10ms
        }
  
      }
  }
  void Main(void)
  {
      GPIO_Init();
      LedTest();
  }
  
  Init.s
  
  IMPORTMain
      AREA |C$$code|, CODE, READONLY
      global      start
  start            
  blMain
  END

  裸机的相关知识比较少,这期就差不多讲完了。下期开始主要是Linux的相关内容,大家要是有什么想了解的知识点可以在帖子里面告诉我,只要是我会的,尽量录制在下期视频和大家交流。

飞凌-peacelove 发表于 2013-4-3 17:21:41

楼主挺细心的,从初学者的角度表述学习过程,感谢楼主的分享,希望再接再厉啊~:)

lpf2841102 发表于 2013-4-4 09:58:20

kingG 发表于 2013-4-4 17:30:07

额,帖子是从21ic转的,这个帖子的作者妹子好像是要出系列视频,不妨和她联系一下,大家可以一起学习;P

creatorliu 发表于 2013-4-6 11:34:21

hnxyzhw 发表于 2013-4-8 15:33:57

upli 发表于 2013-4-13 22:39:31

向楼主学习!

ruiyang 发表于 2013-4-22 21:05:56

pulk 发表于 2013-11-8 07:57:04

huaiqiao 发表于 2014-5-30 16:50:24

章小肆 发表于 2014-10-3 23:01:51

kingG 发表于 2013-4-3 16:25 static/image/common/back.gif
这三张截图向我们介绍了控制led灯的寄存器的概况




ads的可以么

skyxylx77 发表于 2014-10-4 16:17:06

skyxylx77 发表于 2014-10-4 16:22:16

好人啊 发表于 2016-1-6 21:37:48

hha asffaa

z_jzhao 发表于 2016-5-20 09:05:34

很好,支持!
怎么很多用户被删除了,看不到内容。
页: [1]
查看完整版本: 转帖:<筱静的ARM学习日志_01>ARM11裸机环境搭建与程序调试详解