基于MPC8270的SPI驱动设计

2017-05-30 16:22张曼缑丽敏
科技风 2017年9期

张曼 缑丽敏

摘 要:介绍了嵌入式PowerPC处理器MPC8270的体系架构和串行外设接口(SPI)控制器的工作原理。基于VxWorks和MPC8270嵌入式系统开发平台,详细介绍了MPC8270处理器芯片自带的SPI驱动程序的设计实现过程,描述了SPI的初始化、中断处理以及数据发送、数据接收等关键技术。基于MPC8270的SPI设计具有较强的实用性。

关键词:MPC8270;SPI;VxWorks操作系统;串行外设接口

MPC8270是广泛应用于通信和网络系统的一款通用处理器,具有强大的接口能力,其中自带的SPI接口可以应用于EEPROM、FLASH、实时时钟、AD转换器,还有数字信号处理器和数字信号解码器之间。本文在基于VxWorks操作系统的嵌入式处理器模块上实现了通过SPI与AD转换器通信,采集AD信号的功能。

本文基于VxWorks操作系统的SPI驱动开发,使得MPC8270上的SPI做为主设备,与SPI从设备AD7940进行AD模拟量数据采集。

1 MPC8270处理器SPI硬件功能模型

MPC8270处理器的SPI硬件功能模型如图1所示:

从硬件功能模型可以看出,SPI硬件接口通过配置的外部复用管脚收发SPI信号,通过SPI BRG时钟从MPC8270处理器获取时钟,当接收数据时,交换寄存器将从SPI总线上将接收的数据获取出来,放入接收寄存器中,当发送数据时,将发送数据寄存器中的数放入交换寄存器中,通过交换寄存器送给SPI总线,发送出去。发送寄存器和接收寄存器通过MPC8270处理器内的外部总线连接到通讯处理器内核(CP)中。SPI总线的工作状态包括发送接收数据长度、时钟相位和极性设置等通过SPI模式寄存器进行设置,SPI模式寄存器通过60x总线与CPU内核连接。

2 SPI驱动的设计与实现

2.1 SPI初始化

SPI初始化的具体步骤如下:

1)分配管脚,配置PD16、PD17、PD18、PD19管脚对应的PPAR寄存器对应位为1,PDIR寄存器对应位为0,PSOR对应位为1。

2)分配并初始化SPI操作所需的内存空间。Internal data ram memory map定义了内部RAM空间,SPI parameter ram 的参数定义在这部分空间内,接收和发送BD的数据结构也定义在这部分空间内,而BD的buffer pointer不定义在这部分空间内,使用的memory空间。本項目中SPI parameter ram对应的internal Data Ram地址为0xF00089FC,在此地址上配置SPI parameter ram对应的地址为0xf0000100,接收缓存描述符(Receive Buffer Descriptor,RxBD)表的基地址和指针配置地址为0xf0000140,发送缓存描述符(Transmit Buffer Descriptor,TxBD)表的基地址和指针配置地址为0xf0000148。BD的个数 为1,接收缓存描述符配置的buffer pointer大小为32字节,发送缓存描述符配置的buffer pointer大小为32字节。

3)初始化SPI模式配置寄存器。SPI模式配置寄存器会配置SPI波特率、SPI传输数据长度、SPI主/从模式、SPI数据方向(按照从高字节到低字节,或者低字节到高字节顺序发送)

4)初始化接收发送BD。初始化接收和发送BD时,需要将最后一个BD描述符的控制状态字设置为0x2000表示这是BD table中的最后一个BD。

5)初始化SPI parameter ram。在初始化SPI parameter ram时,需要将接收BD基地址和指针设置为0xf0000140,再将发送BD基地址和指针设置为0xf0000148。

6)设置SPI Event Register和SPI Mask Register,清中断状态寄存器。

7)设置SPI mode 寄存器,使能SPI操作。

2.2 SPI的接收处理实现

SPI的接收处理是首先初始化RxBD和TxBD,虽然是接收操作,但是对于MPC8270 SPI来说接收数据的同时,会发送数据;发送数据和接收数据是在一个时钟周期不同的沿完成的,因此,接收数据时也要初始化发送BD。设置接收BD的控制状态字为READY,发送BD的控制状态字为EMPTY。然后,设置SPISEL信号为零;之后,设置SPI mode寄存器为发送数据开始。

通过查询SPI Event寄存器和SPI Mask寄存器判断接收是否结束,并查询接收缓冲区是否正确。如果接收正确设置SPISEL信号为1,并从接收BD中读取有效数据。如果出错则返回错误。

SPI接收处理实现如下。

2.3 SPI的发送处理实现

SPI的发送处理是首先初始化RxBD和TxBD,将需要发送的数据拷贝到发送BD的buffer中,设置发送BD的控制状态字为EMPTY,接收BD的控制状态字为READY。然后,设置SPISEL信号为零;之后,设置SPI mode寄存器为发送数据开始。

通过查询SPI Event寄存器和SPI Mask寄存器判断发送是否结束,并查询发送数据是否正确。如果发送正确设置SPISEL信号为1。如果出错则返回错误。

SPI发送实现处理实现如下。

2.4 中断处理

MPC8270 SPI在连续收发数据时,每完成一次发送或者接收数据后,都需要清中断状态标志寄存器SPI Event寄存器和SPI Mask寄存器,否则连续传输时,会出现错误。

3 性能测试结果分析

通过测试设备对SPI进行测试,在25M波特率下,连续收发数据3600s,收发数据正确,丢包率为0。在12.5M波特率下,连续收发数据3600s,收发数据正确,丢包率为0。在6.25M波特率下,连续收发数据3600s,收发数据正常,丢包率为0。通过长时间的数据收发测试,验证了SPI驱动程序的稳定性和可靠性。

4 结语

通过性能测试说明,利用低功耗,通讯处理能力强的MPC8270的SPI接口,可以比较容易的实现SPI通讯处理。本文介绍了MPC8270内部的SPI的通讯原理及驱动程序设计方法,对其他的设计应用有一定的借鉴作用。

参考文献:

[1] Freescale.MPC8280Power QUICCII Family Reference Manual[EB/OL].[2013-03-18].http://www.freescale.com.

[2] Freescale.PowerQUICCⅡ Family Hardware Specifications[EB/OL].[2013-03-25].http://www.freescale.com.

作者简介:

张曼(1982-),女,陕西西安人,硕士,工程师,嵌入式计算机软硬件开发;

缑丽敏(1986-),女,陕西西安人,硕士,工程师,研究方向为嵌入式计算机设计等。