26.6.2.6 传输数据
主机
当配置成主机(CTRLA.MODE是0x3),如果主从选择使能(CTRLB.MSSEN)是0,_SS线能被定位到任何
一个通用的I/O管脚,并且必须被配置为输出。当SPI准备好数据传输,软件必须把_SS线拉低。如果主从
选择允许位为1,则硬件控制_SS线。
当写一个字符到数据寄存器(DATA),当移位寄存器是空字符将要被传到移位寄存器,一但
TxDATA的内容被传到移位寄存器,在中断标志状态和清除寄存器数据寄存器空标志(INTFLAG.DRE)置1,并
且新的字符能被写入DATA。
当每一个字符移出主机的时候,别一个字符从从机移入。如果接收是允许(CTRLA.RXEN是1),从
移位寄存器接收的内容将被传到两级接收缓存。
当最后字符被传输并且DATA中没有有效数据,传输完成标志在中断标志状态和清除寄存器
(INTFLAG.TXC)被设置。当传输结束,主机必须指示给从机,通过把_SS拉高。如果主从选择允许
(CTRLB.MSSEN)设置为零,软必须拉_SS线为高。
从机
当配置为一个从机(CTRLA.MODE是0x2),SPI接口保持不激活,并且MISO线呈三态直到_SS管脚被
拉高。软件可以在任何时间更新DATA内容,直到在中断状态和清除寄存器中的数据寄存器空标志
(INTFLAG.DRE)被设置。
当_SS被拉代并且SCK也正在运行,从机将依据传输模式采样和移出数据。当TxDATA的数据被调
入移位寄存器中时,INTFLAG.DRE被设置,新数据能被写到DATA。就象主机一样,从机将在每传输一个字
符的同时接收一个字符。在数据的最后一个比特被收到的同时,收的字符将被传到两级接收级存。当接收
完成中断标志(INTFLAG.RXC)被置位,接收到的字符可以从DATA寄存器读出来。
一但DATA被写,它将占用三个SCK时钟周期在DATA的内容被装入移位寄存器之前。当DATA的内容
以经被装入,这将发生在下一个字符的边界。从理论上说,第一个字符在SPI传输器传输的不应是DATA里
的数据。这能必免使用预装载特性。
请参考"Preloading of the Slave Shift Register"
当在一个SPI传输中传几个字符,数据写入DATA的同时应有最少三个SCK时钟周期在当前字符传输的后边,
如果这个标准不满足,前一个接收的字符将被传输。
在DATA寄存器空了之膈,将要发出三个CLK_SERCOM_APB周期为了INTFLAG.DRE的设置。
26.6.2.7 接收错误比特
SPI接收有一个错误比特:缓冲溢出比特(BUFOVF),它能被从状态寄存器(STATUS)读出来。检测到错误,比
特将要被设置直到向其写1,被清除为止。这个比特当接收禁止时自动清除。
这里有两种方法用来声明缓冲溢出。当立即缓冲溢出比特(CTRLA.IBON)被设置,STATUS.BUFOVF立即溢出
。软件可以立即清空接收FIFO通过读RxDATA直到接收完成中断标志(INTFLAG.RXC)变低。
当CTRLA.IBON是0,缓冲区溢出条件依赖于接收FIFO.在接收数据被读出时,STATUS.BUFOVF和
INTFLAG.ERROR将要根据INTFLAG.RXG来设置,并且RxDATA将要变为0
|