SSI对外设接收的数据进行串→并转换。CPU可访问数据、控制与状态信息。发送/接收通道都内置了FIFO存储器,在发送与接收模式下最多可支持存储8个16位数。另外,SSI还支持μDMA接口,它可将发送和接收FIFO配置成μDMA模块的目的/源地址。
1.位速率的产生
SSI模块内置可编程的位速率时钟分频器与预分频器来产生串行输出时钟。SSI模块支持2MHz及更高的位速率,但最高位速率由外设决定。
串行位速率由输入时钟(SysClk)分频后得到。首先,使用2~254之间的偶数分频值CPSDVSR对输入时钟进行分频,它可在SSI时钟预分频寄存器(SSICPSR)中进行配置。而后再使用1~256之间的一个数(即1+SCR)对时钟进一步分频,这里的SCR在SSI控制0寄存器(SSICR0)中配置。
输出时钟SSIClk的频率定义如下:
SSIClk=SysClk/(CPSDVSR*(1+SCR))
注意:在主机模式下,系统时钟必须至少为SSIClk的两倍,而SSIClk不能超过25MHz。在从机模式下,系统时钟必须至少为SSIClk的12倍,而SSIClk不能超过6.67MHz。
2.FIFO操作
(1)发送FIFO
一般发送的FIFO是一组16位宽、8单元深的先入先出缓冲区。CPU通过写SSI数据寄存器(SSIDR)将数据写入发送FIFO中,且数据在由发送逻辑读出之前一直保存在发送缓冲区中。
当SSI配置为主机或从机时,并行数据将进行并→串转换,然后在通过SSITx引脚发送给相应的从机或主机之前,先将这些数据写入到发送FIFO中。
当工作于从机模式时,SSI模块在每次主机启动通信后才发送数据。若发送FIFO为空,则在主机启动会话时SSI模块将把发送到FIFO中的最早一个数据发送出去。假设从机启动SSI模块时钟以来,写入到发送FIFO中的有效数据不足8位,则SSI模块将发送0。因此,FIFO中必须包含按照会话要求的有效数据。SSI模块可以在发送FIFO为空时产生中断或μDMA请求。
(2)接收FIFO
一般SSI接收FIFO是一组16位宽、8单元深的先入先出缓冲区。从串行接口接收到的数据在由CPU读出之前一直保存在缓冲区中,CPU通过读SSIDR寄存器来访问读入FIFO的数据。在SSI配置为主机或从机时,首先将从SSIRx引脚接收到的串行数据保存起来,然后并行加载到相应的从机或主机接收FIFO中。
3.中断
SSI将在出现下列情况时产生中断:
①发送FIFO服务(发送FIFO半满或更低)。
②接收FIFO服务(接收FIFO半满或更高)。
③接收FIFO超时。
④接收FIFO溢出。
⑤传输结束。
⑥接收DMA传输完成。
⑦发送DMA传输完成。
在发送给中断控制器之前,所有中断事件先进行一次逻辑或操作,因此同一时刻不管实际发生了多少个SSI中断事件,SSI模块都只向中断控制器发出一个中断请求。将SSI中断屏蔽寄存器(SSIIM)中相应的位清零来单独屏蔽这4个中断中的一个。将相应的屏蔽位置位来使能中断。
SSI模块不仅提供组合的中断输出,而且还分别提供各个中断源的输出,所以在处理中断时既可采用全局中断处理子程序,也可采用模块化的设备驱动程序。动态的发送/接收数据流中断与静态的状态中断相互独立,便于即时响应FIFO触发深度进行读写操作。若想了解独立中断源的状态,可查询SSI原始中断状态寄存器(SSIRIS)和SSI屏蔽中断状态寄存器(SSIMIS)。
接收FIFO设有32个SSIClk时钟周期的超时周期,只要接收FIFO从空状态变为非空状态将开启超时周期。若RXFIFO在后续的32个时钟内再次变为空状态,才会将其中止并复位。则中断服处理程序应在读取接收FIFO之后及时将SSI中断清除寄存器(SSIICR)中的RTIC位置位,以清除接收FIFO超时中断。并且该清除操作不能太迟执行,否则有可能造成中断处理子程序在中断被清除之前已返回,以及不必要地重复进入中断等问题。
传输结束(EOT)中断表示数据已经传输完成。该中断可以用来指示何时禁止SSI模块的时钟或进入休眠模式。另外,因数据的发送和接收是同时完成的,该中断也可用于实时指示接收FIFO中的数据已经就绪,无需等待接收FIFO超时。
4.帧格式
SSI的数据帧长度从4~6位可编程,并且始终按照高位在前的顺序传输。有三种基本的帧类型可供选择:
①TI同步串行。
②飞思卡尔SPI。
③MICROWIRE。
对于上述三种帧格式,串行时钟(SSIClk)在SSI空闲时保持非激活状态,只有当数据的发送或接收处于激活状态时,SSIClk才可在所设置的频率下工作。利用SSIClk的空闲状态可提供接收超时指示,在一个超时周期后,如果接收FIFO中仍含有数据,则会产生超时指示。
对于Freescale SPI和MICROWIRE这两种帧格式,在串行帧(SSIFss)引脚为低电平时有效,并在整个帧的传输过程中一直保持有效。
而对于TI的同步串行帧格式,在发送每个帧前,SSIFss引脚将发出一个以上升沿开始并持续一个时钟周期的脉冲。在该帧格式中,SSI和片外从设备将在SSIClk的上升沿驱动各自的数据输出,并在下降沿锁存另一个器件的数据。
与TI和Freescale的全双工帧格式不同,MICROWIRE采用半双工方式,使用特殊的主-从传输技术。在该模式中,当帧开始传输时将向外设从设备发送一个8位的控制报文。并且在发送控制字期间不会接收数据。当报文发送结束后,外设从设备将立即对报文进行译码,发送完8位报文的最后一位后,在该从设备需等待1个串行时钟周期后,方可响应请求的数据应答。返回的数据长度为4~16位,使总的帧长为13~25位。
(1)TI的同步串行帧格式
TI同步串行帧格式的单次传输如图9-2所示。
图9-2 TI同步串行帧格式的单次传输
在该模式中,当SSI模块处于空闲状态时,SSIClk和SSIFss将被强制拉低,发送数据线SSITx被置为三态。在发送FIFO的底部入口含有数据时,SSIFss将变为高电平并持续一个SSIClk周期。使待发送的值从发送FIFO中传输到发送逻辑的串行移位寄存器中。在SSIClk时钟的下一个上升沿,数据帧的MSB位将移位输出到从SSITx引脚上。同理,接收数据的MSB位也由片外串行从设备移位到SSIRx引脚上。
然后,SSI和片外从设备在SSIClk的每一个下降沿时将数据位逐个移入到各自的串行移位器中。在锁存了LSB位后的第一个SSIClk上升沿接收到的数据从串行移位器传输到接收FIFO中。
TI同步串行帧格式的连续传输如图9-3所示。
图9-3 TI同步串行帧格式的连续传输
(2)Freescale SPI格式
Freescale SPI接口为4线接口,其中SSIFss信号用于从设备选择。Freescale SPI格式的主要特点是其SSIClk信号定义相当灵活,而非激活状态与相位可分别通过SSISCR0寄存器的SPO/SPH位进行设置。在操作SSI时需很好地理解下面两个位的意义:
①SPO时钟极性位。在SPO时钟极性控制位清零时,将在SSIClk引脚上产生稳定的低电平。如果将SPO位置位,当未进行数据传输时,会在SSIClk引脚上产生稳定的高电平。
②SPH相位控制位。SPH相位控制位用于选择捕获数据的时钟沿,并允许数据改变状态。该位的状态对传输的首位影响最大,即是否在首次捕获数据之前忽略时钟的跳变。若SPH相位控制位清零,则在第一个时钟跳变沿捕获数据。若SPH位置位,则在第二个跳变沿捕获数据。
1)SPO=0&SPH=0时的SPI帧格式。在SPO=0与SPH=0时,SPI帧格式的单次和连续传输信号时序如图9-4和图9-5所示。
图9-4 SPO=0及SPH=0时SPI的帧格式(单次传输)
注:Q为未定义。
图9-5 SPO=0及SPH=0时SPI的帧格式(连续传输)
在该配置中,当SSI处于空闲时:(www.xing528.com)
①SSIClk被强制变为低电平。
②SSIFss被强制变为高电平。
③发送数据线SSITx被仲裁强制变为低电平。
④当SSI配置为主机时,将使能SSIClk引脚。
⑤当SSI配置为从机时,将禁止SSIClk引脚。
若使能SSI模块,且发送FIFO中已填入有效数据,则在SSIFss主机信号被拉低时开始传输,使从机数据传输到主机的SSIRx输入线上,此时也将使能主机的SSITx引脚输出。
在半个SSIClk周期后,有效的主机数据将被传送到SSITx引脚。一旦主机和从机数据设置就绪,在另半个SSIClk时钟周期后,SSIClk主机时钟引脚将被拉高。随后数据将在时钟信号的上升沿被捕获,而在时钟信号的下降沿进行传输。
对于单字传输,在数据字的所有位都被传输完后,SSIFss线在捕获到最末一位后的一个时钟周期之后将返回到空闲的高电平状态。
而在背靠背的连续传输过程中,必须让SSIFss信号在相邻两次数据传输之间输出高脉冲,由于在SPH位为0时,从机选通引脚将锁定串行外设寄存器中的数据,不允许对其进行修改。所以主机必须在相邻两次数据传输之间拉高从机的SSIFss引脚,以使能串行外设数据的写入操作。在连续传输完成时,SSIFss引脚在捕获到最末一位之后的一个时钟周期后将返回到空闲状态。
2)SPO=0&SPH=1时SPI的帧格式。在SPO=0与SPH=1时,SPI帧格式的传输信号时序如图9-6所示,该图涵盖了单次和连续两种传输情况。
在此配置中,当SSI处于空闲时:
①SSIClk被强制变为低电平。
②SSIFss被强制变为高电平。
③发送数据线SSITx被仲裁强制变为低电平。
④当SSI配置为主机时,将使能SSIClk引脚。
⑤当SSI配置为从机时,将禁止SSIClk引脚。
如果使能SSI并且在发送FIFO中包含有效数据,若SSIFss主机信号被驱动为低电平,将启动发送操作,同时也将使能主机SSITx引脚输出。当半个SSIClk时钟周期之后,主机和从机的数据都将在各自的发送线上就绪,并利用一个上升沿跳变来使能SSIClk时钟。数据在SSIClk时钟信号的下降沿被捕获,而在时钟信号的上升沿进行传输。
对于单字传输,在所有位被传输完后,SSIFss线将在捕获到最末一位(下降沿)后的一个SSIClk周期返回到空闲的高电平状态。
如果是连续传输,SSIFss引脚将在连续数据字之间保持低电平,且连续传输的结束情况与单字传输的相同。
3)SPO=1&SPH=0时SPI的帧格式。在SPO=1与SPH=0时,Freescale SPI帧格式的单次和连续传输信号时序如图9-7和图9-8所示。
图9-6 SPO=0和SPH=1时SPI的帧格式
注:Q为未定义。
图9-7 SPO=1及SPH=0时的飞思卡尔SPI帧格式(单次传输)
注:Q未定义。
图9-8 SPO=1及SPH=0时的飞思卡尔SPI帧格式(连续传输)
在该格式配置下,当SSI处于空闲时:
①SSInClk被强制拉高。
②SSInFss被强制拉高。
③发送数据线SSITx被仲裁强制拉低。
④当SSI配置为主机时,将使能SSIClk引脚。
⑤当SSI配置为从机时,将禁止SSIClk引脚。
如果SSI模块已使能,并且发送FIFO中已包含有效数据,则在SSInFss主机信号被拉低时开始传输;使从机数据立即传输到主机的SSInRx线上,同时将使能主机设备的SSInTx输出端口。
在过去半个周期之后,有效的主机数据将传送到SSInTx线上。一旦主机和从机数据的设置就绪,再过去半个SSInClk周期,将使SSInClk主机时钟引脚变为低电平。即是说数据在每个SSInClk时钟的下降沿被捕获,而在上升沿进行传输。
对于单字传输,在数据字的所有位传输完成之后,当SSInFss引脚捕获到最末1位(下降沿)之后的1个SSInClk后将返回其空闲的高电平状态。
对于背靠背的连续传输,必须使SSInFss信号在相邻两次数据传输之间输出高脉冲,由于在SPH位清零时,从设备选通引脚将锁存串行外设寄存器中的数据,不允许对其修改。故主设备须在相邻两次数据传输之间拉高SSInFss引脚的电平,以使能串行外设数据的写入操作。当连续传输结束时,在SSInFss引脚捕获到最末1位后的1个SSInClk周期返回到空闲状态。
4)SPO=1&SPH=1时SPI的帧格式。在SPO=1与SPH=1时,飞思卡尔SPI帧格式的传输信号时序如图9-9所示,该图涵盖了单次和连续两种传输情况。
图9-9 SPO=1及SPH=1时的飞思卡尔SPI帧格式
注:Q未定义。
在该格式配置下,当SSI处于空闲时:
①SSInClk被强制拉高。
②SSInFss被强制拉高。
③发送数据线SSITx被仲裁强制拉低。
④当SSI配置为主机时,将使能SSIClk引脚。
⑤当SSI配置为从机时,将禁止SSIClk引脚。
如果SSI已使能并且在发送FIFO中包含有效的数据,在SSInFss主机信号被驱动为低电平将启动发送操作。同时将使能主设备的SSInTx输出端口。再过半个SSInClk周期后,主设备和从设备的数据都将在各自的发送线上就绪,并使用下降沿的跳变将SSInClk使能。使数据在每个SSInClk时钟信号的上升沿被捕获,而在下降沿输出。
对于单字传输,当数据字的所有位传输完成后,在SSInFss引脚捕获到最末1位(上升沿)后的1个SSInClk周期返回到空闲的高电平状态。
对于背靠背的连续传输,SSInFss信号在连续的数据传输过程中将始终保持有效(低电平),直到捕获到最后1个字的最末1位(上升沿)之后将返回其空闲状态。
对于背靠背的连续,SSInFss引脚将在连续的数据字之间保持低电平,且连续传输的结束情况与单字传输的相同。
5.DMA操作
SSI模块可与μDMA控制器接口具有相互独立的发送通道和接收通道。通过SSIDMA控制寄存器(SSIDMACTL)来使能μDMA操作。SSI模块在接收FIFO或发送FIFO传输数据时可向接收或发送通道发出μDMA请求。对于接收通道,只要接收FIFO中存在数据,就会发出单次传输请求。若接收FIFO中的数据≥4个,将会发出多个连续传输请求。对于发送通道,只要发送FIFO中存在一个空位,就会发出单次传输请求。如果发送FIFO中的空位≥4个,将会发出多个连续传输请求。μDMA控制器将根据μDMA通道的配置自动处理单次传输请求和连续传输请求。而在传输结束时μDMA控制器将会自动触发中断。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。