何为driver

来源:互联网 发布:nb 知乎 编辑:程序博客网 时间:2024/04/29 20:40

一、硬件角度看register及其地址:

a)       硬件角度并没有地址的概念,而是把地址线过来的电平看作信号来驱动,同时数据线过来的数据改变外设register的值,而这个所谓的值也只是coder的理解,ICer可能会做成register,也可能是锁存器等等。贴一个煊图,大概就是这样吧。


b)       为什么把相同功能的做成组,例如GPIO的register的地址分为ABCD组,各组连续。为了软件上操作的方便。


二、其实driver就是设置寄存器。既然通过二中的方法可以(软件意义上)设置寄存器了,那么我们coder就开始工作!!!

a)       以ARM7的GPIO_Write(GPIOB, 0x00ff); //写数据到PB 为例

b)       首先分析GPIOB:

                        i.             #define GPIOB               ((GPIO_TypeDef *) GPIOB_BASE)

                      ii.             简单解释上面的define就是把GPIOB_BASE开始的一段内存解释为GPIO_TypeDef

c)       然后分析GPIO_Write

                        i.             void GPIO_Write(GPIO_TypeDef* GPIOx, u16 PortVal)

{

  /* Check the parameters */

 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));

 

  GPIOx->ODR = PortVal;

}

                      ii.             先保证无空指针,然后存取相应的寄存器。这就用到了二的解释了。

 

 

三、然后就没了,就这么简单,本文主讲driver与chip硬件的关系。以下问题后续文章:

a)       如何更好的封装driver,包括地址重定向、driver分层保证移植性等。

b)       Driver如何注入os。

c)       Os启动过程如何通过driver初始化硬件。

d)       Uboot如何工作。

e)       如何编译链接生成特定内存要求的uboot。

原创粉丝点击