第19章串行外围设备接口SPI mpc83xx中文翻译.docx
- 文档编号:23115650
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:24
- 大小:259.66KB
第19章串行外围设备接口SPI mpc83xx中文翻译.docx
《第19章串行外围设备接口SPI mpc83xx中文翻译.docx》由会员分享,可在线阅读,更多相关《第19章串行外围设备接口SPI mpc83xx中文翻译.docx(24页珍藏版)》请在冰豆网上搜索。
第19章串行外围设备接口SPImpc83xx中文翻译
第19章串行外围设备接口(SPI)
19.1概述
串行外围设备接口(SPIserialperipheralinterface)允许MPC8349E与其他PowerQUICC系列芯片、MC68360、M68HC11和M68HC05微控制器系列以及其他系列设备交换数据。
可以将SPI用于与外围设备的通信,例如EEPROM、实时时钟、A/D转换器和ISDN设备等。
SPI是一个全双工、同步、面向字符的通道,支持四线接口(接收、发送、时钟和从选择)。
SPI部件由发送器和接收器单元、一个独立的波特率发生器和一个控制单元组成。
发送器和接收器单元使用相同的时钟。
这个时钟在主模式下源自SPI波特率发生器,在从模式下由外部提供。
在SPI传输过程中,同时发送和接收数据。
SPI接收器和发送器都是双缓冲的,如图19-1所示,有效FIFO尺寸(等待时间)为两字符。
首先移出SPI的MSB/LSB。
当SPI模式寄存器禁止SPI时(SPMODE[EN]=0),它的功耗非常小。
19.2绪论
SPI的结构图如图19-1所示。
19-1SPI结构图
19.2.1特征
SPI的主要特征如下所示:
●四信号接口(SPIMOSI,SPIMISO,SPICLK和/SPISEL)
●全双工操作
●使用32位的数据字符或4位到16位的数据字符
●支持连续字符发送和接收
●支持8/16/32字符长度的反向数据模式
●支持主SPI模式
●支持多主环境
●最大时钟频率在主模式下为(系统时钟频率/4),在从模式下为(系统时钟频率/2)
●独立的可编程波特率发生器
●用于测试的本地回送能力
●漏极开路输出支持多主配置
19.2.2SPI发送和接收过程
由于SPI是面向字符通信单元,因此由核负责是打包和解包接收和发送的帧。
一帧包含一个完整的SPI传输会话中发送或接收的所有字符,从写入SPITD寄存器的第一个字符开始到设置SPCOM[LST]之后发送的最后一个字符为止。
更多的信息参看19.4.1.4节“SPI命令寄存器(SPCOM)”。
核通过读SPI接收数据保持寄存器(SPIRD)接收数据,然后SPI清除非空的SPIE[NE]以释放SPIRD寄存器,为下一次接收操作做准备。
核通过将数据写入SPI发送数据保持寄存器(SPITD)以发送数据,然后SPI清除SPI事件寄存器(SPIE)的非满位(NF),指示SPITD寄存器包含待发送的字符。
当待发送的下一个字符为当前帧中最后一个字符时,核置位SPCOM[LST],然后将最后一个字符写入SPITD。
SPI核握手协议可以通过轮询或中断来实现。
当采用轮询方式时,核按照预定义的频率读SPIE,并且根据SPIE位的值进行操作。
轮询频率取决于SPI串行信道的频率。
当采用中断机制时,置位SPIE的非满(NF)或非空(NE)位引起到e300核的中断。
然后核读SPIE,并根据SPIE位的值进行操作。
三个基本的发送和接收模式为主、从和多主模式。
注意
当非满(NF)和非空(NE)位均被置位时,e300核应在发送新数据前读取接收的数据。
SPMODE[LEN]确定硬件发送的字符的长度。
核负责位处理,将数据打包或者解包成合适的字符长度。
更多信息参看表19-4中SPMODE[LEN]的说明。
19.2.3操作模式
可以把SPI设定在在单主设备或多主设备环境下工作。
本节介绍单主设备配置时的SPI主和从操作。
同时也讨论了多主设备环境下SPI的操作。
下面几节总结了SPI支持的主要操作模式。
19.2.3.1作为主设备的SPI
在主设备模式下,SPI发送消息到从外设,从外设同时发回应答。
带有多个从设备的单主设备可以使用通用并行I/O信号有选择地启用从设备,如图19-2所示。
为了消除单主设备环境下的多主设备的错误,应通过外部上拉强制主设备的
输入无效。
图19-2单主设备/多从设备的配置
为了开始交换数据。
e300将待发送数据写入SPITD寄存器。
然后SPI为每一个字符在SPICLK产生可编程时钟脉冲。
将Tx数据在SPI主出从入(SPIMOSI)移出,同时将Rx数据在SPI主入从出(SPIMISO)移入。
在发送过程中,无论何时SPI发出请求,核都负责提供数据,从而保证操作的顺畅。
在最后一个数据(LST命令和紧接其后的数据)发送完毕后,写入SPITD的第一个字符作为SPI的开始命令。
SPI连续地发送和接收字符,直到SPCOM[LST]被置位或者有错误发生。
只要发送缓冲区不满,SPI就置位SPIE[NF]向中断控制器发送可屏蔽中断。
在发送完最后一个字之后,SPI也置位NF。
作为回应,核应读取与最后一个字相关的异常标志。
只要接收缓冲区填充了数据,SPI就置位SPIE[NE],向中断控制器发送可屏蔽中断。
19.2.3.2作为从设备的SPI
在从模式下,SPI设备接收来自SPI主设备的信息并且同时发送回答。
从设备的
必须在识别出Rx时钟之前有效。
一旦
信号有效,SPICLK就成为从主设备到从设备的输入。
SPICLK可以为从DC到系统时钟/2之间的任意频率。
核心将待发送数据送入SPITD寄存器,为数据传输做准备。
一旦
有效,从设备将数据从SPIMISO移出,从SPIMOSI移入。
SPI置位SPI寄存器的NF位,当满缓冲完成发送和接收时或者在出现错误之后,发出可屏蔽中断。
SPI连续接收,直到
信号无效。
发送连续进行,直到没有更多的数据可用或者
无效。
一旦
重新有效,并且SPICLK开始翻转,就继续发送。
缓冲区中的字符都发送了之后,只要
保持有效,SPI就发送1。
19.2.3.3多主设备环境下操作的SPI
SPI可以工作在多主设备环境中,此时所有的SPI设备都被连接到同一个总线上。
在这种配置中,所有SPI设备共享SPIMOSI、SPIMISO和SPICLK信号,但是
输入是独立连接的,如图19-3所示。
某一时刻仅有一个SPI设备可以作为主设备——其他所有的SPI设备必须为从设备。
当把一个SPI配置成主设备时,如果它的
输入有效,将产生多主设备错误,因为有多个SPI设备成为总线主设备。
SPI置位SPI事件寄存器中的SPIE[MME]并且向核发出可屏蔽中断。
它还禁止SPI操作和SPI信号的输出驱动器。
在重新使用SPI之前,核心必须清除SPMODE[EN],纠正错误,并清除SPIE[MME]。
注意:
1.所有信号都是漏极开路的。
2.对于两个以上主设备的多主设备配置,
和SPIE[MME]不能检测到所有可能的冲突。
3.由软件负责SPI总线的仲裁(例如使用如令牌传递)。
4.
信号用软件使用通用I/O信号实现。
图19-3多主设备配置
SPI支持的最大稳定数据速率为系统(csb)时钟/50。
但是SPI可以高得多的速率传输单个字符——在主机模式下为系统时钟/4,在从机模式下为系统时钟/2。
在多个字符之间应插入间隔,以保证不超过最大稳定数据速率。
19.3外部信号说明
SPI的四线接口包括发送、接收、时钟和从选择。
19.3.1概述
表19-1列出了信号的属性。
表19-1信号属性
名字
功能
复位
上拉
SPIMISO
主设备入从设备出
-
在漏极开路模式下需要
SPIMOSI
主设备出从设备入
-
在漏极开路模式下需要
SPICLK
连接到其他SPICLK的输入/输出串行时钟
-
在漏极开路模式下需要
SPI从设备选择
-
在漏极开路模式下需要
19.3.2详细信号说明
表19-2详细说明了信号。
表19-2详细信号说明
信号
I/O
说明
SPIMISO
I/O
主设备入从设备出
状态
含义
有效-SPI发送/接收的数据为高(取决于是主设备还是从设备)
无效-SPI发送/接收的数据为低(取决于是主设备还是从设备)
时序
有效-根据SPICLK有效/无效/在相位中间(由SPMODE决定)
无效-根据SPICLK有效/无效/在相位中间(由SPMODE决定)
SPIMOSI
I/O
主设备出从设备入
状态
含义
有效-SPI发送/接收的数据为高(取决于是主设备还是从设备)
无效-SPI发送/接收的数据为低(取决于是主设备还是从设备)
时序
有效-根据SPICLK有效/无效/在相位中间(由SPMODE决定)
无效-根据SPICLK有效/无效/在相位中间(由SPMODE决定)
SPICLK
I/O
串行时钟入或串行时钟出,分别用于从或主模式
状态
含义
有效/无效-根据SPMODE[PM,DIV16]寄存器的速率的配置。
时序
有效/无效-在帧接收/发送过程中
I
SPI从设备选择
状态
含义
有效-从模式下声明为被到达的帧选中为从设备。
在主模式下有效导致MME多主设备错误。
无效-在从模式下意味着还未选中特定的SPI。
在主模式下,为进行正常操作应将其置为无效。
时序
有效-在从模式下和来自从设备的数据一起。
无效-在从模式下和帧尾一起(依照SPMODE[LEN])。
在主模式下,在数据第一次写入SPITD之前并保持不变。
在单主设备或者多主设备环境模式下,可以把SPI配置成从设备或者主设备。
主SPI利用SPI波特率发生器(BRG)生成传输时钟SPICLK。
SPIBRG从时钟合成器产生的系统时钟中获取输入。
SPICLK是一个门控时钟,仅在数据传输时有效。
SPICLK相位和极性的四种组合可以由时钟反向(SPMODE[CI])和时钟相位(SPMODE[CP])寄存器位配置。
还可以把SPI配置为漏极开路,以支持多主设备配置,此时共享的SPI信号由SPI设备或外部SPI设备驱动。
SPI主设备入从设备出SPIMISO信号作为主设备的输入和从设备的输出。
反之,主设备出从设备入SPIMOSI信号作为主设备的输出和从设备的输入。
这些信号的双重功能允许多主设备环境下的SPI之间使用相同的硬件配置进行通信。
●当SPI为主设备时,SPICLK是时钟输出信号,它从SPIMISO移入接收到的数据,将发送的数据移出到SPIMOSI。
SPI主设备必须输出一个从设备选择信号,通过使用独立的通用I/O信号使能SPI从设备。
当把SPI设备配置成主设备时,使
有效则导致错误。
●当SPI为从设备时,SPICLK是时钟输入信号,它从SPIMOSI移入接收到的数据,将发送的数据通过SPIMISO移出。
是到SPI从设备的使能输入信号。
在多主设备环境下,
(始终作为输入)还用来检测有多个主设备操作这样的错误。
19.4内存映射/寄存器定义
表19-3包含SPI的映射到内存空间的寄存器。
表中所列的地址为到SPI基址的偏移量,同第二章“内存映射”中定义的那样。
表19-3SPI寄存器汇总
偏移量
寄存器
访问
复位值
节/页
0x000-0x01F
保留
-
-
-
0x020
SPI模式寄存器(SPMODE)
R/W
0x0000_0000
19.4.1.1/19-9
0x024
SPI事件寄存器(SPIE)
R/W
0x0000_0000
19.4.1.2/19-13
0x028
SPI屏蔽寄存器(SPIM)
R/W
0x0000_0000
19.4.1.2/19-13
0x02C
SPI命令寄存器(SPCOM)
R/W
0x0000_0000
19.4.1.4/19-15
0x030
SPI发送寄存器(SPITD)
R/W
0x0000_0000
19.4.1.5/19-15
0x034
SPI接收寄存器(SPIRD)
R
0xFFFF_FFFF
19.4.1.6/19-16
0x038-0xFFF
保留
-
-
-
19.4.1寄存器说明
19.4.1.1SPI模式寄存器(SPMODE)
SPMODE控制SPI操作的模式和时钟源,如图19-4所示。
图19-4SPMODE-SPI模式寄存器
表19-4说明了SPMODE的字段。
表19-4SPMODE字段说明
位
名字
说明
0
-
保留,应清除。
1
LOOP
回送模式。
允许本地回送操作。
0正常操作
1回送模式。
用于测试SPI控制器内部功能。
发送器输出在内部连接到接收器输入。
接收器和发送器正常工作,只是忽略收到的数据。
2
CI
时钟反向。
将SPI时钟的极性反向。
更多信息参看图19-5和19-6。
0SPICLK为低时无效
1SPICLK为高时无效
3
CP
时钟相位。
选择传输格式。
更多信息参看图19-5和19-6。
0SPICLK在数据传输中间的开始翻转
1SPICLK在数据传输的开始处开始翻转
4
DIV16
除以16。
当把SPI配置成主设备模式时,为SPI波特率发生器(SPIBRG)选择时钟源;在从模式下,SPICLK就是时钟源。
0系统时钟为SPIBRG的输入
1系统时钟/16为SPIBRG的输入
在从模式下,必须清除该位。
5
REV
反向数据模式,仅用于8/16/32位字符长度。
0首先发送/接收LSB(对于数据长度<32,数据位于低半字LSB)
1首先发送/接收MSB
6
M/S
主/从。
选择主模式还是从模式
0SPI为从设备
1SPI为主设备
7
EN
启用SPI。
当EN置位时,一定不能修改SPMODE中的其他位。
0禁用SPI。
SPI处于空闲状态,功耗最低。
SPIBRG不起作用,并且禁止输入时钟。
1启用SPI。
注意:
SPI控制器要求在禁用SPI和重新启用SPI之间至少有10个系统时钟的时间间隔。
这个最小时间间隔保证在清除SPMODE[EN]时清除SPMODE[PM]和SPMODE[DIV16]。
8-11
LEN
每个字符的位长度。
LEN可以为32或4到16位,如下所示:
000032位字符
0001-0010保留,导致不可预测的行为
00114位字符
…
111116位字符
TX和RX寄存器(SPITD,SPIRD)一次能容纳32位。
32位长的字符填满TX和RX寄存器;因此这些寄存器中的所有位都有效。
当LEN选择的字符长度等于或者小于16位时,有效位占据发送和接收寄存器的低半字。
例如,如果将字符长度设置为16位,有效位将为16-31,如果将字符长度设置为5位,有效位将为16-20。
注意,不管字符长度为多长,每个发送和接收寄存器仅容纳一个字符。
12-15
PM
预分频模数选择。
指定SPI时钟发生器中的预分频器的分频比率。
SPI波特率发生器时钟源(系统时钟或系统时钟/16,取决于DIV16位)被4*([PM]+1)分频,其范围为4到64。
时钟有50%的占空期。
例如,如果将预分频模数设置为PM=0011并且DIV16置1,那么系统/SPICLK时钟比率将为16*(4*(0011-1))=256。
在从模式下,必须清除该位。
16-18
-
保留,应清除。
19
OD
漏极开路模式
0将所有输出引脚配置为正常模式
1将所有输出引脚配置为漏极开路模式
20-31
-
保留,应清除。
图19-5显示了SPI的传输格式,其中SPICLK在传输的中间开始翻转(SPMODE[CP]=0)。
图19-5SSPMODE[CP]=0时的SPI传输格式
图19-6显示了SPI的传输格式,其中SPICLK在传输的开始处开始翻转(SPMODE[CP]=1)。
图19-6SPMODE[CP]=1时的SPI传输格式
19.4.1.2SPI事件寄存器(SPIE)
SPI事件寄存器(SPIE)产生中断并报告SPI所识别的事件。
当识别了某个事件时,SPI置位对应的SPIE位。
SPIE位通过写入‘1’清除,写入‘0’没有作用。
置位SPI屏蔽寄存器(SPIM)中的位允许对应的中断,清除一位则屏蔽对应的中断。
必须在核清除内部中断请求之前清除清除未屏蔽的SPIE位。
图19-7显示了SPI事件寄存器。
图19-7SPIE-SPI事件寄存器
表19-5说明了SPIE的字段。
表19-5SPIE字段说明
位
名字
说明
0-16
-
保留,应清除。
17
LT
发送了最后一个字符。
发送最后一个字符,可以把新数据写入SPID以便发送。
18
DNR
数据未就绪。
在从模式下,仅当
信号在SPI中的数据就绪前有效时,才在线路上发送IDLE,并让UN有效,宣告应禁用SPI,重新启动操作。
19
OV
从/主过载。
指示在接收过程中出现了过载。
当过载时,SPI继续发送/接收处理,同时报告丢失字符出现过载。
20
UN
从欠载。
指示SPI发送器是否未及时取得要发送数据,以及是否在线路上发送了IDLE。
仅在从设备模式下有效(SPMODE[M/S]=0)。
在主设备模式下(SPMODE[M/S]=1),如果SPI发送器没有有效数据发送,SPICLK就停止翻转并停止发送/接收操作(不报告欠载),当把数据写入SPITD时,恢复发送。
21
MME
多主设备错误。
当SPI在主设备模式时,如果外部宣告/SPISEL有效就置位。
注意,可以在回送模式中出现MME错误。
22
NE
非空。
置位时指示SPIRD包含已经接收的字符。
0接收器空
1接收器有正确的接收数据以及关于LST(命令寄存器)和OV(SPIE)的指示。
核可以读取接收器的内容。
如果有更多数据可用,读接收器SPIRD清除NE位。
23
NF
非满。
指示是否未使用SPITD,核是否向它写入新字符。
0发送器满。
1发送器未满。
核可以写发送器。
必须清除NF以允许传输其它字符(写发送器清除NF)。
24-31
-
保留,应清除。
19.4.1.3SPI屏蔽寄存器(SPIM)
SPI屏蔽寄存器(SPIM)如图19-8所示,它允许/屏蔽被SPI识别的事件的中断。
当识别了一个事件时,SPI置位对应SPI位。
置位SPIM位允许对应的中断,清除SPIM位则屏蔽对应的中断。
必须在核清除内部中断请求之前清除清除未屏蔽的SPIE位。
图19-8SPIM-SPI屏蔽寄存器
表19-6说明了SPIM的字段。
表19-6SPIM字段说明。
位
名字
说明
0-16
-
保留,应清除。
17
LT
发送了最后一个字符。
0LT事件不会引起SPI中断
1LT事件引起SPI中断
18
DNR
从模式下数据未就绪。
0从DNR事件不会引起SPI中断
1从DNR事件引起SPI中断
19
OV
从/主过载中断屏蔽
0从/主过载事件不会引起SPI中断
1从/主过载事件引起SPI中断
20
UN
从欠载中断屏蔽
0从欠载事件不会引起SPI中断
1从欠载事件引起SPI中断
21
MME
多主设备错误中断屏蔽。
0多主设备错误事件不会引起SPI中断
1多主设备错误事件引起SPI中断
22
NE
非空中断屏蔽
0非空事件不会引起SPI中断
1非空事件引起SPI中断
23
NF
非满中断屏蔽
0非满事件不会引起SPI中断
1非满事件引起SPI中断
24-31
-
保留,应清除。
19.4.1.4SPI命令寄存器(SPCOM)
SPI命令寄存器(SPCOM)用于结束SPI操作,如图19-9所示。
图19-9SPI命令寄存器(SPCOM)
表19-7说明了SPCOM的字段。
表19-7SPCOM字段说明
位
名字
说明
0-8
-
保留,应清除。
9
LST
此位代表最后一个字符。
在把最后一个字符写入SPITD之前必须置位。
当字符全部传送完毕时它导致SPIE[LT]置位,进而指示帧全部传送完毕。
0此字符不是帧的最后一个字符
1此字符是帧的最后一个字符
10-31
DNR
保留,应清除。
19.4.1.5SPI发送数据保持寄存器(SPITD)
SPITD保持待发送的数据。
SPMODE[LEN]定义每个字符的位数。
每次SPIE[EN]置位时,如果SPIE中不报错,核就可以向SPITD写入另一个数据字符。
在帧的末尾,核应置位SPCOM[LST]并准备好数据的最后一个字符。
图19-10显示了SPI发送数据保持寄存器。
图19-10SPI发送数据保持寄存器。
表19-8给出了SPI发送数据保持寄存器的字段说明。
表19-8SPI发送数据保持寄存器
位
名字
说明
0-31
DATA
这些位是要发送的数据。
19.4.1.6SPI接收数据保持寄存器(SPIRD)
SPIRD用于从SPI信道接收数据字符,如图19-11所示。
每次SPIE[NE]置位时,核可以读SPIRD。
图19-11SPI接收数据保持寄存器
表19-9给出了SPI接收数据保持寄存器的字段说明。
表19-9SPI接收数据保持寄存器
位
名字
说明
0-31
DATA
接收的数据。
这些位是从SPI总线接收的数据。
19.4.1.6.1反向模式SPMODE[REV]举例
在反向数据模式(SPMODE[REV]=1)和正常数据模式(SPMODE[REV]=0)中,数据在接收完毕后被送入SPIRD。
下面为8位字符长度(SPMODE[LEN]=7)的实例。
图19-12SPMODE[REV]=0SPMODE[LEN]=7首先发送LSB举例
图19-13SMODE[REV]=1SPMODE[LEN]=7首先发送MSB举例
图19-14SMODE[REV]=1SPMODE[LEN]=15首先发送MSB举例
图19-15SPMODE[REV]=0SPMODE[LEN]=15首先发送LSB举例
19.5初始化/应用信息
下面几节介绍SPI主设备和从设备编程实例。
19.5.1SPI主设备编程实例
以下步骤将SPI初始化为高速工作的主机模式:
1.如果需要,配置并行I/O信号,作为SPI选择输出信号
2.向SPIE中写入0xFFFFFFFF清除以前的所有事件。
配置SPIM允许所有期望的SPI中断。
3.配置SPMODE允许正常操作(非回送)、主设备模式、SPI启用、字符长度和可能的最快速度。
4.向SPITD写入待发送的第一个字符。
19.5.2SPI从设备编程实例
以下为SPI处于从模式时的初始化步骤示例。
本例和SPI主设备实例很相似,不同点是采用
代替I/O信号。
1.向SPIE写入0xFFFFFFFF清除以前的所有事件。
2.配置SPIM允许所有期望的SPI中断。
3.配置SPMODE允许正常操作(非回路)、从设备模式、SPI启用和字符长度。
4.向SPITD写入待发送的第一个字符,确保一旦主设备开始传输时SPI准备就绪。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第19章串行外围设备接口SPI mpc83xx中文翻译 19 串行 外围设备 接口 SPI mpc83xx 中文翻译