关闭

何为driver

413人阅读 评论(0) 收藏 举报
分类:

一、硬件角度看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。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:54985次
    • 积分:1263
    • 等级:
    • 排名:千里之外
    • 原创:79篇
    • 转载:18篇
    • 译文:0篇
    • 评论:18条
    最新评论