网站导航: 首页 > 设计参考 > 正文 文章搜索
AD7888与S3C2410的SPI接口及Linux下嵌入式驱动的实现[图]
 
文章编号:
081211160413
文章分类: 单片机 ARM
点 击:
...
关 键 词: AD7888,S3C2410,SPI
文章来源:
网络,作者:刘建国 张付祥
摘 要:
串行外围设备接口SPI(serial peripheral interface)总线技术是Motorola公司推出的一种同步串行接口,它允许CPU与TTL移位寄存器、A/D或D/A转换器、实时时钟(RTO)、存储器以及LCD和LED显示驱动器等外围接口器件以串行

3 接口与驱动
    根据S3C2410的SPI特点及AD7888的工作原理确定其接口如图3所示。
 
图3  AD7888与S3C2410的连接图
    为了实现S3C2410和AD7888在嵌入式Linux下的高速A/D转换,还编写了两者接口的驱动程序,该驱动程序功能的实现主要由以下几个函数完成。
(1)Init_SPI()完成SPI的初始化
void Init_SPI(void)
{
    int i;
    rSPPRE0=0x32;
    rSPCON0=0x1e;
    for(i=0;i<10;i++)
        rSPTDAT0=0xff;
    rGPECON |=0x0a800000;
    rGPECON&=(~0x05400000);
    rGPEUP |=0x3800;
    //GPH5----->CS
    rGPHCON |=0x0400;
    rGPHCON&=(~0x0800);
    rGPHUP&=(~0x20);
    rGPHDAT |=0x20;
}
(2)ad_wr()写入要求A/D转换的通道
static ssize_t ad_wr(struCt file *file,const char *bur,size_t count,loft_t *offset)
{
    int ret=0;
    int i=0;
    dbuf=kmalloc(count *sizeof(unsigned char),GFP_KERNEL);
    copy_from_user(dbuf,bur,count);
    for(i=0;i<count;i++)
        ADTXdata[i]=dbuf[i];
    kfree(dbuf);
    return ret;
}
(3)ad_rd()得到A/D转换的结果
statie ssize_t ad_rd(struet file *file,char *bur,size_t count,loft t *offset)
{
    int ret=0;
    int i=0;
    ad_convert();
    ad_convert();
    dbuf=kmalloc(count *sizeof(unsigned char),GFP KERNEL);
    for(i=0;i<count;i++)
        dbuf[i]=ADRXdata[i];
    copy_to_user(bur,dbuf,count);
    kfree(dbuf);
    return ret;
}
(4)ad_convert()实际完成A/D转换
void ad_convert(void)
{
    rGPHDAT&=(~0x20);
    udelay(100000);
    spi_tx_data(ADTXdata[0]);
    ADRXdata[0]=rSPRDATO;
    spi_tx_data(0xff);
    ADRXdata [1 ]=rSPRDATO;
    rGPHDAT |=0x20;
}
(5)spi_tx_data()完成发送数据
void spi_tx_data(unsigned char data)
{
    spi_poll_done();
    rSPTDAT0=data;
    spi_poll_done();
}
(6)spi_poll_done()轮询SPI状态
static void spi_poll_done(void)
{
    while(!(rSPSTA0&0x01));
}
    说明:1)ADTXdata和ADRXdata是unsigned char的全局数组变量,分别负责存放AD7888的控制寄存器数据和A/D转换的结果。2)ad_rd()中ad_convert()调用了2次,第1次调用用于通知要采某通道的数据,第2次调用用于得到该通道A/D转换的结果。这样虽然牺牲了一些转换的速度,但可使应用程序编程更加直观。

4  结论
    应用带SPI接口的串行A/D转换器占用较少的微处理器I/O资源,硬件联接简单、软件易于实现,程序运行效率高。带有SPI接口的串行A/D转换器和ARM微处理器的结合可广泛应用于实现数据采集功能的掌上设备及其他嵌入式的系统,如:医疗仪器、通信设备、抄表设备等领域。

 
相关文章:
s3c2410 Timer工作原理[图]
虚拟SPI时序在TC77与S3C2410通信中的应用[图]
s3c2410 MMU(存储器管理单元)讲解[图]
s3c2410 CACHES,WRITE BUFFER讲解[图]
S3C2410中的脉宽调制定时器(PWM)
S3C2410 中断程序的实现
s3c2410 watchdog详解
s3c2410 中断异常处理[图]
基于ARM9芯片S3C2410a的GPRS数据终端设计
ARM系统中DMA方式在数据采集中的应用[图]
基于s3c2410的ARMer9开发平台的使用
ARM S3C2410硬件手册重点
基于ARM S3C2410与TMS320C6416的接口设计[图]
S3C2410上Jffs2的移植
ARM S3C2410驱动TFT-LCD的研究[图]
MINIGUI在S3C2410开发板的移植
mplayer在S3C2410上的移植
在S3C2410上移植yaffs2文件系统
S3C2410 bootloader(vivi)阅读笔记
s3c2410 LCD图片显示
S3C2410 LCD 驱动程序移植及GUI程序编写[图]
S3C2410X开发总结及心得
U-Boot在S3C2410开发板上的移植
S3C2410初始化
S3C2410通过IIS总线与音频芯片UDA1380进行通信
在S3C2410上移植bluetooth(蓝牙)
S3c2410软件调试总结
S3C2410上触摸屏的应用实例
S3c2410的触摸屏及模数转换
S3C2410的快速启动技术
基于嵌入式linux和s3c2410平台的视频采集
S3c2410 LCD驱动学习心得
s3c2410移植MPlayer到linux2.6

上一页 12
 
最新开源项目
 
 
  查看更多...  
 
本站相关产品   淘宝网店
 




 
  查看更多...  

 

本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
渝ICP备09006681号-4