驱动程序的功能包括:初始化以及释放硬件设备;S3C2440通过IIC总线对DS1621的控制寄存器进行配置;S3C2440读取DS1621寄存器内的温度数据,通过接口函数,将数据从内核空间发送到用户空间。驱动程序设计流程图如图4所示。
图4 驱动程序设计流程图
3.1 设备驱动的主要函数
对于字符设备,Linux内核对这些操作进行了统一的抽象,把它们定义在结构体file-operation中。通常,字符设备提供给应用程序的是一个流控制接口,主要包括open、release、read、ioctl等。
3.2 从器件,设备DS1621的初始化代码
3.3 IIC总线的初始化
对S3C2440的IIC控制器进行配置时需要用到的寄存器有:IICCON、IICSTAT、IICDS、IICADD。
IICCON:IIC总线控制寄存器;IICSTAT:IIC总线控制状态寄存器;HCDS:IIC总线接收/发送数据移位寄存器;IICADD:IIC总线地址寄存器。
1)S3C2440的GPE15为HCSDA,是串行数据线端口,GPE14为IICSCL,是串行时钟线;
2)将IICCON设置为:0xA7,表示传输过程中ACK应答使能,IIC的工作时钟为:HCCLK=fpclk/512,IlC总线中断使能,数据传输的时钟为:Tx clock=IICCLK/(IICCON[3:O]+1),约为400 k/s;
3)将IICSTAT置为:0x10,即使用从器件接收数据模式,数据输出/接收使能。
3.4 主器件从HC总线读数据
对于DS1621的寄存器配置,当通过IIC读取从器件DS1621的数据时,需要切换数据收发的方向,S3C2440先在主机发送数据模式下,向从器件DS1621发送从地址、DS1621内部寄存器的子地址和写信号位,然后在主机接收数据模式下,再次向从器件发送从地址和读信号位,并将子地址内的数据读回,其读数据操作如图5所示。
图5 IIC总线读数据操作
其中S为发送开始标志START,W为写信号位,R为读信号位,A为ACK应答信号,RS为重复开始信号REPEATED START,NA为主机收回数据后发送的NACK信号,P为停止信号STOP。
3.5 主器件向IIC总线写数据
3.6 S3C2440从DS1621获得温度数据,保存在内核空间并传送到用户空间
4 驱动的加载以及测试
应用程序将驱动从内核空间获得的数据保存下来,首先根据传回的DONE比特位判断温度传感器是否正在数据转换的过程中,如果是,则抛弃该数据,并打印数据不可用的信息;如果否,则接下来根据精度位判断小数点后的数据值,并将结果打印出来。
最后将驱动程序编译成模块,可以动态地加载、卸载设备驱动,不用重新启动系统就能查看驱动程序结果,方便了驱动的编写与调试工作。
经过动态编译后,得到目标文件iic.o、1621.o以及应用程序1621_iic_test,将文件下载到S3C2440中,通过#insmodiic.o、#insmod 1621.o加载模块,#./1621_iic_test运行测试程序,如图6所示。
图6 运行测试程序并打印信息
5 结论
本文以ARM920T内核的S3C2440为MCU与数字温度传感器模块DS1621搭建成多点数字测温电路。MCU通过IIC总线与DS1621进行通信,通过编写linux2.4版本下的IIC驱动程序,完成了S3C2440与带有IIC接口的外围芯片的通信,并实现了DS1621的配置和测温工作,正常工作中DS1621的典型温度转化时间为1 s,数据精度为0.5℃,典型的工作电压和电流值仅为3 V、10μA,具备较高的精度,且自身工作功耗小。通过增加DS1621的使用片数,还可扩展为一个低电压、低功耗的多点数字测温系统,可以广泛地应用在各种嵌入式系统中。驱动程序可使用于其他具有IlC接口的外围芯片的工作,也可将驱动应用于其他具有IIC接口的外围设备通信。
一种专为IGBT和MOSFET设计的驱动器摘要:介绍了一种专为IGBT和功率MOSFET设计的电力电子驱动器件——SCALE集成驱动器的性能特点和内部结构 ,给出了SCALE集成驱动器在中频臭氧发生器电源中的应用电路。关键词:驱动电路;IGB
锂电池组的主动电荷平衡电池系统架构多年以来,镍镉电池和随后出现的镍氢电池技术一直占据市场主导地位。锂电池只是最近几年才进入市场。然而,凭借其突出的优越性能,其市场份额迅速攀升。锂电池具有惊人的蓄能容量,但单个电池的电压和电
Cirrus CS4953xx多标准音频处理和后处理解决方 Cirrus公司的CS4953xx是32位音频DSP系列,工作频率150MHz,在片内的ROM中包括所有主流音频处理代码,从而节省了外接存储器和代码存储.不需要昂贵的外接SDRAM存储器就能完成Do