随笔 - 303  文章 - 883  trackbacks - 0
<2009年2月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
1234567

欢迎光临! 
闲聊 QQ:1074961813

随笔分类(357)

我管理的群

公共blog

  • n维空间
  • Email : java3d@126.com 群 : 12999758

参与管理的论坛

好友的blog

我的其他blog

朋友的网站

搜索

  •  

最新评论

 

大家好,从事工作之后,小寻很久没写什么了,现在对我来说,工作之余,研究一下技术,可能以成为一种乐趣,当人们做有益他人的事情,而不求回报,总是快乐。希望下来的内容也能给你带去快乐。  

关于嵌入式linux开发并不是一句话,或一篇文章能讲清楚的,很多事情也是如此,但有时候,就是那么一两篇文章,将我们从一个陌生领域的门外进入门内。。。。

如果没记错,以前有位兄弟在驱动的文章里提出一个问题,现在我便把它拿出来

如何编写Linux 驱动程序()

看完你写的"驱动没什么新鲜玩意儿",我在想,LDD那本书居然还在出版,让我非常疑惑.仅仅填几个结构就是驱动程序了啊....怎么连写个积存器的动作都没....

当时我解释了很多,如今看来实在是废话,呵呵,随着对技术认识,可以简单的解释:前面的linux驱动是建立在操作系统之上的,而这位朋友所说的寄存器设置是指在嵌入式开发领域,可以说嵌入开发和驱动开发是两个交叉的学科,嵌入式开发里不一定全是驱动开发,驱动开发也不全限定在嵌入式平台。

关于Linux驱动,我想需要解释一个问题,”软件是如何在硬件上跑起来的?

从软件的角度看上去,所有的硬件(寄存器)都是地址(如0x00010011),在arm上大多是32位的。那么为什么要用寄存器?举个例子,对arm9处理器做编程,通过对寄存器的编程,如:

     LDR r0 , =0x56000010

     MOV r1 , #0x00000400

     STR   r1 , [r0]           @设置GPBCON寄存器,将GPB5端口(引脚)设置为输出

     LDR r0   , =0x56000014

     MOV r1 , #0x00000000

     STR   r1 , [r0]           @设置CPBDAT寄存器,使GPB5 输出为0低电平

MAIN_LOOP:

     B     MAIN_LOOP

我们就将GPB5设置为输出端口,并让GPB5输出低电平,在开发板上您就会看到第一个LED灯被点亮。

从上面的简单例子看到,通过对寄存器的设置,目的是对硬件做配置,使硬件我们的软件所用。所以如果硬要在软件和硬件之间架起桥梁的话,那么这个桥梁便是寄存器,和那些地址了。关于这些地址,我们可以通过手册获得,有时候需要做些许计算。

在这这里大家也许更关心的是:C是如何访问硬件吧?

这里讲到的是裸跑所以必须有一段程序先对内存堆栈做一下配置,这样我们的C才能跑得起来(关于这部分,由于不是重点就不多讲了)

     #define   GPBCON    (*(volatile unsigned long *)0x56000010)

     #define   GPBDAT    (*(volatile unsigned long *)0x56000014)

     int main(void)

     {

         GPBCON = 0x00000040; //设置GPBCON寄存器,将GPB5端口(引脚)设置为输出

         GPBDAT = 0x00000000; //设置CPBDAT寄存器,使GPB5 输出为0低电平

         return 0

}

我们可以看到它其实和前面的汇编没什么区别,只不过是比较好读罢了。

不少的处理器都为连在她周围的硬件(的寄存器),分配给他们自己的地址空间,软件便是通过地址空间来访问这些硬件。如果您很想从事这方面的开发,必要的硬件知识是不可少的^_^



地震让大伙知道:居安思危,才是生存之道。
posted on 2009-02-07 11:41 小寻 阅读(2951) 评论(3)  编辑  收藏 所属分类: 嵌入式开发

FeedBack:
# re: 如何编写Linux驱动程序(续集)-嵌入式开发1---软件是如何在硬件上跑起来?[未登录] 2009-03-24 21:13 hehe
不错 呵呵  回复  更多评论
  
# re: 如何编写Linux驱动程序(续集)-嵌入式开发1---软件是如何在硬件上跑起来? 2009-03-31 16:12 liang
老兄你好:
我一个问题忙了几天了,要开发pc104总线, 我想问一下前辈如何看懂接口或总线定义图啊?  回复  更多评论
  
# re: 如何编写Linux驱动程序(续集)-嵌入式开发1---软件是如何在硬件上跑起来? 2009-04-03 22:55 小寻
无语 硬件理论基础 懂了 就会看了  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: