版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十章SPI与模拟量转换主要内容SPI的基本工作原理GP32的SPI模块编程基础A/D和D/A转换的基本问题MC908GP32内部A/D转换模块GP32MCUA/D转换编程实例*利用SPI进行高位扩A/D展接口*利用SPI进行高位扩D/A展接口*扩展实现D/A转换*常用传感器及采样电路简介
《嵌入式技术基础与实践》10.1SPI的基本工作原理10.1.1SPI的主要特性
①全双工。 ②主、从工作方式。 ③发送和接收的数据寄存器相互独立从而实现双缓存操作。 ④主机可以设定4种工作频率(最大可达总线频率的二分之一)。 ⑤从机最大工作频率等于总线频率。 ⑥发送结束、接收结束、工作方式错误和溢出错误四种中断标志。 ⑦一个主控MCU和几个从控MCU相互连接。 ⑧几个MCU相互连接构成一个多主机系统。 ⑨一个主控MCU和一个或多个从属外设相互连接。10.1.2SPI的数据传输
利用SPI进行MCU之间的数据传输时,主机的程序控制着数据传输,从机的程序配合主机工作,完成传输过程。图10-1是SPI的主-从连接示意图。具体工作过程:
从主机CPU发出启动传输信号开始,此时要传送的数据装入8位移位寄存器,同时产生8个时钟信号从SPSCK引脚依次送出;在SPSCK信号的控制下,主机中8位移位寄存器中的数据依次从MOSI引脚送出,到从机的MOSI引脚送入它的8位移位寄存器;在此过程中,从机的数据也通过MISO引脚到主机中。图10-1SPI全双工主-从连接
移位寄存器移位寄存器MISOMISO主MCUMOSI
MOSI波特率发生器从MCUSPSCKSPSCK10.1.3SPI模块的时序图10-3CPHA=0,CPOL=1时的数据/时钟时序图
SPSCK周期CPOL=1MOSIFROMMASTERMISOFROMSLAVE信号捕捉点10.1.3SPI模块的时序图10-4CPHA=1,CPOL=0时的数据/时钟时序图SPSCK周期CPOL=0MOSIFROMMASTERMISOFROMSLAVE信号捕捉点10.1.3SPI模块的时序图10-5CPHA=1,CPOL=1时的数据/时钟时序图
SPSCK周期CPOL=1MOSIFROMASTERMISOFROMSLAVE信号捕捉点10.2.2SPI模块的寄存器
SPI模块有3个寄存器:数据寄存器SPDR,控制寄存器SPCR,状态和控制寄存器SPSCR。(1)数据寄存器SPDR(SPIDataRegister)
SPDR由两个独立的数据寄存器组成:只能写入的发送数据寄存器和只能读出的接收数据寄存器,它们共用一个地址$0012。写入时,为要发送的8位数据,记为:T7~T0;读出时,为接收的8位数据,记为:R7~R0。(2)控制寄存器SPCR(SPIControlRegister)
SPCR复位时写一次,以后不再对其写入,不再更改对SPI的设置,地址是$0010,各位定义:SPI接收中断允许位
DMA选择位
SPI发送中断允许位
SPI允许位
SPI线或模式位
时钟相位位
时钟极性选择位
SPI主机位
数据位D7D6D5D4D3D2D1D0定义SPRIEDMASSPMSTRCPOLCPHASPWOMSPESPTIE复位001010003.SPI状态和控制寄存器SPSCR(SPIStatusandControlRegister)
SPSCR的地址:$0011,定义为:SPI的波特率=CGMOUT/(2xBD)。上式中:CGMOUT为时钟产生模块CGM的基准时钟输出。BD是分频系数,由SPR1、SPR0位决定:SPR1、SPR0=00011011BD=2832128SPI接收器满标志位
错误中断允许位
SPI波特率选择位
模式错误标志允许位
SPI发送器空标志位
模式错误标志位
溢出标志位数据位D7D6D5D4D3D2D1D0定义SPRFERRIEOVRFMODFSPTEMODFENSPR1SPR0复位0000100010.3A/D和D/A转换的基本问题1A/D转换
A/D转换模块(AnalogToDigitalConvertModule),即模数转换,是将电压信号转换为对应的数字信号。 进行A/D转换的基本问题:(1)采样精度数字量变化一个最小量时模拟信号的变化量,即采样位数。(2)采样速率完成一次A/D采样所要花费的时间。(3)滤波对采样的数据进行筛选去掉误差较大的毛刺。(4)物理量回归把A/D采样值与实际物理量对应起来。
2D/A转换(1)D/A转换器的转换精度有两种衡量方法
分辨率:D/A转换器在理论上可达到的精度。其定义,电路所能分辨的最小输出电压VLSB(输入的n位数字代码最低有效位LSB为1,其余都为0)与最大输出电压Vm(此时输入数字代码所有各位全为1)之比。转换误差:D/A转换器实际上能达到的转换精度。转换误差可用输出电压满度值的百分数表示,也可以用LSB的倍数来表示。
(2)D/A转换器的转换速度有两种衡量方法建立时间tset是在输入数字量各位由全0变为全1或由全1变为全0时,输出电压达到某一规定值(例如取1/2LSB或满度值的0.01%)所需要的时间。转换速率SR是在大信号工作时,即输入数字量的各位由全0变为全1或由全1变为0时,输出电压uo的变化率。D/A转换器完成一次转换所需的时间应包括建立时间tset和输出电压uo的上升或下降时间,即最大转换时间为:TTRmax=tset+Vomax/SR上式中Vomax是输出模拟电压的最大值。
10.4.1GP32A/D转换模块寄存器2.A/D转换数据寄存器ADR(Analog-to-DigitalDataRegister)
ADR存放A/D转换的8位结果,每次A/D转换结束更新该寄存器。编程从该寄存器读取A/D转换结果。该寄存器地址为:$003D,为只读寄存器,复位时为$00。10.4.1GP32A/D转换模块寄存器3.A/D转换输入时钟寄存器ADCLK(Analog-to-DigitalInputClockRegister)
该寄存器决定A/D转换的时钟频率来源、分频系数值,芯片内的A/D转换器要求ADC时钟频率为1MHz左右。ADCLK的地址是:$003E.定义为:
ADC时钟分频系数选择位
ADC输入时钟源选择位
未用
数据位D7D6D5D4D3D2D1D0定义ADIV2ADIV1ADIV0ADICLK----复位0001111110.4.2A/D转换模块的基本编程方法(1)A/D转换初始化
对ADCLK写入控制字节,决定时钟输入源是内部总线还是外部晶振,决定分频系数等。
(2)启动A/D转换
对ADSCR写入控制字节,选取要转换的通道、决定转换结束数据获取的方式、设置是连续转换还是一次转换等。
(3)获A/D转换结果
若是中断方式,在A/D中断程序中取得,若是查询方式,通过ADSCR的第7位(COCO位)取得,当COCO=1时可从ADR中取数。
10.5.1A/D转换08C语言编程实例(1)A/D转换有关C语言子函数(1)A/D转换有关C语言子函数(1)A/D转换有关C语言子函数10.5.2A/D转换汇编语言编程实例(1)A/D转换有关子程序(2)A/D转换测试程序汇编主程序*10.6高位A/D转换接口10.6.1A/D芯片TCL2543概述1.TLC2543的引脚说明图10-8TLC2543的封装管脚
(3)转换过程
上电后,片选CS必须从高到低,才能开始一次工作周期,此时EOC为高,输入数据寄存器被置0,输出数据寄存器内容是随机的。开始时,片选CS为高,I/OCLOCK、DATAINPUT被禁止,DATAOUT呈高阻态,EOC为高。使CS变低,I/OCLOCK、DATAINPUT使能,DATAOUT脱离高阻态。12个时钟信号从I/OCLOCK端依次加入,控制字从DATAINPUT一位一位地在时钟信号的上升沿时被送入TLC2543(高位先送入),同时上一周期转换的A/D数据,即输出数据寄存器中的数据从DATAOUT一位一位地移出。TLC2543收到第4个时钟信号后,通道号也已收到,因此,此时TLC2543开始对选定通道的模拟量进行采样,并保持到第12个时钟的下降沿。在第12个时钟下降沿,EOC变低,开始对本次采样的模拟量进行A/D转换,转换时间约需10μs,转换完成EOC变高,转换的数据在输出数据寄存器中,待下一个工作周期输出。此后,可以进行新的工作周期。3.TLC2543与MCU的接口方法
TLC2543与微处理器芯片的接口部分有五个引脚,分别是:时钟输入(I/OCLOCK)、串行控制字输入(DATAINPUT)、片选输入(CS)、A/D转换串行数据输出(DATAOUTPUT)、转换结束电平输出(EOC)。经分析TLC2543的工作时序,可以通过软件估计转换结束,免去EOC接线。TLC2543与具有SPI或相同接口能力的MCU可以直接连接,对于没有SPI接口的MCU可以通过软件编程合成SPI操作。10.6.2SPI模块与TLC2543的接口扩展1.扩展电路设计MC68HC908GP32PTC0MISOMOSISPSCKPTC1PTC2TLC2543(第0片)AIN0CS∶DATAOUT∶DATAINPUT∶I/OCLOCKAIN10模拟量输入∶∶∶TLC2543(第1片)AIN0CS∶DATAOUT∶DATAINPUT∶I/OCLOCKAIN10∶∶∶TLC2543(第2片)AIN0CS∶DATAOUT∶DATAINPUT∶I/OCLOCKAIN10∶∶∶图10-7基于SPI的A/D转换扩展电路10.6.2SPI模块与TLC2543的接口扩展2.编程方法
基于上述电路的A/D采集子程序
3.应用举例
利用上述子程序实现33路A/D数据的采集,并进行平均值滤波。每一路取16次求平均。*10.7扩展实现D/A转换10.7.1D/A芯片TLV5608概述1.TLV5608的引脚说明
TLV5608有20根引脚,分布参见图10-8。图10-8TLV5608的封装管脚
2.TLV5608的控制寄存器(1)控制寄存器0(CTRL0)PD-低功耗驱动:PD=0时,正常模式;PD=1时,低功耗。DO-数字输出使能:DO=1时,DOUT引脚输出传送的数据。IM-输入模式:IM=0时,直接输出二进制数据;IM=1时,两次不足后输出。D11……D5D4D3D2D1D0x……xPDDOxxIM2.TLV5608的控制寄存器(2)控制寄存器1(CTRL1)PXY=1时,DACXY低功耗;SXY=1时,DACXY快速传输;SXY=1时,DACXY低速传输。D11…D8D7D6D5D4D3D2D1D0x…xPGHPEFPCDPABSGHSEFSCDSAB3.TLV5608工作原理
TLV5608的16位数据由两部分组成:通道控制位(D15~D12)和数据位(D11~D0)。如下所示。通道控制位(D15~D12即A3~A0),决定数据输出到哪个通道。当A3~A0=0x0000~0x0111时对应通道DACA~DACH;当A3~A0=0x1000选择寄存器CTRL0;当A3~A0=0x1001选择寄存器CTRL1,其他取值这里不作介绍。
在µCMode(MODE接高电平)下传送数据时,首先,FS引脚打高电平,把要传送的数据发送到数据线上;然后,给FS引脚低电平,FS的下降沿开始,在SCLK的每个下降沿使数据一位接一位的移入内部数据寄存器(从高位开始)。在传送了16位数据后或者FS的上升沿到达后,移位寄存器的内容送至DAC锁存器。D15D14D13D12D11……D2D1D0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论