KEA128用户参考手册.docx_第1页
KEA128用户参考手册.docx_第2页
KEA128用户参考手册.docx_第3页
KEA128用户参考手册.docx_第4页
KEA128用户参考手册.docx_第5页
已阅读5页,还剩140页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第30章 串行外设接口(SPI)30.1 介绍注意:芯片模块的具体实施细节详见芯片的配置信息。串行外设接口(SPI)模块为MCU和外设之间提供了全双工同步串行通信。这些外设包括各种微控制器,模拟 - 数字转换器,移位寄存器,传感器,和存储器等等。SPI主机模式可以在总线时钟2分频的波特率下运行,或是在从机模式下总线4分频的波特率下运行。SPI可使用软件查询方式或是中断方式来工作。注意:至于SPI工作的最大波特率,请参考芯片配置细节和器件的数据手册。为了匹配接收数据缓冲区,SPI包含了硬件匹配功能。30.1.1 特性SPI包含以下鲜明的特性:(1)主机模式或是从机模式运行。(2)全双工或单线双向模式。(3)可编程的传输波特率。(4)双缓冲发送和接收数据寄存器。(5)串行时钟相位和极性选择。(6)从机选择输出。(7)具有CPU的中断功能模式错误标志。(8)在等待模式下的SPI操作控制。(9)可选MSB优先或LSB优先转换。(10)接收数据缓冲区硬件匹配功能。30.1.2 操作模式SPI可在以下三种模式下工作:运行、等待和停止。运行模式:这是基本的操作模式。等待模式:在等待模式下SPI操作是一个可配置的低功耗模式,它被SPIx_C2寄存器的C2SPISWAI位控制。在等待模式下,如果C2SPISWAI位被清0,SPI会进入运行模式。如果C2SPISWAI位被置位,SPI就会进入节电模式,SPI时钟关闭。如果SPI被配置为主机模式,当前的任何传输都会停止,但会在CPU进入运行模式后恢复。如果SPI被配置为从机模式,字节接收和发送将继续,以便从机保持与主机的同步。停止模式:为了节电,SPI在外围设备被停止但内部逻辑仍然继续的停止模式下是非激活的。如果SPI作为一个主机,当前的任何传输都会停止,但会在CPU进入运行模式后恢复。如果SPI被配置成为一个从机,数据的发送和接收继续,以便从机保持与主机的同步。SPI在外围总线时钟停止且不保留内部逻辑的停止模式下是完全关闭的。当CPU工作在这些停止模式,所有的SPI寄存器被重置。详细操作模式见“低电模式选项”信息。30.1.3 结构图这一节包含结构图,它描述了SPI系统连接、SPI模块的内部组织、和用于控制主模式波特率的SPI时钟分频器。30.1.3.1 SPI系统结构图图30-1显示为两个MCU的SPI模块连接成主从模式。主机开启所有的SPI数据传输。在传输期间,主机发送数据给从机,同时从从机获得数据。数据移位器可以高效的传输数据,数据存放在两个SPI系统的SPI移位寄存器。SPSCK信号是主机时钟的输出,是从机的输入。主机通过把从机选择引脚拉低为低电平实现对该从机的选择。在这个系统中,主机已配置它的引脚作为从机选择输出。图30-1 SPI系统连接30.1.3.2 SPI模块结构图图30-2是SPI模块的结构图。SPI的核心要素是SPI移位寄存器。数据被写入到双缓冲的发送器(写入SPIx_D)和被转移到SPI移位寄存器,然后数据传送开始。在接收8位的数据时,该数据被转移到双缓冲的接收器,在那里数据可以从SPIx_D读取。引脚复用逻辑控制着MCU引脚和SPI模块的连接的对应关系。当SPI配置为主机时,时钟输出发送到SPSCK引脚,移位器输出被连接到MOSI,移位寄存器的输入则来自MISO引脚。当SPI配置为从机,SPSCK引脚被连接到时钟SPI输入端,转换器输出发送到MISO,输入来自MOSI引脚。在外部SPI系统中,所有SPSCK引脚简单地彼此连接。所有MISO引脚连在一起,所有MOSI引脚连在一起。外围设备上的这些引脚的名字通常略有不同。图30-2 没有FIFO的SPI模块结构图30.2 外部信号描述SPI合理的分配了四个端口引脚。这些引脚的功能依赖于SPI控制位的设置。当SPI(SPE=0)关闭,这四个引脚转换成其他的功能,它们就不再受SPI控制。30.2.1 SPSCK - SPI串行时钟当SPI模块设置成为从机,这个引脚是串行时钟的输入。当这个SPI作为一个主机时,这个引脚是串行时钟输出。30.2.2 MOSI 主机数据输出,从机数据输入当SPI设置为主机,SPI引脚控制零(SPC0)是0(非单线双向模式),这个引脚是串行数据输出。当SPI设置成为从机模式,并且SPC0是0,这个引脚是串行数据输入。如果SPC0是1就会选择单线双向模式,并且同时选择了主机模式,这个引脚变成双向数据I/O引脚(MOMI)。双向模式输出使能位决定这个引脚是作为一个输出(BIDIROE是0)还是作为一个输入(BIDIROE是1)。如果,SPC0是1并且被设置为从机模式,这个引脚就不会被SPI用来转换成为其他功能(依赖芯片配置)。30.2.3 MISO-主机数据输入,从机数据输出当SPI设置为主机,SPI引脚控制零(SPC0)是0(非单线双向模式),这个引脚是串行数据输入。当SPI设置成为从机模式,并且SPC0是0,这个引脚是串行数据输出。如果SPC0是1就会选择单线双向模式,且同时选择了主机模式,这个引脚变成双向数据I/O引脚(MOMI)。双向模式输出使能位决定这个引脚是作为一个输出还是作为一个输入。如果,SPC0是1并且选择了从机模式,这个引脚就不会被SPI使用,成为其他功能(依赖芯片配置)。30.2.4 从机选择当SPI被设置成为从机模式,当此引脚为低时,从机被选择。当SPI被设置作为主机,且模式错误使能关闭(MODFEN是0),这个引脚不被SPI使用或是被用作其他功能。当SPI被设置为主机,并且MODFEN是1,从机选择输出决定这个引脚是否作为错误的输入(SSOE是0)或是作为从机选择输出。30.3 地址映射和寄存器说明SPI有6个8位的寄存器来配置SPI,可以控制波特率,显示SPI的状态,控制一个SPI数据匹配值,发送或是接收数据。表30-1 SPI地址映射地址偏移绝对地址寄存器名称宽度访问方式重置值章节04007_6000SPI 控制寄存器 1 (SPI0_C1)8R/W04h30.3.1/49314007_6001SPI 控制寄存器 2 (SPI0_C2)8R/W00h30.3.2/49524007_6002SPI 波特率寄存器(SPI0_BR)8R/W00h30.3.3/49634007_6003SPI状态寄存器 (SPI0_S)8R20h30.3.4/49754007_6005SPI数据寄存器(SPI0_D)8R/W00h30.3.5/49874007_6007SPI匹配寄存器 (SPI0_M)8R/W00h30.3.6/49904007_7000SPI控制寄存器1(SPI1_C1)8R/W04h30.3.1/49314007_7001SPI 控制寄存器2 (SPI1_C2)8R/W00h30.3.2/49524007_7002SPI 波特率寄存器 (SPI1_BR)8R/W00h30.3.3/49634007_7003SPI状态寄存器 (SPI1_S)8R20h30.3.4/49754007_7005SPI数据寄存器 (SPI1_D)8R/W00h30.3.5/49874007_7007SPI匹配寄存器 (SPI1_M)8R/W00h30.3.6/49930.3.1 SPI控制寄存器1(SPIx-C1)这个可读/写寄存器包含SPI使能控制,中断使能和配置选项。地址: 4007_6000h base + 0h offset = 4007_6000h数据位D7D6D5D4D3D2D1D0读/写SPIESPESPTIEMSTRCPOLCPHASSOELSBFE复位00000000表30-2 SPI0_C1字段说明D7(SPIE)SPI中断使能:是SPRF和MODF使能位。这位使能SPI接收区满(SPRF)中断和模式错误(MODF)中断。0:SPRF和MODF中断是禁止的只能使用查询方式;1:当SPRF或MODF为1时,请求一次硬件中断。D6(SPE)SPI系统使能。这位使能SPI系统并且使SPI端口引脚变成SPI系统功能。如果SPE被清0,则SPI关闭并且强制进入一个暂停状态,所有的状态位被重置。0:SPI系统禁止。1:SPI系统启用。D5(SPTIE)SPI发送中断使能。它是SPI发送缓冲区空(SPIEF)的中断使能。当SPI发送缓冲是空时中断发生。0:SPTEF中断禁止(使用查询方式),1:当SPTEF是1时,请求硬件中断。D4(MSTR)主/从模式选择。该位选择主模式或从模式操作。0:SPI模块配置为从SPI设备,1:SPI模块配置为主SPI设备。D3(CPOL)时钟极性。这位选择一个反转的或是非反转的SPI时钟。要想在SPI模块之间传输数据,SPI模块都必须有完全一样的CPOL值。这位可方便地将一个来自主机SPI或是通向从机SPI的串行时钟信号进行反转。详细内容,请参阅“SPI时钟格式”说明。0:高电平有效(空闲状态为低电平)1:低电平有效(空闲状态为高电平)D2(CPHA)时钟相位。这位用来选择两种时钟格式中的一种,来跟不同的同步串行外设通信。详细信息请参考“SPI时钟格式”。0:SPSCK的第一个边缘发生在第一位数据周期的中间,1:SPSCK的第一个边缘发生在第一位数据周期的开始。D1(SSOE)从机选择输出使能。这位与C2寄存器中的模式错误使能位(MODFEN)及主从控制位(MSTR)的组合,决定了引脚的功能。0:当MODFEN为0:在主机模式下,引脚功能为通用I / O(非SPI)。在从机模式下,引脚被用来从机选择输入。当MODFEN是1:在主机模式下,引脚功能为,错误输入模式。在从机模式下,被设置为从机选择输入。1:当MODFEN为0:在主机模式下,引脚功能为通用I / O(非SPI)。在从机模式下,引脚的功能是从机选择输入。当MODFEN是1:在主机模式下,引脚的功能是自动输出。在从机模式下:引脚功能是从机选择输入。D0(LSBFE)LSB优先(移位方向)。这位不影响数据寄存器中的MSB和LSB的位置。MSB位一直在数据寄存器的第八位。0:SPI串行数据传输开始于最高有效位。1:SPI串行数据传输开始于最低有效位。30.3.2 SPI控制寄存器2(SPIx-C2)该读/写寄存器是用来控制SPI系统的可选功能。第6位是不起作用的并始终为0。地址: 4007_6000h base + 1h offset = 4007_6001h数据位D7D6D5D4D3D2D1D0读/写SPMIEReservedReservedMODFENBIDIROEReservedSPISWAISPC0复位00000000表26-3 SPI0_C2字段说明D7(SPMIE)SPI匹配中断使能。这是一个中断使能位,它使能SPI的硬件匹配中断功能(SPMF)。0:来自SPMF中断禁止(使用轮询)。1:当SPMF为1时,请求一次硬件中断。D6(Reserved)保留D5(Reserved)保留D4(MODFEN)主模式故障功能使能位。当SPI配置为从机模式下,该位没有意义或效果。(引脚是从机选择输入。)在主模式下,该位决定引脚如何使用。有关详细信息,请参阅SSOE位在C1寄存器描述。0:模式错误功能禁止,主机引脚恢转换为通用I / O控制。1:模式错误功能启用,主机引脚作为模式默认输入或从机选择输出。D3(BIDIROE)双向模式输出使能位。当双向模式启用, SPI引脚控制0(SPC0)会被设置为1,BIDIROE位决定SPI数据输出驱动器是否启用单双向SPI I/ O引脚。根据是否将SPI配置为主机或从机,它使用MOSI(MOMI)或MISO(SISO)引脚,分别为单SPI数据I / O引脚。当SPC0是0时,BIDIROE没有意义或效果。0:禁止输出驱动器,所以SPI数据I / O引脚配置为输入。1:SPI I / O引脚使能为输出。D2(Reserved)保留D1(SPISWAI)在等待模式下SPI停止。这位被用于等待模式下的节电。0:SPI时钟在等待模式下,继续运行。1:MCU进入等待模式,SPI时钟停止。D0(SPC0)SPI引脚控制0。该位使能双向引脚配置。0:SPI使用分开的引脚用于数据输入和数据输出(引脚模式是正常的)。在主模式下操作:MISO是主机接收数据引脚,MOSI是主机发送数据引脚。在从模式下操作:MISO是从机输出引脚,MOSI是从机输入引脚。1:SPI配置为单线双向操作(引脚模式是双向的)。在主模式下的操作:MISO不被SPI使用。当BIDIROE为0时,MOSI是主机的输入,或是当BIDIROE为1时,会被设置为输入输出。 在从模式下的操作:当BIDIROE为0,MISO是从机的输入。BIDIROE是1时,作为从机的输入输出。MOSI不被SPI使用。30.3.3 SPI波特率寄存器(SPIx_BR)使用该寄存器为SPI主机来设置预分频因子和比特率。该寄存器可以在任何时间读出或写入。地址: 4007_6000h base + 2h offset = 4007_6002h数据位D7D6D5D4D3D2D1D0读0SPPR2:0SPPR3:0写复位00000000表30-4 SPI0_BR字段说明D7Reserved这个字段是保留的。只读字段保留,值一直为0。D6D4(SPPR2:0)SPI波特率预分频因子。这3位字段,选择其中在8个因子中的一个因子来设置SPI波特率预分频器。该预分频器的输入总线频率时钟(BUSCLK)。该分频器的输出驱动是SPI波特率分频器的输入。有关详细信息,请参阅“SPI波特率发生器”。000波特率预分频因子为1。001波特率预分频因子为2。010波特率预分频因子为3。011波特率预分频因子为4。100波特率预分频因子为5。101波特率预分频因子为6。110波特率预分频因子为7。111波特率预分频因子为8。D3D0(SPR3:0)SPI波特率分频因子。这4位字段,选择九个SPI波特率因子中的一个。该因子的输入来自SPI波特率预分频器。“SPI波特率发生器”的详细信息,请参阅的描述。0000波特率除数是2。0001波特率除数是4。0010波特率除数是8。0011波特率除数是16。0100波特率除数是32。0101波特率除数是64。0110波特率除数为128。0111波特率除数为256。1000波特率除数为512。其他的都保留。29.3.4 SPI状态寄存器(SPIx_S)这个寄存器包含只读状态位。对它写没有意义。注意从0位到第三位是没用的,一直是0。地址: 4007_6000h base + 3h offset = 4007_6003h数据位D7D6D5D4D3D2D1D0读SPRFSPMFSPTEFMODF0写复位00000000表30-5 SPI0_S字段描述D7(SPRF)SPI接收缓冲区满标志。SPRF在SPI传输完毕之后被设置,指示SPI的数据寄存器可以被读取。SPRF通过读SPRF来清除,然后读取SPI数据寄存器。0:无数据在接收数据缓冲区。1:接收数据缓冲区中有数据。D6(SPMF)SPI硬件匹配标志。当SPRF被置位后,如果接收数据缓冲区中的值跟M寄存器中的值匹配时,SPMF被设置。如果要想清除该标志,读并写1。0:接收数据缓冲区的值不匹配M寄存器中的值。1:接收数据缓冲区的值匹配M寄存器中的值。D5(SPTEF)SPI发送缓冲区空标志。该位被置位。当发送DMA请求关闭时(TXDMAE为0),通过读S寄存器,SPTEF被清除,并且SPTEF被设置,然后写一个数据值到D。SPTEF被设置为1时,在写数据到D寄存器之前,S寄存器必须被读。否则,写入被忽略。所有的数据从发送缓冲区传输到发送移位寄存器后,SPTEF被自动设置。对于不忙的SPI,写入到数据寄存器中的数据几乎立刻被转移到移位器,因此,SPTEF在两个总线周期内被设置,从而允许在数据队列中的数据被二次设置。在移位寄存器中的数据被发送完成之后,在发送寄存器等待的数据会自动移位到移位器,SPTEF被设置来提示在发送寄存器现有的空间可以提供给新数据。如果没有新数据在发送缓冲区中等待,SPTEF只是简单地保持设置,并不会把数据从缓冲器移动到移位寄存器。如果传输没有停止,数据会持续不断的被发送。0:SPI发送缓冲区非空。1:SPI发送缓冲区空。D4(MODF)主模式故障标志。如果SPI被配置为一个主机,MODF被置位,表明一些其他SPI设备也配置为主机。仅当MSTR是1,MODFEN是1,和SSOE是0,引脚作为一个模式故障输入,否则MODF将永远不会被置位。通过读MODF,清除MODF。如果它是1,接着把SPI控制寄存器写1。0:无模式故障错误。1:检测到模式故障错误。D3D0该字段被保留。这个只读字段是保留的,值为0。30.3.5 SPI数据寄存器(SPIx_D)该寄存器是SPI数据的输入和输出数据寄存器。对这个寄存器的一次写操作会把数据写到发送数据缓冲区,从而使数据能够排队并发送。当SPI配置为主机,停留在传输数据寄存器排队等待的数据,在前一数据发送完成后,会立刻被发送。当发送数据缓冲区已经准备好接收下一发送数据时,S寄存器的SPTEF位会指示出来。在写入到SPI数据寄存器之前,要想设置SSPTEF,S寄存器必须被读。否则,该写操作被忽略。在下一个数据被传输之前,SPRF被置位之后,SPI数据寄存器可以在任何时候被读取。在新的接收没有完成之前是不能读取接收数据缓冲器的数据的,这会导致一个溢出情况,来自新接收的数据可能被丢失。新数据丢失,是因为数据接收缓冲器仍然装有以前的数据,它还没有准备好接收新数据。芯片中没有指示溢出的状态位,所以程序设计者在接收一个新数据之前必须读取前一数据。地址: 4007_6000h base + 5h offset = 4007_6005h数据位76543210读/写数据位s7:0复位00000000表26-6 SPI0_D字段说明字段说明70 数据位s7:0数据(低字节)30.3.6 SPI匹配寄存器(SPIx_M)该寄存器包含硬件比较值。当接收到的值在SPI接收数据缓冲器等于这个硬件比较值,SPI匹配标志(SPMF)被设置。地址: 4007_6000h base + 7h offset = 4007_6007h数据位D7D6D5D4D3D2D1D0读/写数据位s7:0复位00000000表26-7 SPI0_M字段说明字段说明70 数据位s7:0硬件比较值(低字节)30.4 功能说明本节描述了模块的功能。30.4.1 一般通过设置SPI控制寄存器1中的SPI使能位,来启动SPI系统。C1SPE位被置位,四个相关的SPI端口引脚用于SPI的功能为:(1)从机选择()。(2)串行时钟(SPSCK)。(3)主出/从入(MOSI)。(4)主如/从出(MISO)。当SSPTEF = 1时,通过读取SPI状态寄存器(SPIx_S),可以初始化SPI主设备的SPI传输,然后将数据写入发送数据缓冲区(写入到SPIxD)。当传输完成时,接收到的数据被移动到接收数据缓冲区。当发送数据时向SPIxD寄存器写数据即可,当接收数据时读取SPIxD寄存器即可。在控制寄存器(SPIx_C1)中的时钟相位控制位(CPHA)和SPI的时钟极性控制位(CPOL)配合使用来选择要使用的四种可能的时钟格式。CPOL位只需选择一个非反相或反向的时钟。C1CPHA位通过在奇数编号或偶数编号的SPSCK信号边沿采样,来适应两个在根本上完全不同的协议。SPI可以配置成为主设备或是从设备。SPI控制寄存器1中的C1MSTR位被置1,选择主机模式;当MSTR位被清0,从机模式被选择。30.4.2 主模式当C1MSTR位被置位后,SPI工作在主模式下。只有主SPI模块才可以起始传输。通过阅读SPIx_S寄存器传输开始,当SSPTEF = 1时,向SPI数据数据寄存器写数据。如果移位寄存器是空的,字节立即转移到移位寄存器。在串行时钟的控制下,数据开始移出到MOSI。(1)SPSCKSPR3,SPR2,SPR1和SPR0波特率选择位配合SPI波特率寄存器中的SPPR2,SPPR1,SPPR0的波特率预选位,来控制波特率发生器和确定传输速度。SPSCK引脚为SPI时钟输出。通过SPSCK引脚,主机的波特率发生器控制外设的移位寄存器。(2)MOSI,MISO引脚在主模式下,该功能的串行数据输出引脚(MOSI)和串行数据输入引脚(MISO)由SPC0 BIDIROE控制位确定。(3)引脚如果C2MODFEN和C1SSOE位被置位,引脚被配置为从机选择输出功能。在传输时输出变成低电平,SPI处于闲置状态时变成高电平。如果C2MODFEN和C1SSOE被清除,引脚配置为输入模式故障检测。如果输入变成低电平,此时又有一个主机尝试驱动MOSI和SPSCK时,就会指示错误。在这种情况下,SPI立即切换到从机模式清除C1MSTR位,并禁止从机输出缓冲MISO(或是在双向模式的SISO)。因此,所有输出将终止,SPSCK,MOSI和MISO成为输入。如果传输过程中,当模式故障发生时,发送将被终止,SPI被强制进入空闲状态。这还设置在SPI状态寄存器(SPIx_S)中的模式故障模式故障标志位(MODF)。当SMODF标志被设置,SPI中断使能位(SPIE)被设置,SPI中断序列会请求。在主模式下,当写入SPI数据寄存器发生时,有一个半SPSCK周期的延时。延迟后,SPSCK在主模式下启动。依据SPI时钟相位的时钟相位格式(在SPI控制寄存器1的CPHA位),其余部分的传输操作略有不同(见SPI时钟格式)。注意:随着C1CPOL、C1CPHA、C1SSOE、C1LSBFE、C2MODFEN、C2SPC0和C2BIDIROE位的变化,C2SPC0位被置位,主机模式的SPPR2SPPR0和SPR3SPR0会放弃传输过程并且强制SPI进入闲置状态。远程从站无法检测到这一点,因此,主机要确保远程从站设置回到空闲状态。30.4.3 从模式SPI控制寄存器的MSTR位被清除,SPI工作在从模式下。(1)SPSCK在从模式下,SPSCK是从主SPI时钟输入的。(2)MISO,MOSI引脚在从模式下,串行数据输出引脚(MISO)和串行数据输入引脚(MOSI),是由SPI控制寄存器2中的SPC0位和BIDIROE位确定的。(3)引脚引脚是从机选择输入。在一个数据传输发生之前,从机的SPI的引脚必须是低电平。必须保持低电平,直到传输完成。如果变高,SPI被强制进入空闲状态。输入也控制串行数据输出引脚。如果高(未选中),串行数据输出引脚为高阻抗。如果为低,在SPI数据寄存器中数据中的第一比特被驱动出串行数据输出引脚。此外,如果从机还没有选择(是高电平),然后SPSCK输入被忽略和没有SPI移位寄存器发生。虽然SPI可以在全双工下工作,但一些SPI外设只能够在从机模式下接收SPI数据。对于这些简单的设备,就没有串行数据输出引脚。注意:当使用具有双向传输的外设时,注意不要同时使能两个接收器,这两个接收器的串行输出驱动同样的系统串行数据输出线。只要不超过一个从器件驱动系统从器件的串行数据输出线,有可能几个从设备接收来自主机相同的信息,尽管主机不会接收所有收到数据的返回信息。如果SPI控制寄存器1的CPHA位是明确的,奇数SPSCK边缘上输入造成串行数据输入引脚的数据被锁存。根据LSBFE位,偶数边导致先前来自串行数据输入针的数据被锁存,并转移到SPI移位寄存器的LSB或MSB。如果C1CPHA位被置位,偶数边缘上SPSCK输入导致的串行数据输入引脚数据被锁存。根据于C1LSBFE比特位,奇数边会导致以前串行数据输入引脚的值被锁存,并转移到SPI移位锁存LSB或MSB。当C1CPHA被设置,第一个边缘被用来获得在串行数据输出引脚的第一个数据。当C1CPHA是明确的输入为低电平(从选择),SPI数据的第一位被驱动到串行数据输出引脚。第八移位后,转移认为完成,接收到的数据被传输到SPI数据寄存器。表示传送完成后,SPI状态寄存器的SPRF标志被设置。注意:改变C2BIDIROE的同时C2SPC0位置1,从机模式下的C1CPOL、C1CPHA、C1SSOE、C1LSBFE和C2MODFEN将破坏正在进行的发送,一定要加以避免。30.4.4 SPI时钟格式为了适应从不同的各种各样的同步串行外设制造商,SPI系统含有一个时钟极性位(CPOL)和控制寄存器1的时钟相位(CPHA)控制位来选择4个时钟格式的数据传输。C1CPOL选择性插入与时钟串联的反向信号。C1CPHA在时钟和数据之间选择两种不同的时钟相位。图30-3显示了当CPHA = 1时的时钟格式。图的顶部为八位时序作为参考,第一位开始于SPSCK的边缘,第八位在第八个SPSCK之后的二分之一处结束。MSB第一行和LSB第一行显示SPI数据位的顺序,取决于LSBFE的设置。两个时钟极性变化被展示,但是取决于CPOL的值,这些波形只有一个适用的具体的传输。SAMPLE IN波形适用于从模式MISO的输入,或是主机的 MOSI输入。MOSI波形应用于主MOSI输出引脚和MISO波形应用于的MISO从站的输出。 OUT波形适用于从机来的从机选择输出(提供MODFEN和SSOE =1)。在开始传输的开始的二分之一SPSCK周期,主机输出变为低电平,在传输的第八位结束时,又变回高电平。 IN波形应用于一个从机的从机选择输入。图30-3 SPI时钟格式(CPHA = 1)当C1CPHA= 1时,当变为低电平有效的从机开始驱动它的MISO输出,直到第一个SPSCK边沿没有被定义的数据。第一个SPSCK边缘转移了来自移位器的第一位数据到主机的MOSI输出。或是从机的MISO输出。下个SPSCK边沿会使主机和从机采样MISO和MOSI输入数据位的值。在第三个SPSCK的边缘,SPI移位器会移动一个比特位(刚刚被采集到的)和转移第二个数据值到移位器的另一个终端到主机或是从机的MOSI和MISO输出。当C1CPHA= 1时,从机的输入并不需要去其变为高电平之间的传输。在这个时钟格式,一个后端到后端传输可以发生,如下:(1)一种传输正在进行中。(2)在一个正在进行的传输完成之前,一个新的数据字节被写入到发送缓冲区。(3)当进行中的传输完成后,新准备的数据字节是立即被发送。在这两个连续的传输,没有任何停顿插入,引脚保持低。图30-4显示了当C1CPHA= 0时的时钟格式。在图片的顶部,八位的时序被显示作为参考,随着从机被选中(变低)第一位开始,在最后一个SPSCK,第八位结束。MSB第一和LSB第一线显示了SPI数据位的顺序,它设置取决于LSBFE。两个时钟极性变化被展示,但是取决于CPOL的值,这些波形只有一个适用的具体的传输。SAMPLE IN波形适用于从模式MISO的输入,或是主机的 MOSI输入。MOSI波形应用于主MOSI输出引脚和MISO波形应用于的MISO从站的输出。 OUT波形适用于从机来的从机选择输出(提供C2MODFEN和C1SSOE=1)。在开始传输的开始的二分之一SPSCK周期,主输出变为低电平,在传输的第八位结束时,又变回高电平。 IN波形应用于一个从机的从机选择输入。图30-4 SPI时钟格式(CPHA = 0)当C1CPHA= 0,从机开始驱动它的MISO输出第一个数据位值(取决于LSBFE的MSB或LSB),当变为低电平有效。第一个SPSCK边缘会分别导致主机和从机来采集MIOS和MOSI的输入值。当C1CPHA= 0,从机的输入必须转向无效电平在传输之间。30.4.5 SPI波特率发生器图30-5所示,SPI波特率发生器的时钟源是总线时钟。3分频的的位(SPPR2:SPPR1:SPPR0)选择预分频因子为1,2,3,4,5,6,7或8。三速率选择位(SPR3:SPR2:SPR1:SPR0)将输出预分频器的阶段2,4,8,16,32,64,128,256,或512,以获得内部SPI主模式比特率时钟。只有当SPI主模式和串行转移正在发生,波特率发生器被激活。在其它情况下,除法器被关闭,以降低IDD电流。波特率除数计算公式如下(除了那些在SPI波特率除数表中的保留组合)。BaudRateDivisor = (SPPR + 1) 2(SPR+1)波特率可以用下面的公式计算:BaudRate = BusClock / BaudRateDivisor图30-5 SPI波特率发生器30.4.6 特殊功能以下部分显示了模块的特殊功能。30.4.6.1 输出输出功能在传输过程中自动将引脚拉为低电平用来选择外部设备,在空闲时将引脚置成高电平。当选择输出时,输出引脚连接到外部设备的输入引脚。仅在主机模式且正常的SPI操作,通过触发C1SSOE和C2MODFEN位(就像在C1SSOE位描述的一样),输出是可获得的。而输出使能时,模式故障功能被禁用。注意:使用时要小心输出功能,在多主机系统,因为模式故障功能(检测主站之间的系统错误)不可用。30.4.6.2 双向模式(MOMI或SISO)当SPI控制寄存器中的SPC0位被设置,那么就选择了双向模式。在这种模式下,SPI的接口只使用一个串行数据引脚与一个或多个外部设备相连,C1MSTR位决定使用哪个引脚。主模式下的MOSI引脚成为串行数据I / O(MOMI)引脚,从模式下MISO引脚成为串行数据I / O(SISO)引脚。在主模式下,主机的MISO引脚和从机的MOSI引脚不使用。图30-6 正常模式和双向模式每一个串行I/O引脚的方向取决于C2BIDIROE位。如果引脚配置作为一个输出端,移位寄存器的串行数据就会被驱动出该引脚上。同样这个引脚也是接收寄存器的输入引脚。SPSCK是主机的输出和从机下的输入。为输入或输出(主模式),它始终是为从机的输入模式。双向模式不会影响SPSCK和功能。注意:双向主模式下,模式故障功能启用,虽然MOSI通常用于传输双向模式,MISO不被SPI使用,但是此时SPI可占据两个数据引脚MISO,MOSI。如果模式发生故障时,会自动切换到SPI从机模式。在这种情况下,MOSI被SPI所占用,MISO不使用。要注意这种情况,那就是MISO引脚用于其他功能。30.4.7 错误条件SPI模块有一个错误条件:模式故障。30.4.7.1 模式故障SPI配置为主机,如果输入变低电平时,它表示一个系统错误,有多个主设备尝试着同时驱动MOSI和SPSCK线。在正常情况下,这种情况是不允许的,它设置SPI状态寄存器的MODF位,并自动置位C2MODFEN位。在特殊情况下,SPI在主机模式下,C2MODFEN位被清零,引脚不被SPI使用。在这种特殊情况下,模式故障功能关闭和MODF保持零。如果SPI系统被配置为从机,引脚是一个专用的输入引脚。模式故障错误不会发生在从机模式。如果模式故障发生时,切换到从机模式的SPI,但是从机输出缓冲关闭是个例外。因此,SPSCK,MISO和MOSI引脚被强制成为高阻抗输入,以避免与另一个输出驱动器任何可能的冲突。正在进行的传输被放弃,SPI被强制进入空闲状态。如果模式故障发生在双向模式,SPI被配置为主机模式,如果它被设置,输出使能MOMI(MOSI在双向模式下)被清零。在从机模式,在SPI的双向模式没有模式错误发生。先读SPI状态寄存器然后写SPI控制寄存器1来清除模式错误。如果模式故障标志清零,SPI成为一个正常的主机或再次成为从机。30.4.8 低功率模式选项本节介绍了低功率模式选项。30.4.8.1 运行模式SPI在运行模式下,在SPI控制寄存器的SPI系统使能(SPE)位清零,SPI系统处于低功耗,关闭状态。SPI寄存器仍然可以访问,但该模块的核心时钟被禁用。30.4.8.2 等待模式SPI在等待模式下,SPI操作取决SPI控制寄存器2的SPISWAI状态。(1)在等待模式下,如果C2SPISWAI位被清除,SPI则进入正常工作状态。(2)CPU在等待模式下,如果设置了C2SPISWAI,SPI时钟产生停止和SPI模块进入电源保护状态。(3)如果C2SPISWAI被设置,并且被配置为主机,任何发送和接收都会被停止。SPI退出等待模式,传输和接收恢复。(4)如果C2SPISWAI被设置,并且SPI被配置成为一个是从机,如果来自主机的时钟继续,任何发送和接收都会继续。这样可以使从机同步到主站和SPSCK。如果主机发送数据,而从机处于等待模式时,从机会继续发送在等待模式开始时相一致的数据。(那也就说,如果从站正在将其SPIx_D发送给主站,它继续发送相同的字节。要不然,如果从机正在发送最后一个来自主机的数据,它就会持续的发送每一个来自主机的数据)。注意:必须得注意来自主机的数据,这时从机在等待模式或停止模式,外设总线时钟停止但是内部逻辑继续。尽管移位寄存器继续运行,但剩下的SPI被关掉。(也就是说,直到退出停止或等待模式,SPRF才产生中断)。直到SPI已退出等待或停止模式,数据从移位寄存器才复制到SPIx_D寄存器的。如果传输期间进入或是退出等待模式,SPRF标志和SPIx_D副本仅仅会产生。如果从机在空闲模式进入等待,或是在空闲模式下退出等待模式,SPRF和SPIx_D副本都不发生。30.4.8.3 SPI在停止模式在停止模式下外设总线时钟停止,但根据SPI系统,内部逻辑操作保留。停止模式不依赖于SPISWAI位。一旦进入这种类型的停止模式时,SPI模块时钟停止(高或低)。(1)CPU进入停止模式下,如果SPI主模式正在交换数据,传输一直冻结到CPU退出停止模式。在退出停止模式后,来自外设的SPI的数据或是发送给外设的数据会被正确的传输。(2)在从模式下,SPI与主模式同步。在停止模式,SPI是完全禁止的,外设总线时钟停止,内部逻辑状态不会保留。从这种停止模式退出后,所有寄存器被重置为它们的默认值,SPI模块必须被重新初始化。30.4.9 复位在存储映射和寄存器描述内容中,说明了寄存器的重置值和信号,并且详细的说明了寄存器和位字段的细节。(1)如果数据传输发生在从模式下复位后没有写SPIx_D,被传输的数据由“垃圾”或从主机接收的最后来自复位前的数据组成。(2)复位后,读SPIx_D总是返回零。30.4.10 中断只有当SPI被使能(SPE位SPIx_C1寄存器设置),SPI中断请求才会产生。下面说明如何SPI发出请求中断和MCU如何确认这一中断请求的。中断向量偏移和中断优先级依赖芯片。SPI系统中有四个标志位,三个中断屏蔽位,和一个中断向量。SPI中断使能屏蔽使能来自SPI接收器满标志(SPRF)和模式错误标志(MODF)。该SPI发送中断使能来自SPI传输缓冲空标志的中断。SPI发送中断使能屏蔽使能来自SPI匹配标志中断。当标志位中一位被设置,相关的中段屏蔽位被设置,一个硬件中断请求被发送到CPU。如果中断屏蔽位被清除,软件可以查询相关的标志位,而不是用中断。SPI服务路由应该检查标志位来确定哪一个事件引起中断。在ISR返回之前,服务路由应该也清除此位。30.4.10.1 MODF当主机引脚上检测到一个错误,MODF发生。SPI必须配置为MODF特征(见C1SSOE位的描述)。一旦MODF设置,中止当前的数据传输,SPIx_C1寄存器的主位(MSTR)重置为0。MODF中断被反应在状态寄存器的MODF标志位。清除标志位也就清除了中断。MODF标志位被设置,中断一直都是激活的。MODF有一个自动的清除过程, SPI状态寄存器中对它进行了描述。30.4.10.2 SPRF当数据被接收后,SPRF中断发生,并且复制到SPI接收数据缓冲区。SPRF被设置直到它被服务,它才会被清除。SPRF有一个自动清除的过程,SPI状态寄存器中给出了细节。如果在下一次传输结束之前,SPRF没有被服务,接下来的传输(SPRF仍然活跃在整个另一传输过程中)将被忽略掉,那么就没有新数据被复制到数据寄存器。30.4.10.3 SPTEFSPI发送缓冲器已准备好接收新的数据时,SPTEF会发生。当SPTEF被设置直到它被服务之后,才会被清除。SPTEF有一个自动的清除过程,在SPI状态寄存器中给出了细节。30.4.10.4 SPMF接收数据缓冲的数据等于在SPI匹配寄存器的数据时,SPMF发生。30.4.10.5 在低功耗模式下的异步中断当CPU在等待模式,或是停止模式,SPI模块接收到一个传输数据,SPI模块会生成一个异步中断来唤醒在低功耗下的CPU。仅仅当下面所有条件满足时,这个模块才会生成异步中断。(1)C1SPLPIE位被设置为1。(2)CPU处于等待模式,在这种情况下,C2SPISWAI位必须是1或停止模式下的外设总线时钟停止,但内部逻辑状态保留。(3)SPI模块在从模式。(4)接收传输结束。在中断唤醒CPU后,外设总线再次被激活,SPI模块把从移位器接收到的数据复制到数据寄存器,并且产生标志。在唤醒阶段,从主连续传输会破坏第一个接收到的数据。30.5 初始化/应用信息本节将讨论如何初始化和使用SPI的一个例子。30.5.1 初始化序列在SPI模块可用于通信之前,必须进行初始化过程,如下所示:(1)更新控制寄存器1(SPIx_C1),使能SPI系统和启用控制中断。该寄存器还可设置SPI作为主站或从站,确定时钟相位和极性,并配置SPI的主要选项。(2)更新控制寄存器2(SPIx_C2),来使能SPI功能,像SPI匹配中断特性功能,主模式错误功能,双向模式输出和控制,还有别的一些可选功能。(3)更新波特率寄存器(SPIx_BR),为SPI主模式,设置预分频器和比特率分频因子。(4)如果硬件匹配中断是使能的,用新的值来更新的硬件匹配寄存器(SPIx_M)。(5)在主模式下,当SSPTEF = 1时读SPI-S,接着写传输数据寄存器(SPIx-D)来开始传输。30.5.2 伪代码示例在这个例子中,SPI模块设置为主机模式下,只使能了硬件匹配中断。SPI运行的最高传输速率是总线时钟除以2。SPI时钟的时钟相位和极性位被配置为高电平有效,且SPSCK的首个边沿出现在一次数据传输的首个周期的开始阶段。SPIx_C1=0x54(%01010100)第7位 SPIE =0禁止接收和模式故障中断第6位 SPE = 1使能SPI系统第5位 SPTIE=0禁止SPI发送中断第4位 MSTR = 1设置SPI模块作为主SPI设备第3位 CPOL =0配置SPI时钟为高电平有效第2位 CPHA =1,首先SPSCK边缘上的第一个数据传输周期的开始第1位 SSOE = 0时,决定引脚的功能启用模式故障第0位 LSBFE=0 SPI串行数据传输开始与最显著的位。SPIx_C2 = 0x80(%10000000)第7位 SPMIE=1 SPI硬件匹配中断使能第6位 =0 未实现第5位 = 0 保留第4位 MODFEN =0禁止模式故障功能第3位 BIDIROE =0 SPI数据I / O引脚作为输入第2位 = 0 保留第1位 SPISWAI=0 SPI时钟工作于等待模式第0位 SPC0=0,则使用单独的引脚用于数据的输入和输出SPIx_BR = 0x00(%00000000)第7位 =0保留第6:4位 = 000集预分频因子为1第3:0位 = 0000,设置

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论