摘 要 在对SPI接口协议进行分析的基础上,提出了利用ARM的GPIO口来模拟SPI接口的通用实现方法。根据串行D/A芯片TLV5637的时序特性和操作要求,利用模拟的SPI接口方法,实现了对TLV5637的访问。
关键词 模拟SPI ARM TLV5637
引 言
SPI(Serial Peripheral Interface)是Motorola公司推出的一种同步串行外围接口。该接口由于协议实现简单,传输速度快等优点,已被广泛应用于EEPROM、 Flash、实时时钟、A/D转换器以及D/A转换器等芯片的读写。本文根据实际工程中的应用需求,用ARM芯片LPC2378的GPIO来模拟SPI接口,以实现对外围SPI接口器件的操作。其中,D/A转换是系统中的一个功能单元,利用GPIO模拟SPI接口的思想和方法,实现对串行D/A芯片 TLV5367的访问,以满足工程要求。
1 SPI串口通信格式
SPI接口协议要求接口设备按主一从方式进行配置,总线上可以连接多个可作为主机的控制器、具备SPI接口的输入/输出设备,但同一时间内总线上只能允许一个设备充当主机。通常,SPI接口包括4种信号:
MISO串行数据输入,也称主入从出。
MOSI 串行数据输出,也称主出从入。
SCK 串行时钟,由主机提供给从机。
SS 从机片选信号。
在时钟SCK的作用下,SPI主机发送寄存器的内容顺序移位输出给SPI从机。同时,SPI从机也将其数据寄存器的内容移位输出给主机。图1为其工作原理示意图。
2 基于ARM的SPI接口模拟
LPC2378是Philips公司生产的ARM7系列芯片。该芯片是一款支持实时仿真和嵌入式跟踪的16/32位 ARM7TDMI-S微控制器,具有三级流水线指令处理结构。LPC2378具有5个32位的GPIO端口。对GPIO口的控制可以通过操作以下GPIO 寄存器来实现:
FIODIR 快速GPIO端口方向控制寄存器;
FIOMASK 快速GPIO端口屏蔽寄存器;
FIOPIN 快速GPIO端口状态寄存器;
FIOSET 快速GPIO端口置位寄存器;
FIOCLR 快速GPIO端口清零寄存器。
通常,SPI接口的串行时钟SCK按时序可以分为两种:在SCK上升沿采样数据和在SCK的下降沿采样数据。由于SPI接口定义的灵活性,导致了各个厂商生产的具有SPI接口的芯片在工作时序上不一致。为了提高程序的通用性,用条件编译的方法来设置。同时为了增强程序的规整性,作如下设定:P2.0输出 SS从机使能信号;P2.1输出SCK时钟信号;P2.2对应MISO信号;P2.3对应MOSI信号。图2所示为GPIO模拟SPI接口发送一个字符数据的程序流程。发送数据前需将从机使能信号设置为有效,而且一直保持到数据发送完毕。由于是在SCK上升沿数据有效,因此在发送每个数据位前需将SCK设为低电平,然后根据数据最高位来设定MOSI端口的输出电平,最后再将SCK设置为高电平。SPI从机设备便在SCK的上升沿处对MOSI信号线采样,从而读取该数据位电平。在SCK下降沿采样数据,只需将SCK设置高低电平的次序互换即可。