基于Linux嵌入式系统S3C6410和ADS1298RSPI接口驱动实现.docVIP

基于Linux嵌入式系统S3C6410和ADS1298RSPI接口驱动实现.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于Linux嵌入式系统S3C6410和ADS1298RSPI接口驱动实现

基于Linux嵌入式系统S3C6410和ADS1298RSPI接口驱动实现   【摘要】 本文介绍了高速模数转换芯片ADS1298R与ARM11微控制器S3C6410利用串行外设接口(SPI)进行数据通信的应用方案,给出了两者SPI接口的连接图和Linux操作系统下驱动的具体实现方法,最后编写了应用程序进行测试,论证了该方法的可行性。ADS1298R和S3C6410基于SPI的串行通信方式为嵌入式高速数据采集系统提供了一个解决方案。   【关键词】 SPI驱动 ADS1298R S3C6410 Linux   SPI总线是一种同步串行外设接口, MCU通过它可以与各种外围设备进行数据通信[7]。SPI总线只需3~4根数据线和控制线即可扩展具有SPI接口的各种I/O器件,其硬件功能很强,实现软件相当简单[1]。SPI为全双工通信,显得简单高效,因而A/D转换器与ARM通过SPI接口相结合而组成的基于Linux的数据采集系统显得十分有效。   一、ADS1298R的特性和使用   ADS1298R是美国德州仪器公司推出的一款低功率,8通道,同步采样,24位三角积分模数转换器,此产品具有内置的可编程增益放大器(PGA),内部基准和一个板载振荡器[4]。运行数据速率最高可达32KSPS,时钟频率2.048MHz,具有串行外设接口(SPI),并兼容串口。其引脚定义如图1所示。   如图2所示为ADS1298R的串行接口时序图,串行时钟为数据的输入输出提供了传输时序。当一次数据转换完成后,DRDY变低,表示有数据可进行传输,将片选信号CS拉低,串行时钟开始工作,DRDY电平在SCLK的第一个时钟下降沿升高,在SCLK上升沿往外部控制设备传数据,在下降沿从外部控制设备读数据命令。数据传输阶段CS必须保持低电平,传输一组数据需要216个串行时钟周期。   二、S3C6410概述   S3C6410是三星公司推出的一款采用RISC架构的16/32位微控制器,它基于ARM1176JZF-S内核,高效的八级流水线使其贯通率比以前的ARM内核提高了40%[6]。最高时钟频率可达667MHz。   S3C6410含有2通道的SPI接口,可来实现串行数据的传输。每个SPI通道含有两个独立的32位发送和接收数据寄存器和两个32位移位寄存器,以及两个64字节的接收和发送FIFO,三者在SPI通信中的关系如图3所示。   三、SPI驱动   设备驱动是从操作系统当中提取物理或者虚拟设备的软件,是连接硬件与操作系统的桥梁。SPI驱动程序属于流接口驱动程序,导出标准的流接口函数,由流接口驱动管理器向应用程序提供文件系统,应用程序通过对文件系统的处理来完成对设备的操作[2,3]。   根据SPI接口连接原理,将ADS1298R和S3C6410的SPI接口引脚按图4所示的方式进行连接。   为了实现S3C6410与ADS1298R的数据通信,编写了基于嵌入式Linux操作系统下混杂设备驱动程序,该SPI驱动主要由以下几个函数构成。   (1)spi_init_function()完成SPI的初始化工作。首先将对应I/O口配置成SPI功能模式,然后对S3C6410的SPI寄存器进行如下顺序的配置。   ●将SPI传输模式(CPOLCPHA)配置成与ADS1298R一致。   ●设置串行时钟配置寄存器CLK_CFG。   ●设置SPI FIFO控制寄存器MODE_CFG。   ●开Tx或Rx通道。   ●将片选设置成手动模式,将NSSOUT设置成低并开始传输或接收数据[5]。   static void spi_init_function(void)   {??????   CH_CFG = ((0 6) | (0 5) | (0 4) | (0 3) | (1 2) | (0 1) | (0 0));   CLK_CFG = ((0 9) | (1 8) | (0x4 0));   MODE_CFG = ((0 29) | (0 19) | (0 17) | (1 11) | (1 5)   | (0 2) | (0 1) | (0 0));   SLAVE_SEL = (0x00);   ??????}   (2)spi_write()用于向ADS1298R传递控制命令。S3C6420通过spi_write()函数向ADS1298R传递命令,使其工作在对应状态。传数据时开发送通道,并将CS信号拉低,然后将用户层传递过来的命令通过图3的发送通道传送至ADS1298R,ADS1298R在SCLK的下降沿从DIN将数据读入。   static ssize_t spi_write(

文档评论(0)

317960162 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档