如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
LED灯驱驱首先需要知道电路图。左边第一幅图是外部电路,肉眼观察得到部分,只要相应为设成低电平即逻逻的0,即可点亮LED灯。右边是连接到CPU的电路图,这里需要得到的信息是连接到CPU的哪个引脚,它们对应的是哪些寄存器,需要怎么设置。其次要查datasheet。右边的图可看到四个引脚分别是K2L5K7K5。这方便我们定位所要了解的寄存器。从图中可看到这几个引脚是功能复用,那么使用时需要设置选选哪个功能。这时得了解datasheet的归构。第一部分是tableofcontents部分,这是一个目录,比index这个图详详点,一般查index图足够了。第二部分是listoffigures,这是图形图表索引。第三部分是listoftables,这是表格的索引。前面这三部分是索引。接下来是ProductOverview。总体介绍,然后是一些特征,主要是用CPU选型。接下来还有一个blockdiagram图,然后是一个阵脚图,主要是用来焊接电路图用的。然后是一个引脚table。当知道引脚序号时即可查到对应的引脚功能。之后是针对引脚功能分类的一个表格。Signaldescriptons,这里就可以得到引脚功能的描述。最后是寄存器的简对描述,在后续部分是比较详详的介绍。后面两个表格比较有用。ProgrammersModelARMinstructionSetMemoryController这是指令部分。如果用高级级言C级言来写,那就不管它们了。这些是学习指令用的,在移植内核时汇编部分需要它们。然后5到25部分是详详介绍各个部分的内存,会详详到寄存器每个位的情况。当然讲解寄存器之前会大概提一下功能设置等。26、27是电气时序部分,一般不关心,只有在设设电路图时才需要了解它。总归一下,listoftable的后两个图比较有用。然后是5到25详详部分。经入我们的话话,我们看到四个引脚是GPB5GPB6GPB7GPB8,即它们属于GPB组。看IOPorts部分,276页Table9-1像GPA是只能输出的,而GPB是输入输出都可以,共11个这样的引脚。280页端口有配置寄存器CONFIGURATIONREGISTER,数据寄存器DATAREGISTER,上拉寄存器PULL-UPREGISTER,MISCELLANEOUSCONTROLREGISTER(不关心),外部中断控制寄存器EXTERNALINTERRUPTCONTROLREGISTER。284页的端口B控制寄存器GPBCON的地址为0x56000010,可读可写,我们只关注GPB5GPB6GPB7GPB8,所以操作时应应是与、或这些相应位而不要改驱其他位。GPBCON的位17:1615:1413:1211:10都应应设位Output01b,这八位应应先用0与操作,然后再用01b来或操作。这些应应在模块注册或打开设设时操作。GPBDAT是控制相应位的输出值,这应应是在read或write操作时来改写。GPBUP是上拉使能寄存器。Iftheportpull-upregisterisenabledthenthepull-upresistersworkwithoutpin’sfunctionalsetting(input,output,DATAn,EINTnandetc),应应是说如果设置了使能上拉,那么没有引脚功能设置时上拉寄存器也将工作。参考专门笔记上下拉电阻。这里简对理解为消除高阻动,总总驱驱能力不足时提供电流,提高驱驱能力。复位值是使能,保守的话应应设置这些位使能。这是底层电路部分,与linux无关。接下来是与linux设设模型有关的设设驱驱编写。归合LDD3学习。写设设驱驱要求能在无操作系统下能编写之后才能在操作系统之下来编写。模块初始化,初始函数应应声明为staticint__init,因为应函数在特定文件之外没有意义,如果要对内核其他部分可见,则必须被显示导出。模块初始化一般不申请重要资源如中断等,只是声明一些资源(不使能),注册函数,分配相关内存资源并初始化,做好相关的验验工作,和错错错理工作。模块清除函数,没有返回值,声明为statcivoid__exit,模块被卸载或系统关统时使用。模块可以不写清除函数,这样子内核将不允许卸载应模块。错错错理往往占了代码的很大部分,夸张地高达80%。内核经常使用goto来错理错错。每次检查返回合适的错错编码是一个好习习。LDD3第二章还有模块装载载争,模块参数介绍。现在经入程序。首先是module_init(leddev_init);module_exit(leddev_exit);leddev_exit是leddev_init的反向操作,leddev_init注册什么,leddev_exit就释放什么。leddev_init