碧波液压网 欢迎你,游客。 登录 注册

基于ARM嵌入式系统的SPI驱动程序设计

版权信息:站内文章仅供学习与参考,如触及到您的版权信息,请与本站联系。

  嵌入式系统已被广泛应用于国防电子、数字家庭、工业自动化、汽车电子等多种领域。在嵌入式开发过程中,许多系统通常使用串口驱动来满足通信要求,但在实际应用中,使用SPI通信方式会更加高效和快捷。SPI接口是一种高速、高效的串行接口技术,因而SPI设备在数据通信应用中十分方便。本文基于ARM9芯片的S3C2440和Linux操作系统,设计了一种SPI驱动程序,该驱动程序功能可靠灵活、易于移植,可应用于多种嵌入式平台,实现arm与设备之间的通信。

  1 硬件说明

  1.1 S3C2440开发平台

  采用三星公司的SoC芯片S3C2440[4]作为核心处理器,主频为400 MHz,并与64 MB SDRAM和64 MB NAND Flash共同组成核心部分。此外,该平台也为用户提供了大量的通信、显示、调试以及I/O接口。为满足设计需要,将Linux2.6.21版内核移植于该平台上。

  1.2 SPI硬件模块

  S3C2440具有两个SPI,每个SPI具有两个8位移位寄存器用于独立地发送和接收数据,并兼容SPI ver.2.11协议,支持8位逻辑预分频,系统可用polling、中断、DMA三种方式判断SPI发送及接收状态。此SPI模块共包含以下信号线[5]:

  (1)SCK:数据同步时钟信号,由主设备驱动,向从设备输出,使得从设备按照同步时钟的步调来接收或发送数据。

  (2)nCS(由用户指定GPIO):从设备选择信号线(Slave Select,SS)由主设备发出,用来选择激活某个从设备,低电平有效。

  (3)MISO(SPIMISO0):主入从出信号线,表示该信号在主设备中作为输入,在从设备中作为输出。

  (4)MOSI(SPIMOSI0):主出从入信号线,表示该信号在主设备中作为输出,在从设备中作为输入。

  (5)/SS(nSS):多主错误检测。

  2 Linux下的SPI设备驱动程序设计

  Linux设备驱动在Linux内核中扮演着重要的角色。它可使某些特定硬件响应一个定义良好的内部编程接口,这些接口完全隐藏了设备工作的细节。用户操作可通过一组标准化的调用来执行,这些调用在形式上完全独立于特定的驱动程序,而将这些调用映射到实际硬件设备的特有操作上,则是驱动程序的任务[6]。本设计的SPI驱动主要定义了初始化、读和写三个操作。其中初始化操作用于驱动程序第一次加载到内核运行时,对一些内核机制及存储器进行初始化。写操作负责将用户数据拷贝至内核缓冲区,控制本地主SPI发送数据至从SPI寄存器中。读操作将按照用户要求读取的字节数,连续读取本地主SPI中接收到的数据,并将其拷贝至用户空间。驱动程序将采用中断的方式通知系统SPI数据是否发送完毕,即当SPI硬件模块每发送完毕一个数据,都会通过中断线向系统发起中断,系统响应中断后,驱动程序将调用中断处理例程。

你没有登陆,无法阅读全文内容

您需要 登录 才可以查看,没有帐号? 立即注册

标签:
点赞   收藏

相关文章

发表评论

请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。

用户名: 验证码:

最新评论