AD7888与S3C2410的SPI接口及Linux下嵌入式驱动的实现

发布者:钱老李最新更新时间:2012-04-01 来源: 工业仪表与自动化装置 关键字:AD7888  S3C2410  SPI接口  Linux 手机看文章 扫描二维码
随时随地手机看文章

  串行外围设备接口SPI(serial peripheral interface)总线技术是Motorola公司推出的一种同步串行接口,它允许CPU与TTL移位寄存器、A/D或D/A转换器、实时时钟 (RTO)、存储器以及LCD和LED显示驱动器等外围接口器件以串行方式进行通讯。

  SPI总线只需3~4根数据线和控制线即可扩展具有SPI接口的各种I/O器件,其硬件功能很强,实现软件相当简单。串行A/D转换器具有电路简单、工作可靠的特点,而ARM芯片被设计用于手持设备以及普通的嵌人式应用的集成系统,将上述两种实用的芯片和SPI总线技术相结合以实现数据采集十分有效。

  1 AD7888的功能与使用

  AD7888是美国模拟器件公司推出的一款高速低功耗12位A/D转换器,采用2.7~5.25 V单电源供电,最大通过率可达到125 kSPS。AD7888的输入采样/保持电路在500 ns内获取一个信号,采用单端采样模式,包含8个单端模拟输入,模拟输入电压从0到VREF。AD7888有2.5 V的片内基准电压,也可以使用外部基准电压,范围从1.2 V到VDD。CMOS制造工艺确保了低功耗,正常工作时为2 mW,掉电状态下为3uW。可以选择多种电源管理模式(包括数据转换后自动处于掉电模式),与多种串行接口兼容(SPI/QSPI/MICOWIRE /DSP)。AD7888可广泛应用于电池供电系统(个人数字助理、医疗仪器、移动通信)、仪表控制系统和高速调制/解调器等领域。该器件采用16脚 SOIC和TSSOP外形封装,外形及引脚定义见图1和表1。

串行接口时序图

图2串行接口时序图

  图2 显示了详细的串行接口时序图,串行时钟提供了转换时序,且控制AD7888转换信息的输入输出。CS初始化数据传送和转换处理。在其下降沿之后的1.5个时钟周期开始采样输入信号,这段时间表示为tACQ(获取时间)。整个转换过程还需要14.5个时钟周期来完成,这段时间表示为tCONVERT(转换时间)。

  从AD7888获取数据的整个转换过程需要16个时钟周期。CS上升沿之后,总线返回高阻状态。如果CS继续保持低电平,则准备新一轮的转换。进行采样的输入通道的选择是提前写入控制寄存器的,因此在转换时,用户必须提前写入以备通道的转换。也就是说,在进行当前转换时,用户就必须提前写入通道的地址以备下次转换使用。

  2 S3C2410的主要功能

  S3C2410是三星公司推出的采用RISC结构的16/32位微处理器。它基于ARM920T内核,采用五级流水线和哈佛结构,最高频率可达 203 MHz,是高性能和低功耗的硬宏单元。ARM920T具有增强ARM体系的MMU(支持WinCE,EPOC 32和Linux)、16kB的指令和数据高速缓存以及高速AMBA总线接口。

  S3C2410被设计用于手持设备以及普通的嵌入式应用的集成系统,为了降低整个系统的成本,S3C2410还包括下面的部分:LCD控制器 (STN&TFT)、NAND Flash引导装入程序、系统管理(片选逻辑和SDRAM控制器)、3通道UART,4通道DMA、4通道PWM时钟、I/O口、RTC、8通道10位 ADC及触摸屏接口、IIC总线接口、IIS总线接口、USB主口和USB设备口、SD主口和多媒体卡接口、2通道SPI和2通道PLL。[page]

  S3C2410有2个SPI口,可以实现串行数据的传输。每个SPI接口各有2个移位寄存器分别负责接收和发送数据。在传送数据期间,发送数据和接收数据是同步进行的,传送的频率可由相应的控制寄存器设定。如果只想发送数据,则接收数据为哑元;如果只想接收数据。则需发送哑元“0xff”。 SPI接口共有4个引脚信号:串行时钟SCK(SPICLK0,1)、主入从出MISO(SPICLK0,1)和主出从入MOSI(SPIMOSI0, 1)数据线、低电平有效引脚/SS(nSSO,1)。

  S3C2410的SPI接口具有如下特点

  (1)兼容SPI协议(ver.2.11);

  (2)有分别用于发送和接收的8位移位寄存器;

  (3)有设定传送频率的8位寄存器;

  (4)有轮询、中断和DMA三种传送模式。

  3 接口与驱动

  根据S3C2410的SPI特点及AD7888的工作原理确定其接口如图3所示。 

AD7888与S3C2410的连接图

图3 AD7888与S3C2410的连接图

外形及引脚定义
图1 AD7888的引脚图
引脚定义

  AD7888的控制寄存器是8位只写寄存器。数据在SCLK的上升沿从DIN引脚载人,同时获取外部模拟量转换的结果。每次数据的传输需要准备16个连续时钟信号。只有在片选信号下降之后的前8个时钟脉冲的上升沿提供的信息装入控制寄存器。[page]

控制器位功能描述

为了实现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 ADTXdata[i]=dbuf[i];

  kfree(dbuf);

  return ret;

  }[page]

(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 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微处理器的结合可广泛应用于实现数据采集功能的掌上设备及其他嵌入式的系统,如:医疗仪器、通信设备、抄表设备等领域。

关键字:AD7888  S3C2410  SPI接口  Linux 引用地址:AD7888与S3C2410的SPI接口及Linux下嵌入式驱动的实现

上一篇:ARM程序设计优化策略与技术
下一篇:mC/OS-II在GPRS终端系统中的应用

推荐阅读最新更新时间:2024-03-16 12:56

#嵌入式Linux最小系统移植# mini2440内核4.0.8移植记录
/*移植内核Linux4.0.8*/ 1.机器码匹配(linux/arch/arm/tools/mach-types) # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number mini2440 MACH_MINI2440 MINI2440 1999 oluan2440 MACH_OLUAN2440 OLUAN2440 1999 MACH_TYPE_xxx 与MACHINE_START中匹配 CONFIG_xxxx 与linux/arch/arm/mach-s3c244
[单片机]
MIKROE推出新开源软硬件解决方案使数百个Click板能够热插拔到Linux开发环境中
2023年11月16日 : MikroElektronika(MIKROE) ,作为一家通过提供基于成熟标准的创新式硬软件产品来大幅缩短开发时间的嵌入式解决方案公司, 今天宣布推出一款基于单线设备的软硬件开源解决方案ClickID,允许Click™板或任何其他mikroBUS™热插拔到运行嵌入式Linux或类似操作系统的开发环境中。 ClickID为嵌入式工具提升了自动化和自诊断水平。 当在嵌入式系统上集成了Click板后,它允许软件识别附加板外围设备配置,使复杂的操作变得简单。ClickID演示库可用于任何MIKROE开发系统。该多功能演示库演示了如何从ClickID读取、写入和处理数据。完整的应用程序代码和现成
[嵌入式]
MIKROE推出新开源软硬件解决方案使数百个Click板能够热插拔到<font color='red'>Linux</font>开发环境中
基于ARM处理器的数据记录分析仪的设计
随着科学技术的发展和我国工业自动化程度的提高,大量的自动化设备和仪表已经广泛应用于各大厂矿的工业现场。这些设备和仪表大多具有数据采集,传送,联网的能力,然而在现场应用中,往往需要对各个设备的相关数据进行实时记录与及时分析。本文所设计的系统就是为了满足这样的需求。本系统以S3C2410为核心,采用linux实时操作系统,结合嵌入式设备与网络技术的优点,有可连接设备数量多,速度快,功能多及可扩展性强等优点,可完成大量电力设备的集中监控,显着提高用户自动化系统的可靠性,节约大量的人力物力。 1 系统的总体结构 系统的组成部分和主要功能如下: 1)上位机部分,主要负责远程的信息配置与数据采集,记录,与处理。 2)数据记录分析仪部分
[单片机]
基于ARM处理器的数据记录分析仪的设计
从12大创新看Linux如何改变世界(一)
1、安卓手机和平板电脑的源头就是Linux。   2、你的数字录影机TiVo由Linux驱动!   3、Linux驱动着全球绝大部分超级计算机。   4、Linux软件操控着日本的高速铁路。
[模拟电子]
从12大创新看<font color='red'>Linux</font>如何改变世界(一)
linux内核驱动 第一个led的 程序思想过程
linux 内核写led的驱动如图所示: 按照图 的方式我们发现我们需要写两个部分 一个是APP,一个是底层的驱动。其中APP是通过C库和系统层最后调用到底层的驱动的。 linux系统首先会把底层驱动以文件的形式挂载到dev文件夹内,然后APP利用文件写或者读的方式对底层的代码进行操作。 所以程序会分为两部分1. 写驱动并且挂载到linux内核2. 写APP程序去按照文件的方式调用linux挂载的内核。 1. 首先是写驱动的程序。 主要的程序有: static int first_drv_open(struct inode *inode, struct file *file) 这个是led初始化的函数 其中
[单片机]
<font color='red'>linux</font>内核驱动 第一个led的 程序思想过程
Linux 内核 6.7 正式版发布:Bcachefs 文件系统上线,初步支持英特尔 Lunar Lake
1 月 8 日消息,Linus Torvalds 宣布 Linux Kernel 6.7 稳定版本发布,引入了多项新功能和改进。 据介绍,该版本拥有超过 1.7 万个非合并提交,以及 1000 多个合并提交,是迄今为止 Linux 最大的内核版本之一。IT之家汇总 Linux Kernel 6.7 亮点新特性: 放弃了对 Intel Itanium IA-64 架构的支持 Bcachefs 文件系统(实验性) x86-64 内核支持选择启用或禁用 32 位模拟。 默认启用 Intel Meteor Lake 图形支持,同时还引入了针对 Intel Xe2 Lunar Lake 图形的支持。 为 Nouveau 开源图形驱
[嵌入式]
松下与NEC将推出多款Linux LiMo手机
据无线Linux的创始公司LiMo在巴塞罗那的移动世界大会上宣布,NEC和松下(Panasonic)将推出9款新手机,操作系统采用该公司的开源LiMo系统。 自从谷歌和苹果在过去的两年中先后进入手机市场以来,手机市场的重点转向软件开发上,越来越多的手机制造商和运营商在寻求类似于LiMo的开源系统来削减生产成本。 手机软件平台市场过去一直被诺基亚的Symbian操作系统所垄断,不过该市场在去年被黑莓制造商RIM与苹果不断侵蚀。 计算机操作系统Linux在手机的应用上收效微弱,但LiMo平台却取得了不小的成绩,谷歌的Android平台也是采用的Linux内核。Linux是开源计算机操作系统最流行的版本,免
[手机便携]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved