论文研究-基于VxWorks的IIC驱动程序的设计与实现 .pdf

所需积分/C币:11 2019-08-15 14:58:33 327KB .PDF

基于VxWorks的IIC驱动程序的设计与实现,马媛媛,熊刚,在嵌入式系统开发时,为了设计出稳定可靠的驱动程序,不仅需要人们的编程能力,更需要人们了解硬件设备的工作原理以及熟悉整个系
山国技记文在线 2.3IIC总线读操作时序 IIC总线读主要也有两种方式:当前地址读和指定地址读。当前地址读的操作过程如图 2.3(a),其当前地址表示最近一次读或写时的地址,只要芯片带电,此地址一直有效。首 先主机(如:MPC8270CPM)向从机(如: EEPROM)发送开始信号和从机的设备地址和读标 志,然后等待从机的应答信号;当收到应当信号后就可以从当前地址读数据了,接收完数据 后主机就可以发送一个停止信号了。指定地址读的操作过程如图2.3(b),它的读方式和 当前地址读很相似,只是需要多发一个地址信息过去。 图 当前地址读封序 廿山 图 指定地址读时序 3嵌入式 VXWorks驱动程序的框架 在 VXWorks系统中输入/输出设备从宏观上被分为3种类型:字符设备、块设备和网络设 各。依据改备的类型,驱动程序的管理也被划分成三种模块:字符改备驱动程序模块、块设 各驱动程序模块、网络设备驱动程序模块。每个模块对应·种设备类型,而每个模块中不 同的设备包含的功能不一样,用户可以根据自己的需要在 VXWorks下,创建不同的功能模块, 实现系统的高性能和可裁剪怛。 在嵌入式 VXWorks系统中设备的驱动程序是BSP的一部分,完成了对设备初始化、读 写操作和控制等功能。驱动程序是直接控制设备的那部分程序,也是设各上层的·个软件接 口。设各驱动程序的功能是对I/O进行操作,实际上从软件角度来说就是对I/0端口地址进行 读写操作2。只要系统访问设备就会调用驱动。从这一点可以看出,驱动程序不能自动执行, 只能被系统或应用程序调用 在 VxWorks应用程序中,系统访问设备是通过 VxWorks的1/0了系统操作的。对于字符设 山国技记文在线 各和块设备 VXWorks的I0系统提供一些标准的I/接口函数。这样设计的优点是应用程序开 发人员在编写应用程序时不必关心底层设备硬件,也就是通常所说的屏蔽底层硬件。 对」一个字符设备来说驱动程序包含了7种基木I/0操作函数: creat(、 remove( open o、 close()、 read O、 write(和ioct1(。当然有些设备并不支持其中的某些操作, 可以在实现的时候将其省略 驱动程序的设计 IIC设备(属于字符设备)驱动程序按功能可分为5个主要模块:初始化、打开、释放、 读和写模块。在 POWERPC嵌入式系统中,连接在IIC总线上的设备必须按照IC总线时序传 输。IC在读写时有几种时序,但在各种时序中,数据传输的开始和结束操作都是相同的。 所以驱动程序的初始化、退出处理、打开和释放模块都相冋。不同的时序只是读和与方式有 所区别,因此要设计不同的读和写模块。 下面介纽一下基的模块: 4.1IIC总线初始化模块 IIC总线的初始化包括以下几个方面 ①:对IIC通信端口的配置。其中包括 PODRD、 PPARD、 PSORD、 PDIRD; ②:对IC的 DPRAM的配置:先为IC分配一段存储区域,并将首地址存入 IICbase的 parameter ram中;然后在分配的区域里分配存 parameter ram的64 bytes;同时分配 所需的传送BD和接收BD:最后分配了一个传送 buffer,用于缓存需要传送的数据。由 于 DPRAM的空间|分有限,我们可把接收 buffer放在外面中请了; ③:配置IIC的寄存器,其中包括I2MO、I2AD、I2BRG、I2CERI2CMR、I2COM ④:配置CPCR,它是IC传送和接收数据的一个命令,用于初始化传送参数以及接收数据 时的参数,并且控制接收BD的转移以及关闭。 4.2IIC总线的打开及释放模块 IC的打廾和释放做在一个数里,其中包括: 配置IIC寄存器,让ILC总线处于可用状态并让其开始传输数据,等待数据传送完毕。 然后关闭IIC总线,将IC总线释放掉。 其中最重要的寄存器为I2MOD和2C0M。在MPC8270里,I2MOD的偏移地址为0x11860, 它的第七位用来控制C是可用还是不可用,即使用⊥C时将第七位设为1,关闭时将其设 为0。I2C0M的偏移地址为0x1186c,它的第七位用米控制数据传送的开始,第0为用米IIC 是作为 master还是 slave 山国技记文在线 43IIC总线的写模块 系统选择了AT24C256型号的 EEPROM,该芯片有8个管脚,其中5(SDA)、6(SCL)管 脚与处理器上的IC总线管脚相连,其连接电路如图4.3.1,其中PD14、PD15是WPC8270CPM 的管脚。 连接布置图 SCL提供连续的时钟,SDA提供双向的薮据传输。由于总线上只有一个 EERPROM,所以 设备地址线NC1、NC2接地。其固定的设备地址( Device address)如图4.3.2,其中最低 位表示读写标忐,读为1,写为0 1010000|R MSB LSB 图 设备地址 程序中为了满足人量数据写入 EEPROM,我们采用了页面写的方式,只要传送的数据在 传送 BUFFER的范围以内就可以了。由于 DPRAM的大小在存储器里是有限的,所以我们将传 送 BUFFER的大小幣置为256 bytes。当要进行写操作时,先要对总线初始化,然后按照IIC 总线写 EEPROM的时序图,将地址和数据放入相应的 DPRAM中,并配置好相应的B状态,最 后将IIC寄存器的状态配置成传输数据状态。数据就从DPRM的 BUFFER中传入 EEPROM中。 写操作完成后BD的状态恢复成初始的状态。 对 EEPROM写时,要注意分页的处理。 EEPROM每页的大小为64 bytes如果所写的数据 超过页边界且一直写下去,指针将会回到当页的起始地址。所以当数据到达页边界时,要重 新调用一次写操作来执行下一页的数据的写处理 只体的函数实现如: 求 write to eeprom*/ int i2c write to eeprom (uint16 addr, UINT8 *buffer, int len) i2 ini t(0x00);//IIC总线的初始化 2 newly(& state);/传送B( buffer describal)的初始化 山国科技论文在线 //配置需用到的BD i2 doin(& state);//打开IIC总线传送数据,数据传完后释放IIC总线 44IIC总线的读模块 程序中采用了指定地址读的方式进行读操作。由」 DPRAM空间有限,我们的接收 BUFFER 在外部申请的。和写操作相似,宄对总线初始化,然后按照IIC总线读 EEPROM的时序图, 将设备地址、目的地址和读写标志放入相应的 DPRAM中,并配置好相应的BD状态,最后将 IIC寄存器的状态配置成传输数据状态。数据就从 EEPROM读入我们中请的接收 BUFFER里。 读操作完成后BD的状态恢复成初始的状态 在读 EEPROM时,每次读文件的大小不能超过I2 C RXTX LEN(接收 buffer)的大小。如 果超过了,则分批读,直到读完 具体的函数实现妇下: int i2c read (UINT16 addr, UINT8 *buffer, int len) i2 c ini t(0X00);//TIC总线的初始化 i2 c newly(& state);//传送BD( buffer describa1)的初始化 //配置需用到的BD /米 set first send bd*/ 2c doin& &state);//打开llC总线传送数据,数据传完后释放⊥lC总线 结论 以上程序在 POWPC的MPC8270的板子上进行了测试,性能稳定可靠。本文的创新点 是:详细描述了IIC的工作原理以及读写的时序,根据时序快速设计出IC总线设备的驱动程 序,并且对驱动中IC的一些寄存器做了相应的措述。只要仔细分析硬件的工作时序,并结 合驱动程序框架,就可以设计岀性能稳定可靠的驱动程序。 山国科技论文在线 参考文献 [1周启平,张杨.《 VXWorks下设备驱动程序及BSP开发指南》[M.北京:中国电力出版社,206.3. [2邝坚.巛 tornado/ VXWorks入门与提高》[M].北京:科学出版社,204. L3_ Windriver.《 VXWorks bsp开发人员指南》LM.北京:清华大学出版社,2003. 「4张文甲.《IC总线通信屮主机控制器的设计与应用》「J1.网络通讯与安全,2006-12. [5ˉ俞伟.《IC总线控制器IP核设计》J].世界科技研究与发展,2005,2(2):37-40. [6. MPC8280RV, <MPC8280 PowerQUICC II Family Reference Manual> [S] [7AI24C128/256.《

...展开详情
img

关注 私信 TA的资源

上传资源赚积分,得勋章