摩托罗拉_SPI_总线_协议规范

                                             SPIBlock GuideV03.06  

Section 1 介绍

图给出了SPI架构的概述。SPI的主要部分是状态寄存器控制寄存器数据寄存器移位逻辑波特率发生器主从控制逻辑端口控制逻辑


1.1        概述

SPI模块允许在MCU和外设之间进行双工、同步、串行通信设备。软件可以轮询SPI状态标志或SPI操作可以中断驱动。

1.2        Features 

SPI包括以下特点:

        主模式和从模式

        双向模式

        从机选择输出

        具有CPU中断能力的模式错误标志

        双缓冲数据寄存器

        具有可编程极性和相位的串行时钟

        在等待模式下控制SPI操作

1.3        Modes of Operation

SPI有运行、等待和停止三种模式。

运行模式

这是基本的操作方式。

等待模式

等待模式下的SPI操作是一种可配置的低功耗模式,由SPICR2寄存器中的SPISWAI位控制。在等待模式下,如果SPISWAI位被清除,SPI就像在运行模式下一样工作。如果SPISWAI位被设置,SPI进入功率保守状态,SPI时钟产生关闭。

如果SPI配置为master,则任何正在进行的传输都将停止,但在CPU进入Run Mode后将恢复。

如果SPI被配置为salve,则继续接收和传输字节,以便从站与主站保持同步。

停止模式

SPl在停止模式下处于非活动状态,以降低功耗。

如果SPl配置为master,则任何正在进行的传输都将停止,但在CPU进入Run Mode后将恢复传输。

如果SPI被配置为salve,则继续接收和传输字节,以便从站与主站保持同步。


这只是一个高层次的描述,对工作模式的详细描述包含在4.8低功耗模式选项中。


Section 2 外部信号描述

本节列出所有端口的名称和描述,包括连接或可能连接芯片的输入和输出。SPI模块共有4个外部引脚。

2.1        概述 

本节列出所有端口的名称和描述,包括连接或可能连接芯片的输入和输出。SPI模块共有4个外部引脚。

2.2        信号详细描述

2.2.1        MOSI

该引脚用于在SPI模块配置为Master时将数据发送出去,并在配置为Slave时接收数据。

2.2.2        MISO

该引脚用于在SPI模块配置为Slave时将数据发送出去,并在配置为Master时接收数据。

2.2.3        SS

该引脚用于从SPI模块输出选择信号到另一个外设,当其配置为主设备时,数据传输将发生,当SPI配置为从设备时,它用作接收从设备选择信号的输入。

2.2.4        SCK

该引脚用于输出SPI传输数据的时钟或在Slave情况下接收时钟。

Section 3 内存MAP/寄存器 定义描述

本节提供了SPI使用的地址空间和寄存器的详细描述。

SPI的内存映射如下表所示。为每个寄存器列出的地址是一个基址和一个地址偏移量的总和。基址是在SoC级定义的,地址偏移量是在模块级定义的。从保留位读取将返回零,而向保留位写入则没有效果。

注:1. 某些位是不可写的。2. 对该寄存器的写入将被忽略。3.从这个寄存器读取返回全零。

3.1        寄存器描述

本节由按地址顺序排列的寄存器描述组成。每个描述包括一个标准的寄存器图和一个相关联的图号。寄存器位和域函数的详细信息按照寄存器图,按位顺序排列。

3.1.1        SPI Control Register 1

Read: anytime

Write: anytime

SPIE- SPI Interrupt Enable Bit

如果设置了SPIF或MODF状态标志,该位启用SPI中断请求。

1=SPI中断使能。

0=禁用SPI中断。

SPE-- SPI Systcm Enable Bit

该位启用SPI系统,并将SPI端口引脚专用于SPI系统功能。如果SPE被清除,SPI将被禁用并强制进入空闲状态,SPISR寄存器中的状态位被重置0 = SPI禁用(低功耗)。

1 =启用SPI,端口引脚专用于SPI功能。

0=禁用SPI(低功耗)。

SPTIE- SPI Transmit Interrupt Enable

如果设置了SPTEF标志,该位启用SPI中断请求。

1=启用SPTEF中断。

0=禁用SPTEF中断。

MSTR - SPI Master/Slave Mode Select Bit

如果SPI在主或从模式下工作,则选择此位。将SPI从主SPI转换为从SPI或反之,将迫使SPI系统进入空闲状态。

1= SPI处于Master模式

0=SPI处于Slave模式

CPOL- SPI Clock Polarity Bit

该位选择反转或非反转SPI时钟。为了在SPI模块之间传输数据,SPI模块必须具有相同的CPOL值。在主模式下,这个位的改变将中止正在进行的传输,并迫使SPI系统进入空闲状态

1=选择了低激活时钟。空闲状态下SCK高。

0 =选择高活动时钟。空闲状态下,SCK低。

CPHA- SPI Clock Phase Bit

该位用于选择SPI时钟格式。在主模式下,这个位的改变将中止正在进行的传输,并迫使SPI系统进入空闲状态。

1 =数据采样发生在SCK时钟的偶数边(2,4,6,…,16)

0 =数据采样发生在SCK时钟的奇数边(1,3,5,…,15)

SSOE- Slave Select Output Enable

如果设置了MODFEN,则仅在主模式下启用SS输出特性,通过断言SSOE,如表3-2所示。在主模式下,这个位的改变将中止正在进行的传输,并迫使SPI系统进入空闲状态。

LSBFE-LSB-First Enable

这个位不影响MSB和LSB在数据寄存器中的位置。数据寄存器的读写总是在第7位有MSB。在主模式下,这个位的改变将中止正在进行的传输,并迫使SPI系统进入空闲状态。

1=先传输最低有效位。

0=先传输最高有效位。

3.1.2        SPI Control Register 2

Read: anytime

Write: anytime; writes to the reserved bits have no effect

MODFEN- Mode Fault Enable Bit

这个位允许检测到MODF故障。如果SPI处于Master模式并且MODFEN被清除,则SS端口引脚未被SPI使用。在Slave模式下,无论MODFEN的值如何,SS都只能作为输入。MODFEN位对SS端口引脚配置的影响如表3-2所示。在主模式下,这个位的改变将中止正在进行的传输,并迫使SPI系统进入空闲状态。

1=具有MODF特性的SS端口引脚

0=SS端口引脚未被SPI使用

BIDIROE - Output enable in the Bidirectional mode of operation

该位控制SPI的MOSI和MISO输出缓冲区,当在双向操作模式(SPCO设置)。在主模式下,这个位控制MOSI端口的输出缓冲区,在从模式下,它控制MISO端口的输出缓冲区。在主模式下,设置SPCO,这个位的改变将中止正在进行的传输,并迫使SPI进入空闲状态。

1 =输出缓冲区启用

0=关闭输出缓冲区

SPISWAl- SPI Stop in Wait Mode Bit

在等待模式下,这个位用于省电。

1=在等待模式下停止SPI时钟生成

0=SPI时钟在等待模式下正常工作

SPC0- Serial Pin Control Bit 0

该位支持如表3-3所示的双向引脚配置。在主模式下,更改这个位将中止正在进行的传输并迫使SPI系统进入空闲状态

3.1.3        SPI Baud Rate Register

Read: anytime

Write: anytime; writes to the reserved bits have no effect

SPPR2-SPPR0- SPI Baud Rate Preselection Bits

SPR2-SPR0- SPI Baud Rate Selection Bits

这些位指定SPI波特率如下表所示。在主模式下,这些位的变化将中止正在进行的传输,并迫使SPI系统进入空闲状态。波特率因子方程如下:

波特率的计算公式如下:

3.1.4        SPI Status Register0

Read: anytime
Write: has no effect


SPIF -- SPIF Interrupt Flag

这个位是在接收到的数据字节被传输到SPI数据寄存器之后设置的。通过读取SPISR寄存器(设置SPIF),然后对SPI数据寄存器进行读访问,可以清除该位。

1 =新数据拷贝到SPIDR

0 =传输尚未完成

SPTEF -- SPI Transmit Empty Interrupt Flag

如果设置,该位表示发送数据寄存器为空。要清除这个位并将数据放入传输数据寄存器,必须使用SPTEF=1读取SPISR,然后写入SPIDR。没有读取SPTEF=1的任何对SPI数据寄存器的写入都将被有效忽略。

1 = SPI数据寄存器空

0=SPI数据寄存器不空

MODF - Mode Fault Flag

当SPI配置为主且模式故障检测使能时,如果SS输入变低,则设置此位,SPICR2寄存器的MODFEN位被设置。参考MODFEN位描述3.1.2 SPI控制寄存器通过读取SPI状态寄存器(带有MODF设置),然后写入SPI控制寄存器1,自动清除该标志。

1 =模式故障。

0 =未发生模式故障。

3.1.5        SPI Data Register

Read: anytime; normally read only after SPIF is set

Write: anytime

对该寄存器的写入允许将数据字节排队并传输。对于配置为主机的SPI,在之前的传输完成后立即传输排队的数据字节。SPISR寄存器中的SPI发送器空标志SPTEF表示SPI数据寄存器何时准备接受新数据。从SPIF设置之后到下一次传输结束之前的任何时间都可以读取数据。如果在连续传输结束时SPIF没有得到服务,那么这些数据字节将丢失,SPIDR中的数据将保留第一个字节,直到SPIF得到服务。


Section 4 功能描述

SPI模块允许在MCU和外围设备之间进行双工、同步、串行通信。软件可以轮询SPI状态标志或SPI操作可以中断驱动。

通过在SPI控制寄存器1中设置SPI使能位(SPE)来使能SPI系统。当设置了SPE位时,四个相关的SPI端口引脚专用于SPI功能:

从选择(SS)

串行时钟(SCK)

主输出/从输入(MOSI)

主输入/从输出(MISO)

SPI系统的主要元件是SPI数据寄存器。主寄存器中的8位数据寄存器和从寄存器中的8位数据寄存器通过MOSI和MISO引脚连接,形成一个分布式16位寄存器。当一个数据传输操作被执行时,这个16位的寄存器被S-clock从master连续移动8位,因此数据在master和slave之间交换。写入主SPI数据寄存器的数据成为slave的输出数据,传输操作后从主SPI数据寄存器读取的数据是slave的输入数据。

使用SPTEF=1读取SPISR,然后写入SPIDR,将数据放入发送数据寄存器。当传输完成时,接收到的数据被移动到接收数据寄存器中。数据可以在下一次传输完成之前的任何时间从这个双缓冲系统中读取。这个8位数据寄存器作为SPI接收数据寄存器用于读,作为SPI发送数据寄存器用于写。单个SPI寄存器地址用于从读数据缓冲区读取数据和将数据写入传输数据寄存器。

SPI控制寄存器1 (SPICR1)中的时钟相位控制位(CPHA)和时钟极性控制位(CPOL)选择SPI系统使用的四种可能的时钟格式之一。CPOL位只是选择一个非反转或反转时钟。CPHA位通过在奇数SCK边或偶数SCK边上采样数据来适应两种根本不同的协议(参见4.4传输格式)。

SPI可以配置为作为主或从设备运行。当SPI Control Registerl中的MSTR位被设置时,选择主模式;当MSTR位被清除时,选择从模式。


4.1        General

当MSTR位被设置时,SPI工作在主模式。只有一个主SPI模块可以发起传输。传输开始于向SPI主数据寄存器写入数据。如果移位寄存器为空,则字节立即转移到移位寄存器。在串行时钟的控制下,字节开始在MOSI引脚上移出。

4.2        Master Mode

当MSTR位被设置时,SPI工作在主模式。只有一个主SPI模块可以发起传输。传输开始于向SPI主数据寄存器写入数据。如果移位寄存器为空,则字节立即转移到移位寄存器。在串行时钟的控制下,字节开始在MOSI引脚上移出。

S-clock

SPR2、SPR1和SPR0波特率选择位与SPI波特率寄存器中的SPPR2、SPPR1和SPPR0波特率预选位一起控制波特率发生器并决定传输速度。SCK引脚是SPI时钟输出。通过SCK引脚,主机的波特率发生器控制从外设的移位寄存器。

MOSl, MISO pin

在主模式下,串行数据输出引脚(MOSI)和串行数据输入引脚(MISO)的功能由SPCO和BIDIROE控制位决定。

SS pin

如果设置了MODFEN和SSOE位,则SS引脚配置为从选输出。SS输出在每次传输过程中变得低,当SPI处于空闲状态时变为高。如果设置了MODFEN,清除了SSOE,则将SS引脚配置为检测模式故障错误的输入。如果SS输入变低,这表明另一个主机试图驱动MOSI和SCK线的模式故障错误。在这种情况下,SPI立即切换到从模式,通过清除MSTR位,也禁用从输出缓冲区MISO(或双向模式下的SISO)。因此,结果是所有输出都被禁用,SCK, MOSI和MISO是输入。如果发生模式故障时正在进行传输,则传输被终止,SPI被强制进入空闲状态。

此模式故障错误还会在SPI状态寄存器(SPISR)中设置模式故障(MODF)标志。如果在MODF标志设置时设置了SPI中断使能位(SPIE),则还请求SPI中断序列。

当写SPI数据寄存器在主机中发生时,有半个sck周期的延迟。延迟之后,SCK在master内启动。其余的传输操作略有不同,这取决于SPI控制寄存器1中SPI时钟相位位CPHA指定的时钟格式(参见4.4传输格式)。

注意:CPOL、CPHA、SSOE、LSBFE、MODFEN、SPCO、BIDIROE设置SPC0后,SPPR2-SPPRO和SPR2-SPRO这些位改变后,在主模式下将中止正在进行的传输并迫使SPI进入空闲状态。远程slave无法检测到这一点,因此master必须确保远程slave被设置回空闲状态。

4.3        Slave Mode

当SPI控制寄存器中的MSTR位清除时,SPI工作在从模式。

SCK clock

在从属模式下,SCK是来自主机的SPI时钟输入。

MOSl, MISO pin

在从模式下,串行数据输出引脚(MISO)和串行数据输入引脚(MOSI)的功能由SPI控制寄存器2中的SPCO位和BIDIROE位决定。

SS pin

SS引脚是从选择输入。在数据传输发生之前,从SPI的SS引脚必须处于低电平。SS必须保持低电平直到传输完成。如果ss高,SPI被强制进入空闲状态。

SS输入还控制串行数据输出引脚,如果SS高(未选择),串行数据输出引脚是高阻抗,并且,如果SS低,SPI数据寄存器中的第一个位被驱动出串行数据输出引脚。此外,如果没有选择从机(SS高),那么SCK输入将被忽略,SPI移位寄存器也不会发生内部移位。

虽然SPI能够双工操作,但一些SPI外设只能在从模式下接收SPI数据。对于这些简单的设备,没有串行数据输出引脚。

4.4        传输格式

在SPI传输过程中,数据被同时发送(串行移出)和接收(串行移入)。串行时钟(SCK)同步两条串行数据线上信息的移位和采样。从选择线允许选择单个从SPI设备,未选择的从设备不干扰SPI总线活动。可选地,在主SPI设备上,从选择线可用于指示多主总线争用。

4.4.1        时钟相位和极性控制

使用SPI控制寄存器1中的两位,软件选择串行时钟相位和极性的四种组合之一。

CPOL时钟极性控制位指定一个活动的高或低时钟,对传输格式没有显著影响。

CPHA时钟相位控制位选择两种根本不同的传输格式之一。

主SPI设备和通信从设备的时钟相位和极性应该相同。在某些情况下,在传输之间改变相位和极性,以允许主设备与具有不同要求的外围从设备通信。

同时也要注意leading time、trailing time、idling time

4.4.2        CPHA = 0 Transfer Format(第一个边沿采样)

SCK线上的第一个边缘用于将slave的第一个数据位装入master,并将master的第一个数据位装入slave。在一些外设中,一旦选择了从属设备,从属设备数据的第一个比特就可以在从属设备的数据输出引脚处使用。

在这种格式中,第一个SCK边缘发出半个周期半个SCK周期后,第二个边出现在SCK线上。当第二个边出现时,先前从串行数据输入引脚锁存的值被移到移位寄存器的LSB或MSB,这取决于LSBFE位。

在这第二个边之后,SPI主数据的下一个位从主的串行数据输出引脚传输到从上的串行输入引脚。这个过程持续到SCK线上总共16条边,数据在奇数边上被锁存,在偶数边上被移动。数据接收是双缓冲的。

在传输期间,数据被串行地转移到SPI移位寄存器中,并在最后一位被转移后被转移到并行SPI数据寄存器中。

在第16轮(最后一轮)SCK边缘之后:

以前在主SPI数据寄存器中的数据现在应该在从数据寄存器中,从数据寄存器中的数据应该在主数据寄存器中。

SPI状态寄存器中的SPIF标志被设置,表示传输完成。

图4-2是CPHA=0时SPI传输的时序图。如图所示为CPOL = 0和CPOL=1时的SCK波形。由于SCK、MISO和MOSI引脚直接连接在主从端之间,因此该图可以解释为主或从端时序图。MISO信号是从机的输出,MOSI信号是主机的输出。主控的SS引脚必须是高电平或重新配置为不影响SPI的通用输出。

在从属模式下,如果SS线在连续传输之间没有解除断言,则SPI数据寄存器的内容不传输,而是传输最后接收到的字节。如果SS线在连续传输之间至少有最小空闲时间(半个SCK周期)被解除断言,那么SPI数据寄存器的内容将被传输。在主模式下,启用了从选择输出后,在连续传输之间,SS线总是在至少最小空闲时间内解除断言并重新断言。

4.4.3        CPHA = 1 Transfer Format(第二个边沿采样)

一些外设需要第一个SCK边缘,在数据输出引脚上第一个数据位可用之前,第二个边缘将数据输入系统。在这种格式中,通过在8周期传输操作开始时设置cfa位来发出第一个SCK边。

SCK的第一个边缘立即发生在半SCK时钟周期同步延迟之后。这第一个边命令从机将它的第一个数据位传输到主机的串行数据输入引脚。半个SCK周期后,第二个边缘出现在SCK引脚上。这是主人和奴隶的锁边。

当第三条边出现时,先前从串行数据输入引脚锁存的值被移到SPI移位寄存器的LSB或MSB,具体取决于LSBFE位。在这个边缘之后,主数据的下一个位从主的串行数据输出引脚耦合到从上的串行输入引脚。

这个过程持续到SCK线上总共16条边,数据被锁存在偶数边上,移动发生在奇数边上。数据接收是双重缓冲的,数据在传输期间被串行地转移到SPI移位寄存器中,并在最后一位被转移后被转移到并行SPI数据寄存器中。

在第16个SCK边缘之后:

以前在主的SPI数据寄存器中的数据现在在从的数据寄存器中,从的数据寄存器中的数据在主的数据寄存器中。

设置SPISR中的SPIF标志位,表示传输完成。

CPHA=1的两种时钟变化如图4-3所示。由于SCK、MISO和MOSI引脚直接连接在主从端之间,因此该图可以解释为主或从端时序图。MISO信号是从机的输出,MOSI信号是主机的输出。SS线是从选择输入到从。主控的SS引脚必须是高电平或重新配置为不影响SPI的通用输出。

SS线可以在连续传输之间保持低位活动(可以在任何时候保持低位)。在具有单个固定主设备和单个驱动MIsO数据线的从设备的系统中,这种格式有时更可取。

        在主模式下进行背靠背传输

在主模式下,如果传输已经完成,并且在SPI数据寄存器中有一个新的数据字节可用,则该字节立即发送出去,没有拖尾和最小空闲时间。

SPI中断请求标志(SPIF)对于主模式和从模式都是通用的。在最后一个SCK边缘之后的半个SCK周期设置SPIF。

4.5        SPI波特率生成

波特率的产生由一系列分频阶段组成。SPI波特率寄存器中的6位(SPPR2、SPPR1、SPPRO、SPR2、SPR1和SPRO)决定SPI模块时钟的除数,从而产生SPI波特率。

SPI时钟速率由波特率预选位(SPPR2-SPPRO)中的值与波特率选择位(SPR2-SPRO)中的值的乘积决定。模块时钟除数方程如图4-4所示。

当所有位都是清零(默认情况)时,SPI模块时钟除以2。当选择位(SPR2-SPRO)为001,预选位(SPPR2-SPPRO)为000时,模块时钟除数变为4。当选择位为010时,模块时钟除数变为8等。

当预选位为001时,由选择位确定的除数乘以2。当预选位为010时,除数乘以3,以此类推。以25mhz总线时钟为基准,各比特情况下的波特率计算如表3-4所示。这两组选择允许时钟被非2的幂次除以,以实现其他波特率,如除以6,除以10等。

波特率发生器只有在SPI处于主模式并且正在进行串行传输时才被激活。在其他情况下,分压器被禁用以降低Ipp电流。

4.6        特殊功能

4.6.1        SS Output

SS输出特性在传输时自动驱动SS引脚低电平以选择外部设备,在空闲时自动驱动高电平以取消外部设备的选择。

当选择SS输出时,SS输出引脚连接到外部设备的SS输入引脚。正常SPI操作时,SS输出仅在主模式下可用,通过断言SSOE和MODFEN位,如表3-2所示。

使能SS输出时,模式故障特性关闭。

注意:在多主机系统中使用SS输出特性时必须小心,因为模式故障特性不能用于检测主机之间的系统错误。

4.6.2        双向模式(MOMI or SISO) 

在SPI控制寄存器2中设置SPC0位时,选择双向模式(见表4-1正常模式和双向模式)。在这种模式下,SPI仅使用一个串行数据引脚用于与外部设备的接口。MSTR位决定使用哪个引脚。MOSI引脚成为主模式的串行数据I/O (MOMI)引脚,MISO引脚成为从模式的串行数据I/O (SISO)引脚。主模式下的MISO引脚和从模式下的MOSI引脚不被SPI使用。

每个串行I/O引脚的方向取决于BIDIROE位。如果引脚配置为输出,则来自移位寄存器的串行数据在引脚上被驱动出来。同一引脚也是移位寄存器的串行输入。

SCK是主模式的输出,从模式的输入。

SS是主模式的输入或输出,它总是从模式的输入。

双向模式不影响SCK和SS功能。

注意:在双向主模式下,启用模式故障,数据引脚MISO和MOSI都可以被SPI占用,尽管MOSI通常用于双向模式下的传输,而MISO不被SPI使用。如果出现模式故障,SPI自动切换为从模式,此时MISO被SPI占用,MOSI不再使用。如果MISO引脚用于其他目的,则必须考虑到这一点。

4.7        错误条件

SPI有一个错误条件:

        模式故障错误

4.7.1        Mode Fault Error

如果SS输入变低,而SPI被配置为一个主,它表明一个系统错误,其中多个主可能试图同时驱动MOSI和SCK线。在正常条件下这个条件没有被允许。如果设置了MODFEN位,SPI状态寄存器中的MODF位将自动设置。

在SPI处于主模式且MODFEN位被清除的特殊情况下,SPI不使用SS引脚。在这种特殊情况下,模式故障误差函数被抑制,MODF保持清除状态。

如果SPI系统配置为从机,则SS引脚是专用输入引脚。从模式下不会出现模式故障错误。如果发生模式故障错误,SPI将切换到从模式,但从输出缓冲区被禁用。因此SCK, MISO和MOSI引脚被强制为高阻抗输入,以避免与另一个输出驱动器发生冲突的任何可能性。正在进行的传输被中止,SPI被强制进入空闲状态。

在master模式下配置的SPI系统,如果在双向模式下出现模式故障错误,如果设置了MOMI(双向模式下的MOSI)的output enable,则清除该输出使能。从模式下配置的SPI系统,在双向模式下不会出现模式故障错误。

模式故障标志通过读取SPI状态寄存器(带有MODF设置)自动清除,然后写入SPI控制寄存器1。模式故障标志清除后,SPI恢复正常为主或从状态。

4.8       低功耗模式选项0

4.8.1        SPI in Run Mode

在运行模式下,SPI控制寄存器中的SPI使能(SPE)位清除,SPI系统处于低功耗禁用状态。SPI寄存器仍然可以访问,但是该模块的核心时钟被禁用。

4.8.2        SPI in Wait Mode

等待模式下的SPI操作取决于SPI控制寄存器2中SPISWAI位的状态。

如果SPISWAI为clear,表示CPU处于等待模式时SPI正常工作

设置SPISWAl后,CPU处于等待状态时,SPI时钟停止产生,SPI模块进入省电状态。

如果SPISWAI被设置并且SPI被配置为master,任何正在进行的传输和接收在等待模式进入时停止。SPI退出等待模式后,继续发送和接收。

如果设置了SPISWAI并将SPI配置为从站,则如果SCK继续从主站驱动,则正在进行的任何传输和接收都将继续进行。这使从服务器与主服务器和SCK保持同步。

如果主服务器在从服务器处于等待模式时发送了几个字节,从服务器将继续发送与等待模式开始时的操作模式一致的字节(即,如果从服务器当前正在向主服务器发送它的SPIDR,它将继续发送相同的字节)。否则,如果从服务器当前正在发送从主服务器接收到的最后一个字节,它将继续发送之前的每个主服务器字节)。

注意:当从服务器处于等待或停止模式时,期望从主服务器获得数据时,必须小心。即使移位寄存器将继续操作,SPI的其余部分被关闭(即SPIF中断将不会产生,直到退出停止或等待模式)。另外,在从SPI退出等待或停止模式之前,移位寄存器中的字节不会被复制到SPIDR寄存器中。只有在传输过程中进入或退出等待模式时,才会生成SPIF标志和SPIDR副本。如果从服务器以空闲模式进入等待模式,并以空闲模式退出等待模式,则不会发生SPIF或SPIDR拷贝。

4.8.3        SPI in Stop Mode

停止方式取决于系统。当模块时钟被禁用(保持高或低)时,SPI进入停止模式。如果SPI处于主模式并且在CPU进入停止模式时正在交换数据,则传输将被冻结,直到CPU退出停止模式。停止后,与外部SPI的数据正确交换。在从属模式下,SPI将与主模式保持同步。停止模式不依赖于SPISWAI位。

4.8.4        Reset

寄存器和信号的复位值在内存映射和寄存器一节中描述(参见第3节内存映射/寄存器定义),其中详细描述了寄存器和它们的位域。

如果在复位后以从模式进行数据传输,而没有对SPIDR进行写操作,那么它将传输垃圾,或者是复位前最后从主服务器接收到的字节。

重置后从SPIDR读取将总是读取一个字节的0。

4.8.5        Interrupts

SPI只有在使能SPI (SPICR1中的SPE位设置)时才发起中断请求。以下是SPI如何发出请求以及MCU应如何确认该请求的描述。中断矢量偏移和中断优先级依赖于芯片。

中断标志MODF、SPIF和SPTEF在逻辑上用于生成中断请求。

4.8.5.1 MODF

当主机检测到SS引脚上的错误时,发生MODF。MODF特性必须配置主SPI(参见表3-2 SS输入/输出选择)。一旦设置了MODF,当前传输中止,并改变以下位:

        MSTR=0, SPICR1主控位复位。

MODF中断反映在状态寄存器MODF标志中。清除该标志也将清除中断。当设置MODF标志时,此中断将保持活动状态。MODF有一个自动清除过程,在3.1.4 SPI状态寄存器中有描述。

4.8.5.2 SPIF

当接收到新数据并将其复制到SPI数据寄存器时,SPIF发生。一旦设置了SPIF,在对其进行服务之前,它不会清除。SPIF有一个自动清除过程,在3.1.4 SPI状态寄存器中描述。如果SPIF在下一个传输结束之前没有得到服务(即SPIF在另一个传输过程中保持活动),则后面的传输将被忽略,并且不会将新数据复制到SPIDR中。

4.8.5.3 SPTEF

SPTEF在SPI数据寄存器准备好接受新数据时发生。一旦SPTEF被设置,它在被服务之前不会被清除。SPTEF有一个自动清除过程,在3.1.4 SPI状态寄存器。


Section 5 初始化/应用程序信息

                                               

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值