SPI基础理解2




1.注意:SPI寄存器仅允许16位访问。

2.SPI相关寄存器理解;

SPI基础理解2_寄存器

 SPISWRESET:SPI Software Reset在更改配置时,应在更改之前清除该位,并在恢复操作之前将该位置1。复位类型:SYSRSn

0h(R / W)=将SPI操作标志初始化为复位条件。具体而言,将RECEIVER OVERRUN标志位(SPISTS.7),SPI INT FLAG位(SPISTS.6)和TXBUF FULL标志位(SPISTS.5)清零。 SPISTE将变为非活动状态。不管时钟极性如何,SPICLK将立即驱动为0。 SPI配置保持不变。

1h(R / W)= SPI准备发送或接收下一个字符。当SPI SW RESET位为0时,写入该发送器的字符不会在该位置1时移出。必须将新字符写入串行数据寄存器。置位后的一个SPICLK周期,SPICLK将返回其无效状态。

 

CLKPOLARITY:移位时钟极性,该位控制SPICLK信号的极性。时钟极性和极性时钟相位(SPICTL.3)控制SPICLK引脚上的四种时钟方案。复位类型:SYSRSn

0h(R / W)=数据在上升沿输出,在下降沿输入。如果没有发送SPI数据,则SPICLK处于低电平。数据输入和输出边沿取决于CLOCK PHASE位(SPICTL.3)的值,如下所示:-CLOCK PHASE = 0:在SPICLK信号的上升沿输出数据。输入数据在SPICLK信号的下降沿锁存。 -CLOCK PHASE= 1:在SPICLK信号的第一个上升沿之前和随后的SPICLK信号的下降沿前半个周期输出数据。输入数据在SPICLK信号的上升沿锁存。

1h(R / W)=数据在下降沿输出,在上升沿输入。如果没有发送SPI数据,则SPICLK处于高电平。数据输入和输出边沿取决于CLOCK PHASE位(SPICTL.3)的值,如下所示:-CLOCK PHASE = 0:在SPICLK信号的下降沿输出数据。输入数据在SPICLK信号的上升沿锁存。 -CLOCK PHASE= 1:在SPICLK信号的第一个下降沿之前和SPICLK信号的后续上升沿之前半个周期输出数据。输入数据在SPICLK信号的下降沿锁存。

 

SPILBK:SPI回送模式选择,“回送”模式可在设备测试期间验证模块。该模式仅在SPI的主模式下有效。复位类型:SYSRSn

0h(R / W)=禁止SPI环回模式。这是重置后的默认值。

1h(R / W)=启用SPI环回模式,内部连接了SIMO / SOMI线。用于模块自检。

 

SPICHAFR:字符长度控制位,这四个位确定在一个移位序列中作为单个字符移入或SPI CHAR0移出的位数。

SPICHAR =字长为1

复位类型:SYSRSn

0h(R / W)= 1位字

1h(R / W)= 2位字

2h(R / W)= 3位字

3h(R / W)= 4位字

4h(R / W)= 5位字

5h(R / W)= 6位字

6h(R / W)= 7位字

7h(R / W)= 8位字

8h( R / W)= 9位字

9h(R / W)= 10位字

Ah(R / W)= 11位字

Bh(R / W)= 12位字

Ch(R / W)= 13位字

Dh(R / W)= 14位字

Eh(R / W)= 15位字

Fh(R / W)= 16位字

 

SPI基础理解2_数据_02

 OVERRUNINTENA:溢出中断使能溢出中断使能。将RECEIVER OVERRUN标志位(SPISTS.7)置1时,将该位置1会导致产生中断。 RECEIVER OVERRUN标志位和SPI INT FLAG位(SPISTS.6)产生的中断共享相同的中断向量。复位类型:SYSRSn

0h(R / W)=禁用RECEIVER OVERRUN中断。

1h(R / W)=启用RECEIVER_OVERRUN中断

CLK_PHASE:SPI时钟相位选择,该位控制SPICLK信号的相位。时钟相位和时钟极性(SPICCR.6)使四种不同的时钟方案成为可能。在时钟相位为高电平的情况下运行时,无论使用哪种SPI模式(主机或从机)都将在数据写入SPIDAT之后且在SPICLK信号的第一沿之前使第一位数据就绪。复位类型:SYSRSn

0h(R / W)=常规SPI时钟方案,具体取决于CLOCK POLARITY位(SPICCR.6)。

1h(R / W)= SPICLK信号延迟了一个半周期。极性由“时钟极性”位确定。

 

MASTER_SLAVE:SPI网络模式控制,该位确定SPI是网络主机还是从机。从器件复位初始化期间,SPI自动配置为网络从器件。复位类型:SYSRSn

0h(R / W)= SPI被配置为从器件。

1h(R / W)= SPI配置为主机

 

TLAK:发送使能TALK位,可以通过将串行数据输出置于高阻状态来禁用数据传输(主机或从机)。如果在发送过程中禁用了该位,则发送移位寄存器将继续运行,直到移出前一个字符为止。当TALK位被禁止时,SPI仍然能够接收字符并更新状态标志。通过系统重置清除(禁用)TALK。复位类型:SYSRSn

0h(R / W)=禁用传输:-从模式操作:如果先前未配置为通用I / O引脚,则SPISOMI引脚将处于高阻状态。 -主模式操作:如果以前未配置为通用I / O引脚,则SPISIMO引脚将处于高阻状态。 1h(R / W)=启用传输对于4引脚选项,请确保启用接收器的SPISTEn输入引脚。

 

SPIINTENA:SPI中断使能位,该位控制SPI产生发送/接收中断的能力。 SPI INT FLAG位(SPISTS.6)不受该位的影响。

复位类型:SYSRSn 0h(R / W)=禁用中断。

1h(R / W)=使能中断

 

SPI基础理解2_引脚_03

 OVERRUN_FLAG:SPI接收器溢出标志,该位是只读/清除标志。在从缓冲区读取前一个字符之前,如果接收或发送操作完成,则SPI硬件会将该位置1。通过以下三种方式之一清除该位:

-向该位写入1

-向SPI SW RESET(SPICCR.7)写入0

-复位系统

如果OVERRUN INT ENA位(SPICTL.4)被置位,则SPI第一次将RECEIVER OVERRUN标志位置1时,仅请求一个中断。如果该标志位已设置,则随后的超限将不会请求其他中断。这意味着,为了允许新的溢出中断请求,用户必须在每次溢出条件发生时通过向SPISTS.7写1来清除该标志位。换句话说,如果中断服务程序未将RECEIVER OVERRUN标志位置1(未清除),则退出中断服务程序时,另一个溢出中断将不会立即重新进入。复位类型:SYSRSn

0h(R / W)=尚未发生接收溢出的情况。

1h(R / W)=最后一个接收到的字符已被覆盖并因此丢失(当SPIRXBUF在用户应用程序读取前一个字符之前被SPI模块覆盖时)。写'1'将清除该位。在中断服务程序期间应清除RECEIVER OVERRUN标志位,因为RECEIVER OVERRUN标志位和SPI INT FLAG位(SPISTS.6)共享相同的中断向量。当接收到下一个字节时,这将减轻对中断源的任何可能的怀疑。

 

INT_FLAG:SPI中断标志,是只读标志。硬件将该位置1以指示SPI已完成发送或接收的最后一位,并准备好后续服务。如果将SPI INT ENA位(SPICTL.0)置1,则该标志导致请求中断。设置该位的同时,接收到的字符将放置在接收器缓冲区中。该位可通过以下三种方式之一清除:

-读取SPIRXBUF

-向SPI SW RESET(SPICCR.7)写入0

-复位系统

注意:如果使能了FIFO模式,则不应使用该位。将接收到的字从SPIRXBUF复制到接收FIFO的内部过程将清除该位。使用FIFO状态或FIFO中断位可实现类似功能。复位类型:SYSRSn

0h(R / W)=尚未接收或发送完整的字。

1h(R / W)=表示SPI已完成发送或接收最后一位的准备工作。

 

BUFFULL_FLAG:SPI发送缓冲区已满标志,当将字符写入SPI发送缓冲区SPITXBUF时,此只读位将设置为1。当字符移出前一个字符完成后,将字符自动加载到SPIDAT中时,该位将被清除。复位类型:SYSRSn

0h(R / W)=发送缓冲区未满。

1h(R / W)=发送缓冲区已满。

 

SPI基础理解2_引脚_04

 SPI_BIT_RATE:SPI波特率控制,如果SPI是网络SPI BIT RATE 0主设备,则这些位确定位传输速率。可以选择125个数据传输速率(每个数据传输速率都是CPU时钟的函数LSPCLK)。每个SPICLK周期移位一个数据位。 (SPICLK是SPICLK引脚上输出的波特率时钟。)如果SPI是网络从设备,则模块会从网络主机接收SPICLK引脚上的时钟。因此,这些位对SPICLK信号没有影响。来自主机的输入时钟的频率不应超过从机SPI的LSPCLK信号的4分频。在主机模式下,SPI时钟由SPI生成并在SPICLK引脚上输出。 SPI波特率由以下公式确定:

对于SPIBRR = 3至127:SPI波特率= LSPCLK /(SPIBRR + 1)

对于SPIBRR = 0、1或2:SPI波特率= LSPCLK / 4

复位类型:SYSRSn

3h(读/写)= SPI波特率= LSPCLK / 4

4h(读/写)= SPI波特率= LSPCLK / 5

7Eh(R / W)= SPI波特率= LSPCLK / 127

7Fh(R / W)= SPI波特率= LSPCLK / 128

 

SPI基础理解2_中断请求_05

SPIRXEMU包含接收到的数据。读取SPIRXEMU不会清除SPISTS的SPI INT FLAG位。这不是一个真正的寄存器,而是一个虚拟地址,仿真器可以在不清除SPI INT标志的情况下从中读取SPIRXBUF的内容。

 ERxBn:仿真缓冲区接收的数据SPIRXEMU的功能几乎与SPIRXBUF相同,但读取SPIRXEMU不会清除SPI INT FLAG位(SPISTS.6)。 SPIDAT收到完整的字符后,该字符将被传输到SPIRXEMU和SPIRXBUF,可以在其中读取。同时,设置了SPI INT FLAG。创建此镜像寄存器以支持仿真。读取SPIRXBUF会清除SPI INT FLAG位(SPISTS.6)。在仿真器的正常操作中,将读取控制寄存器,以在显示屏上不断更新这些寄存器的内容。创建了SPIRXEMU,以便仿真器可以读取该寄存器并正确更新显示屏上的内容。读取SPIRXEMU不会清除SPI INT FLAG位,但是读取SPIRXBUF会清除该标志。换句话说,SPIRXEMU使仿真器可以更准确地仿真SPI的真实操作。建议您在正常仿真器运行模式下查看SPIRXEMU。重置类型:SYSRSn

 

SPI基础理解2_中断请求_06

 

 

 SPIRXBUF包含接收到的数据。读取SPIRXBUF会清除SPISTS中的SPI INT FLAG位。如果使能了FIFO模式,则读取该寄存器还将使SPIFFRX中的RXFFST计数器递减。

RXBn:接收到的数据,一旦SPIDAT接收到完整的字符,该字符将被传输到SPIRXBUF,同时,SPI INT FLAG位(SPISTS.6)被置1。由于数据首先移入SPI的最高有效位,因此将其右对齐存储在此寄存器中。重置类型:SYSRSn

 

SPI基础理解2_数据_07

 

 

 

 SPITXBUF存储要传输的下一个字符。写入该寄存器会将SPISTS中的TX BUF FULL标志位置1。当前字符的传输完成后,该寄存器的内容将自动加载到SPIDAT中,并且TX BUF FULL标志被自动清除。如果当前没有发送有效,则写入该寄存器的数据将落入SPIDAT寄存器,并且未设置TX BUF FULL标志。在主模式下,如果当前没有传输有效,则写入该寄存器将以与写入SPIDAT相同的方式启动传输。

 TXBn:发送数据缓冲区,这是下一个要发送的字符的存储位置。当前字符的发送完成后,如果TX BUF FULL标志位置1,则该寄存器的内容自动传输到SPIDAT,并且TX BUF FULL标志被清除。写入SPITXBUF必须为左对齐。重置类型:SYSRSn

 

SPI基础理解2_中断请求_08

 

 

 SPIDAT是发送和接收移位寄存器。在随后的SPICLK周期中,写入SPIDAT的数据被移出(MSB)。对于从SPI移出的每个位(MSB),一个位就移入移位寄存器的LSB端。

 SDATn:串行数据移位寄存器

-如果将TALK位(SPICTL.1)置位,则提供要在串行输出引脚上输出的数据。

-当SPI作为主机工作时,将启动数据传输。启动传输时,请检查CLOCK POLARITY位(SPICCR.6)和第10.2.1.2节中所述的CLOCK PHASE位(SPICTL.3),以了解要求。在主模式下,将伪数据写入SPIDAT将启动接收器序列。由于对于短于16位的字符,数据不是由硬件证明的,因此发送数据必须以左对齐的形式写入,而接收的数据必须以右对齐的形式读取。重置类型:SYSRSn

 

SPI基础理解2_中断请求_09

 

 

SPIRST:SPI复位,复位类型:SYSRSn

0h(R / W)=写入0以复位SPI发送和接收通道。 SPI FIFO寄存器配置位将保持不变。

1h(R / W)= SPI FIFO可以恢复发送或接收。对SPI寄存器位无影响。

 

SPIFFENA:SPI FIFO增强功能启用,复位类型:SYSRSn

0h(R / W)= SPI FIFO增强功能被禁用。

1h(R / W)=启用SPI FIFO增强功能。

 

TXFIFORESET:TX FIFO复位,复位类型:SYSRSn

0h(R / W)=写入0将FIFO指针复位为零,并保持复位状态。

1h(R / W)=从复位释放发送FIFO。

 

TXFFST:发送FIFO状态,复位类型:SYSRSn

0h(R / W)=发送FIFO为空。

1h(R / W)=发送FIFO有1个字。

2h(R / W)=发送FIFO有2个字。

10h(R / W)=发送FIFO有16个字,这是最大值。

1Fh(R/W)=保留

 

TXFFINT:TX FIFO中断标志,复位类型:SYSRSn

0h(R / W)=尚未发生TXFIFO中断,这是一个只读位.

1h(R / W)=发生TXFIFO中断,这是一个只读位.

 

TXFFINTCLR:TXFIFO中断清除,复位类型:SYSRSn

0h(R / W)=写0对TXFIFINT标志位无效,该位回读零。

1h(R / W)=写1清除SPIFFTX [TXFFINT]标志。

 

TXFFENA:TX FIFO中断使能,复位类型:SYSRSn

0h(R / W)=基于TXFFIL匹配(小于或等于)的TX FIFO中断将被禁用。 1h(R / W)=基于TXFFIL匹配(小于或等于)的TX FIFO中断将被使能。

 

TXFFIL:发送FIFO中断级别位,当FIFO状态位(TXFFST4-0)和FIFO级别位(TXFFIL4-0)匹配(小于或等于)时,发送FIFO将产生中断。复位类型:SYSRSn

0h(R / W)=当TX缓冲区中没有剩余字时,生成TX FIFO中断请求。

1h(R / W)=当TX缓冲区中有1个字或没有字时,将产生TX FIFO中断请求。

2h(R / W)=当TX缓冲区中剩余2个或更少的字时,生成TX FIFO中断请求。

10h(R / W)=当TX缓冲区中剩余16个字或更少的字时,生成TX FIFO中断请求。

1Fh(R/W)=保留

 

SPI基础理解2_寄存器_10

 

 

 SPIFFRX包含与输入FIFO缓冲器相关的控制位和状态位。这包括FIFO复位控制,FIFO中断级别控制,FIFO级别状态以及FIFO中断使能和清除位。

RXFFOVF:接收FIFO溢出标志复位类型:SYSRSn

0h(R / W)=接收FIFO没有溢出。这是一个只读位。

1h(R / W)=接收FIFO溢出,只读位。 FIFO中已接收了16个以上的字,并且丢失了第一个接收到的字。

 

RXFFOVFCLR:接收FIFO溢出清除复位类型:SYSRSn

0h(R / W)=写0不会影响RXFFOVF标志位,该位读回零。

1h(R / W)=写1清除SPIFFRX [RXFFOVF]。

 

RXFIFORESET:接收FIFO复位,复位类型:SYSRSn

0h(R / W)=写入0将FIFO指针复位为零,并保持复位状态。

1h(R / W)=重新启用接收FIFO操作。

 

RXFFST:接收FIFO状态,复位类型:SYSRSn 0h(R / W)=接收FIFO为空。

1h(R / W)=接收FIFO有1个字。

2h(R / W)=接收FIFO有2个字。

10h(R / W)=接收FIFO有16个字,这是最大值。

1Fh(R / W)=保留

 

RXFFINT:接收FIFO中断标志,复位类型:SYSRSn

0h(R / W)=尚未发生RXFIFO中断。这是一个只读位。

1h(R / W)=发生RXFIFO中断。这是一个只读位.

 

RXFFINTCLR:接收FIFO中断清除,复位类型:SYSRSn

0h(R / W)=写0对RXFIFINT标志位无效,该位读回零。

1h(R / W)=写1清除SPIFFRX [RXFFINT]标志

 

RXFFIENA:RX FIFO中断使能,复位类型:SYSRSn

0h(R / W)=将禁用基于RXFFIL匹配(大于或等于)的RX FIFO中断。

1h(R / W)=基于RXFFIL匹配(大于或等于)的RX FIFO中断将被使能。

 

RXFFIL:接收FIFO中断级别位,当FIFO状态位(RXFFST4-0)大于或等于FIFO级别位(RXFFIL4-0)时,接收FIFO产生中断。复位后,这些位的默认值为11111。这避免了复位后的频繁中断,因为接收FIFO大部分时间都是空的。复位类型:SYSRSn

0h(R / W)=当RX缓冲区中有0个或多个字时,将生成RX FIFO中断请求。

1h(R / W)=当RX缓冲区中有1个或多个字时,生成RX FIFO中断请求。

2h(R / W)=当RX缓冲区中有2个或更多字时,生成RX FIFO中断请求。

10h(R / W)=当RX缓冲区中有16个字时,生成RX FIFO中断请求。

1Fh(R / W)=保留

 

SPI基础理解2_数据_11

 

 TXDLY:FIFO发送延迟位,这些位定义了从FIFO发送缓冲区到发送移位寄存器的每次传输之间的延迟。延迟以SPI串行时钟周期数定义。 8位寄存器可以定义0个串行时钟周期的最小延迟和255个串行时钟周期的最大延迟。在FIFO模式下,仅在移位寄存器完成最后一位的移位后,才应填充移位寄存器和FIFO之间的缓冲区(TXBUF)。这是传递数据流之间的延迟所必需的。在FIFO模式下,TXBUF不应被视为额外一级的缓冲区。复位类型:SYSRSn

0h(R / W)=发送完前一个字后,立即将TX FIFO缓冲区中的下一个字传输到SPITXBUF。

1h(R / W)=前一个字的传输完成后,TX FIFO缓冲区中的下一个字将传输到SPITXBUF1串行时钟周期。

2h(R / W)=前一个字的传输完成后的2个串行时钟周期,TX FIFO缓冲区中的下一个字被传输到SPITXBUF。

FFh(R / W)=前一个字的传输完成后,TX FIFO缓冲区中的下一个字被传输到SPITXBUF 255个串行时钟周期。

 

SPI基础理解2_中断请求_12

 

 SOFT:仿真软件运行,仅当FREE位为0时,此位才有效。复位类型:SYSRSn

0h(R / W)=当TSUSPEND(仿真器挂器信号?)被声明时,传输在位流中途停止。一旦TSUSPEND被置为高电平而没有系统复位,则DATBUF中待处理的其余位将被移位。示例:如果SPIDAT已将8位中的3位移出,则通讯将在那里冻结。但是,如果稍后取消置位TSUSPEND而不复位SPI,则SPI从停止的位置开始发送(在这种情况下为第四位),并从该点开始发送8位(是接着发送8位数据还是从当前发送到8位数据的地方)。

1h(R / W)=如果在发送开始之前(即,在第一个SPICLK脉冲之前)发生仿真挂起,则将不会发生发送。如果在传输开始后发生仿真挂起,则数据将移出完成。何时开始传输取决于所使用的波特率。标准SPI模式:在传输移位寄存器和缓冲器中的字后停止。也就是说,在TXBUF和SPIDAT为空之后。在FIFO模式下:在传输移位寄存器和缓冲器中的字后停止。即,在TX FIFO和SPIDAT为空之后。

 

FREE:自由仿真运行这些位确定发生仿真挂起(例如,调试器命中断点时)时发生的情况。外设可以继续执行任何操作(自由运行模式),如果处于停止模式,则外设可以立即停止,也可以在当前操作(当前接收/发送序列)完成后停止。复位类型:SYSRSn

0h(R / W)=通过SOFT位选择仿真模式

1h(R / W)=自由运行,无论挂起状态或发生挂起状态,都继续SPI操作。