SPI(Serial Peripheral Interface)是Motorola公司推出的同步串行外设接口,允许单片机与多个厂家生产的带有标准SPI接口的外围设备直接连接,以串行方式交换信息。SPI使用4条线:串行时钟SCK、主器件输入/从器件输出数据线MISO、主器件输出/从器件输入数据线MOSI、从器件选择线片选端。SPI总总线使用同步协议传送数据,接收或发送数据时由主机产生的时钟信号控制。SPI接口可以连接多个SPI芯片或装置,主机通过选择它们的片选来分时访问不同的芯片。
SPI典型应用是单主系统,一台主器件,从器件通常是外围接口器件,如存储器、I/O接口、A-D、D-A、键盘、日历/时钟和显示驱动等慢速外设器件通信。扩展多个外围器件时,SPI无法通过数据线译码选择,故外围器件都有片选端。SPI总线信号线基本连接关系如图6-46所示。SPI总线系统有以下几种形式:一个主机和多个从机、多个从机相互连接构成多主机系统(分布式系统)、一个主机与一个或几个I/O设备构成的系统等。
图6-46 SPI总线信号线基本连接关系
在大多数应用场合,可使用一个微控制器作为主控机来控制数据的传送,并向一个或几个外围器件传送数据。从机只有在主机发命令时才能接收或发送数据。当一个主机通过SPI与多个芯片相连时,必须使用每个芯片的片选,这可通过MCU的I/O接口输出线来实现。SPI外围串行扩展连接如图6-47所示。
在SPI系统中,主器件单片机在启动一次传送时,便产生8个时钟,传送给接口芯片作为同步时钟,控制数据的输入和输出。传送格式是高位(MSB)在前,低位(LSB)在后。输出数据的变化以及输入数据时的采样,都取决于SCK,但对于不同的外围芯片,可能是SCK的上升沿起作用,也可能是SCK的下降沿起作用。SPI有较高的数据传输速度,最高可达1.05Mbit/s。
例6-11:设计单片机与SPI串行A-D转换器TLC2543的SPI接口。
(1)TLC2543芯片简介
TLC2543是美国TI公司的一款集8位、10位、12位为一体的可选输出二进制位数的11通道串行SPI接口的开关电容逐次逼近CMOS型A-D转换芯片,一路转换时间为10μs。片内有一个14路模拟开关,用来选择11路模拟输入,并对3路内部测试电压中的1路进行采样。供电电压VCC为4.5~5.5V,参考电压VREF+最大到VCC,VREF-接到地,最大的输入电压取决于正参考电压与负参考电压的差值。CLK最大频率为4.1MHz。
TLC2543的外部输入4种信号为:数据输入SDI、片选、I/O时钟CLK、模拟量输入通道AINn(n=0~10)。输出信号为:转换结束EOC、数据输出SDO。
TLC2543工作原理:片选信号由高变为低时,允许SDI、CLK、模拟量AINn(n=0~10)信号输入(在使用4.1MHz的I/O时钟时,外部输入设备的输出阻抗应小于或等于30Ω)和SDO数据信号输出,EOC在转换过程中一直为高电平,转换结束变为低电平。片选信号由低到高时,禁止SDI、CLK和模拟量AINn(n=0~10)信号输入。
DIN:串行数据输入端。最先输入的4位用来选择模拟量输入通道。数据传送时最高位在前,每一个I/O时钟的上升沿送入一位数据,最先4位数据输入到地址寄存器后,接下来的4位用来设置TLC2543的工作方式。
DOUT:串行数据输出端。输出的数据有3种长度可供选择:8位、12位和16位,数据输出的顺序可以在TLC2543的工作方式中设定。数据输出引脚DOUT为高电平时呈高阻状态;为低电平时,DOUT引脚输出有效。
TCL2543的每次转换都必须给其写入命令字,其格式见表6-16。以便确定下一次转换用哪个通道,下次转换结果用多少位输出,转换结果输出是低位在前还是高位在前。注意:初始化时,必须将片选信号由高拉低才能进行数据输出/输入。
图6-47 SPI外围串行扩展连接图
表6-16 数据输入格式
1)D7~D4:数据地址位,用于选择输入通道与测试电压选择或从3个内部自测电压中选择一个,以对转换器进行校准或者选择软件掉电方式,见表6-17。
表6-17 数据输入格式高4位设置
2)D3、D2:输出数据长度(位数)。D3D2取01选8位,x0(x为0或1)选12位,11选16位。转换器的分辨率为12位,内部转换结果总是12位。选择12位数据长度时,所有的位都被输出。选择8位数据长度时,低4位被截去。选择16位时,在转换结果的低位增加了4个被置为0的填充位。
3)D1:输出数据格式选择位,0表示选高位在前,从DOUT脚输出;1表示选低位在前,从DOUT脚输出。
4)D0:输出极性选择位,用于设置A-D转换结果是以单极性还是双极性二进制数补码表示。0表示选单极性(A-D转换结果以二进制数形式表示,电压范围为0~VREF+),1表示选双极性(A-D转换结果以二进制数补码形式表示,电压范围为VREF-~VREF+)。
由上可得到单片机与TLC2543的SPI接口电路如图6-48所示。单片机的P1.0、P1.1和P1.2引脚分别与TLC2543的CLK、和SDI引脚相连;P1.4与转换结束信号EOC相连,P1.3与输出数据端SDO相连,单片机将命令字通过P1.2输入到TLC2543的输入寄存器中。
(2)软件设计分析
根据TLC2543数据输入命令字格式和图6-48可知:输出选择极性为单极性,输出数据格式为高位在前,输出数据长度为12位,通道0~通道10的控制字为00H~A0H,选择1通道(AIN1)进行一次A-D模数转换,A-D转换结果共12位,分两次读入。先读入TLC2543中的8位转换结果到单片机中,同时写入下一次转换的命令,然后再读入4位的转换结果到单片机中。
图6-48 单片机与TLC2543的 SPI接口电路
从输出格式知:命令字=10H或18H。
由于TLC2543时钟频率f=2.5MHz,则时钟周期=1/f=1/2.5MHz=4μs,取单片机晶振频率为6MHz,则机器周期为2μs,则1个NOP指令2μs。
程序清单如下:
ORG 0000H
CLK BIT P1.0;设计P1.0连接TLC2543时钟端
CS BIT P1.1;设计P1.1连接TLC2543片选端
DIN BIT P1.2;设计P1.2连接TLC2543数据输入端
DOUT BIT P1.3;设计P1.3连接TLC2543数据输出端
MAIN:ACALL ADCONV;调用A-D转换,SPI传输子程序
LCALL DATA1;调用显示格式转换子程序
ACALL DISPLAY;调用数码管显示子程序
AJMP MAIN
ADCONV:MOV R0,#ADDR
MOV R1,#10H;选择通道1单极性高位在前;12位输出
ACALL READAD;加电后空转换一次
MOV R1,#10H;有效转换开始
ACALL READAD
MOV A,R2;保存转换结果
MOV @R0,A(www.xing528.com)
INC R0
MOV A,R3
MOV @R0,A
RET
;READAD为TLC2543AD转换子程序,R1中的内容为控制字,
;转换值的高8位保存在R2中,低4位保存在R3中
READAD:CLR CLK;置CLK为低
SETB CS;置CS为高
CLR CS
NOP;置CS为低,延时大于1.425μs
NOP;转换开始
MOV R4,#08
MOV A,R1;控制字装入A中
ADLOP1:MOV C,DOUT;转换值移出一位进入C
RLC A;值从A的最低位进入,控制字最高位移入C
MOV DIN,C;控制字的1位移入TLC2543
SETB CLK
NOP
NOP
CLR CLK
DJNZ R4,ADLOP1;8位是否移完?没有,转ADLOP1
MOV R2,A;转换值的高8位装入R2
MOV A,#0
MOV R4,#04;读取低4位转换值
ADLOP2:MOV C,DOUT
RLC A
SETB CLK
NOP
NOP
CLR CLK
DJNZ R4,ADLOP2
MOV R3,A;低4位转换值装入R3
SETB CS;片选置1
RET
DATA1:MOV 79H,#11H;取“灭”的字形码索引值
MOV R0,#ADDR;A-D转换值存储单元地址送R0
MOV A,@R0;读取转换值12位中高8位
ANL A,#0F0H;取出转换值高4位送显示缓冲单元7AH
SWAP A
MOV 7AH,A
MOV A,@R0;取出转换值中4位送显示缓冲单元7BH
ANL A,#0FH
MOV 7BH,A
INC R0;A-D转换值存储单元地址加1
MOV A,@R0;读取转换值12位中低4位
ANL A,#0FH
MOV 7CH,A;低4位送显示缓冲单元7CH
RET
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。