本帖最后由 springvirus 于 2013-11-7 15:18 编辑
SPI支持在MCU和外设之间进行全双工,同步串行通讯,使用SPI协议。
【问题1: DSPI中的D代表什么? 是Dual吗? 看到它可以配置成basic SPI或queued SPI】
Figure 49-91的框图,描述了SPI主从通信。通常接到DSPI主机上的外设不止一个,有6个PCS (外设选择)信号用来选择与哪个外设进行通讯。
DSPI有2个操作状态,停止态和运行态,默认状态是停止态,此态下,作为主机时对传输不初始化, 作为从机时对传输不响应。停止态对于写DSPI的各个配置寄存器时也是安全状态。
---------------------------------------------------------------------------------------------
主机模式
主机负责控制SCK和PCS,在TX FIFO中的指令域决定哪个CTAR寄存器被用来设定传输特性和哪个PCS有效, 指令域的设置在SPIx_PUSHR中。 【注意,在主机和从机模式下,PUSHR的结构不同,前者的PUSHR作为16位指令+16位数据, 后者的PUSHR作为32位数据】
---------------------------------------------------------------------------------------------
从机模式
从机负责回应SPI主机发起的传输初始化,此模式下的传输特性在CTAR0中设置,数据的最高位先移出。
TX FIFO和RX FIFO可以通过MCR[DIS_TXF]和MCR[DIS_RXF]分别禁止,当禁止后,发送的指令和数据可以写入PUSHR和 接收数据可以从POPR读出。
---------------------------------------------------------------------------------------------
TX FIFO机制
TX FIFO作为SPI发送时数据和指令的buffer,占4个字,每个包括指令域和数据域。TX FIFO的入口数看芯片 而定。通过写PUSHR可以把指令和数据加载到TX FIFO中,TX FIFO的入口在刷FIFO或其中内容移出后而关闭。
在SR中的TXCTR为TX FIFO的有效入口数,TXCTR在每次写PUSHR或数据从TX FIFO到移位寄存器时而更新。
TXNXTPTR域为下一次传输时,要到哪个FIFO入口,此数值为从TXFR0中数值开始的正偏移,例如, TXNXTPTR = 2,则TXFR2包含下次传输时的指令和数据,每次数据从FIFO到移位寄存器时,TXNXTPTR增1。
---------------------------------------------------------------------------------------------
RX FIFO机制
RX FIFO可以接收4个SPI数据帧,RX FIFO的入口数看芯片而定。当一次传输完成后,移位寄存器的数据会 被加载到RX FIFO中。RX FIFO的入口在刷RX FIFO或读POPR而关闭。
在SR中的RXCTR为RX FIFO的有效入口数,RXCTR在每次读POPR或数据从移位寄存器到RX FIFO时而更新。
POPNXTPTR域为下一次传输时,要到哪个FIFO入口,此数值为从RXFR0中数值开始的正偏移,例如, POPNXTPTR = 2,则RXFR2包含接收到的SPI数据,每次读POPR后,POPNXTPTR增1。
【总结,TXCTR和RXCTR是发送和接收入口数的总数,当一次成功的发或收后,二者减1,TXNXTPTR和 POPNXTPTR是下一次发送和接收的入口处,当一次成功的发或收后,二者加1。 接收的next pointer是POPNXTPTR,不是RXNXTPTR】
---------------------------------------------------------------------------------------------
传输格式
SPI通讯受SCK和PCS信号的控制。主机提供SCK来同步和移位在SIN和SOUT上的数据,PCS作为从机的使能 信号。 DSPI支持4种传输格式:
1.Classic Transfer format, CPHA = 0
此格式下,主机和从机在SCK的奇数跳变沿上采样各自的SIN引脚,在SCK的偶数跳变沿上更新各自的SOUT 引脚。
2.Classic Transfer format, CPHA = 1
此格式下,主机和从机在SCK的偶数跳变沿上采样各自的SIN引脚,在SCK的奇数跳变沿上更新各自的SOUT 引脚。
3.Modified Transfer format, CPHA = 0
4.Modified Transfer format, CPHA = 1 【文档中没有对Modified Transfer format的描述】
---------------------------------------------------------------------------------------------
连续选择格式
一些外设要求在两次传输之间被PCS释放,而另一些则要求在两次传输之间要求一直被选中。CONT位 控制实现以上两种情形。当CONT = 0时,在连续的两个数据帧之间,PCS拉高,释放从机,当CONT = 1时, 在连续的两个数据帧之间,PCS保持低电平,以选中从机。
【问题2: Modified Transfer format就是continuous selection format吧?】
---------------------------------------------------------------------------------------------
SPI涉及到的中断请求
1. End of queue -- 到达发送队列末尾时产生
2. TX FIFO Fill -- TX FIFO不满时产生
3. Transfer Complete -- 在发送每个数据帧的末尾时产生
4. TX FIFO Underflow -- TX FIFO下溢的检测只在从机中进行,当TX FIFO空了,在外部主机的控制下, 一次发送被初始化时,TFUF置位,产生下溢中断。
5. RX FIFO Drain -- RX FIFO不空时产生
6. RX FIFO Overflow -- RX FIFO上溢时产生,当RX FIFO的移位寄存器满了,此时又一次发送被初始化时 产生。
波特率的设定和各种延时时间(包括tDT[Delay After Transfer], tCSC[PCS to SCK delay])可以根据Table49-113 和 Table49-114来选取(假设系统时钟为100MHz)。
最后终于看到关于FIFO指针和First-in地址的计算了,不过都是片子内部自己的操作了。 |