前面已经向您介绍过D/A转换器MAX504,接下来将由卓跃教育继续为您介绍D/A驱动是如何实现的。 目前嵌入式系统为了更好的适应高效,稳定,可移植的需要,广泛地应用了嵌入式操作系统进行资源管理。Linux因其开放性特点,成为在嵌入式系统中应用最为广泛的操作系统。嵌入式Linux包括RT-linux,µClinux以及ARM处理器使用的ARM-Linux等多种适应不同应用需要的版本。 D/A驱动的实现 考虑到一个嵌入式应用系统中,不仅仅包含A/D,D/A转换,还包括其他,如通信,显示,输入等等功能,所以在实现D/A转换功能时,是基于嵌入式操作系统的,以嵌入式Linux作为操作系统。嵌入式Linux在操作外设时,将外设分为三种类型的设备进行操作,即:字符型、块设备和网络设备。在支持D/A操作时,将D/A设备作为字符型设备,需要编写相应的驱动程序。 驱动程序<s3c2410-da.h>主要包含的内容就是对文件结构体open,ctrl,realse的重定向函数的编写,即定向为s3c2410_da_open,s3c2410_da_ctrl,s3c2410_da_close。这三个函数的作用分别为: 1.s3c2410_da_open:所做的工作非常简单,就是增加模块使用的计数值,通过该值可以体现逻辑上当先打开da端口的任务数。 2.s3c2410_da_close:该函数进行的处理与open刚好相反,将模块使用计数值减一,表明使用结束。 3.s3c2410_da_ctrl:该函数为核心函数,函数定义为 staticints3c2410_exio_ioctl(structinode*inode,structfile*filp,unsignedintcmd,unsignedlongarg),函数功能为:由cmd参数指出D/A操作类型,arg为操作使用的参数,根据cmd和arg,可以根据通道号,对多个D/A通道进行清空操作和数据写入操作。 应用程序进行系统调用后,进入内核态,运行该函数实现对DA的操作,DA_ENABLE,使能s3c2410用于控制Max504的外部I/O,使CS低电平有效,选中D/A。之后,根据cmd指定的操作类型,对不同的D/A设备进行数据传送操作和寄存器清空操作。对D/A的数据写入,这里是通过s3c2410的SPI口进行的,s3c2410的两个SPI口,在D/A应用中,需要操作的SPI寄存器主要是SPICON和SPITDAT,设置SPICON,使s3c2410工作于主模式,将发送给MAX504进行转换的数据写入SPITDAT,SPITDAT为8位的寄存器,而MAX504是10位D/A转换器,所以需要发送两次,并且MAX504接收的16位数据,要求最低两位一定为00。 数据经SPI传送后,MAX504并不立即进行数据转换,而是在CS片选上升沿才开始数据转换,DA_DISABLE的作用就是使s3c2410连接MAX504-CLR管脚的外部I/O端失效,此时D/A开始进行数据转换,系统调用结束。将写好的驱动程序库,进行加载,加载到Linux核中,应用程序就可以像操作文件一样操作D/A设备了。
|