接下来看SPI接收器数据寄存器RXDAT,下表是它的全部位结构,其地址分别为0x40058014(SPI0)、0x4005C014(SPI1)。
(1)第0到15位(RXDAT)为接收器数据,它包含接收的下一个数据,使用的位数由TXCTL/TXDATCTL中的LEN设置。
(2)第16位(RXSSEL0_N)为接收的从机选择位,此字段允许SSEL0引脚状态与接收数据一同保存,数值反映主机和从机操作的SSEL0引脚,0表示从机选择有效,每一个从机选择引脚的实际极性通过CFG中的相应SPOL位配置。
(3)第17位(RXSSEL1_N)为接收的从机选择位,此字段允许SSEL1引脚状态与接收数据一同保存,数值反映主机和从机操作的SSEL1引脚,0表示从机选择有效,每一个从机选择引脚的实际极性通过CFG中的相应SPOL位配置。
(4)第18位(RXSSEL2_N)为接收的从机选择位,此字段允许SSEL2引脚状态与接收数据一同保存,数值反映主机和从机操作的SSEL2引脚,0表示从机选择有效,每一个从机选择引脚的实际极性通过CFG中的相应SPOL位配置。
(5)第19位(RXSSEL3_N)为接收的从机选择位,此字段允许SSEL3引脚状态与接收数据一同保存,数值反映主机和从机操作的SSEL3引脚,0表示从机选择有效,每一个从机选择引脚的实际极性通过CFG中的相应SPOL位配置。
(6)第20位(SOT)传输标志开始位,如果是SSEL从无效到有效之后的第一个数据(比如之前所有传输均已结束),则置1,若传输长度大于16位,则此信息可用来识别第一条数据。
(7)第21到31位为保留位,写入时只能写0。
接下来看SPI发送器数据和控制寄存器TXDATCTL,下表是它的全部位结构,其地址分别为0x40058018 (SPI0)、0x4005C018 (SPI1)。
(1)第0到15位(TXDAT)为发送数据,该字段提供待发送数据的1至16位。
(2)第16位(TXSSEL0_N)为发送从机选择位,主机模式下该字段使SSEL0生效,引脚输出默认为低电平有效,SSEL0引脚的有效状态由CFG寄存器中的位配置,值为0时表示SSEL0已生效,值为1时表示SSEL0未生效。
(3)第17位(TXSSEL1_N)为发送从机选择位,主机模式下该字段使SSEL1生效,引脚输出默认为低电平有效,SSEL1引脚的有效状态由CFG寄存器中的位配置,值为0时表示SSEL1已生效,值为1时表示SSEL1未生效。
(4)第18位(TXSSEL2_N)为发送从机选择位,主机模式下该字段使SSEL2生效,引脚输出默认为低电平有效,SSEL2引脚的有效状态由CFG寄存器中的位配置,值为0时表示SSEL2已生效,值为1时表示SSEL2未生效。
(5)第19位(TXSSEL3_N)为发送从机选择位,主机模式下该字段使SSEL3生效,引脚输出默认为低电平有效,SSEL3引脚的有效状态由CFG寄存器中的位配置,值为0时表示SSEL3已生效,值为1时表示SSEL3未生效。
(6)第20位(EOT)为传输结束,已生效的SSEL将在传输结束时解除生效并至少保持一段时间,这段时间由DLY寄存器中的Transfer_delay值确定。值为0时SSEL未解除生效,此条数据不视为传输结束,SSEL不会在该数据结束时解除生效。值为1时SSEL已解除生效。此条数据视为传输结束。SSEL会在该数据结束时解除生效。
(7)第21位(EOF)为帧结束,两帧之间可以插入延迟,该延迟由DLY寄存器中的FRAME_DELAY值定义。如果FRAME_DELAY值 = 0,则帧结束可能没有特殊意义。该控制可作为支持 帧长度超过16位的一部分。值为0时表示数据未EOF,此条传输数据不视为帧结束。值为1时表示数据EOF,此条数据视为帧结束,导致FRAME_DELAY时间在后续数据发送之前被插入。
(8)第22位(RXIGNORE)为接收忽略,允许数据使用SPI发送时,无需从接收器读取不需要的数据。设置此位可以简化发送过程,并可与DMA一同使用。值为0时表示读取已接收数据。必须读取已接收数据,才能允许传输过程。从机模式下,如果已接收数据未能在接收到新数据前读取,则发生溢出错误。值为1时表示忽略已接收数据。已接收数据被忽略,允许在不读取不需要的已接收数据情况下进行传输。不产生接收器标志。
(9)第23位为保留位,写入时只能写0。
(10)第24到27位(LEN)为数据长度,指定1到16位数据长度,通过多个相继传输可支持16位以上的传输长度,值从0x0到0xF,表示数据传输长度分别1到16位。
(11)第28到31位为保留位,写入时只能写0。
接下来是SPI发送器数据寄存器TXDAT,下表是它的全部位结构,其地址分别为0x4005801C(SPI0)、0x4005C01C(SPI1)。
(1)第0到15位(DATA)为发送数据,该字段提供待发送数据的4至16位。
(2)第16到31位为保留位,写入时只能写0。
接下来看SPI发送器控制寄存器TXCTL,下表是它的全部位结构,其地址分别为0x40058020(SPI0)、0x4005C020(SPI1)。
(1)第0到15位为保留位,写入时只能写0。
(2)第16位(TXSSEL0_N)为发送从机选择0。
(3)第17位(TXSSEL1_N)为发送从机选择1。
(4)第18位(TXSSEL2_N)为发送从机选择2。
(5)第19位(TXSSEL3_N)为发送从机选择3。
(6)第20位(EOT)为传输结束。
(7)第21位(EOF)为帧结束。
(8)第22位(RXIGNORE)为接收忽略。
(9)第23位为保留位,写入时只能写0。
(10)第24到27位(LEN)为数据传输长度。
(11)第28到31位为保留位,写入时只能写0。
接下来看SPI分频器寄存器DIV,下表是它的全部位结构,其地址分别为0x40058024(SPI0)、0x4005C024(SPI1)。
(1)第0到15位(DIVVAL)为速率分频器值,指定SPI的PCLK分频值,从而在主机模式下产生SPI时钟速率。
DIVVAL为-1编码,以便PCLK/1数值为0,PCLK/2数值为1,直至PCLK/65536中的最大可能分频值0xFFFF。
(2)第16到31位为保留位,写入时只能写0。
最后看SPI中断状态寄存器INTSTAT,下表是它的全部位结构,其地址分别为0x40058028(SPI0)、0x4005C028(SPI1)。
(1)第0位(RXRDY)为接收器就绪标志。
(2)第1位(TXRDY)为发送器就绪标志。
(3)第2位(RXOV)为接收器溢出中断标志。
(4)第3位(TXUR)为发送器下溢中断标志。
(5)第4位(SSA)为从机选择生效。
(6)第5位(SSD)为从机选择解除生效。
(7)第6到31位为保留位,写入时只能写0。
至此,所有SPI接口用到的寄存器全部介绍完毕,后面将会以一个实例来具体说明SPI接口的应用。
--待续--