LPC11U35 SSP/SPI学习笔记

    SSP (synchronous Seril Port)同步串行端口控制器,可支持SPI、TI和Microwire协议,一条总线允许有多个从机,但某一个时刻只允许有一个主机和一个从机进行通信。多应用于EEPROM、FLASH、实时时钟、AD转换器,还有数字信号处理器和数字信号解码器之间(而I2C多用于同一单片机不同芯片之间的短距离通信)。

    SPI支持全双工通信,而I2C仅支持半双工,Uart也支持全双工通信。

   SPI通信是数据交换的过程,数据通过移位寄存器进行交换。

   主机发送时,将一位数据写入TxFIFO移入移位寄存器,数据通过MOSI移出主机,从机通过MOSI移入从机,从机同时会从移位寄存器中移出一位数据到主机,如果是只写操作,主机则可以忽略读取到的数据,通过Dummy = LPC_SSP1->DR假装读取进行忽略。

   主机接收数据时,主机首先要发送一个指令启动从机发送,如高电平(0xFF),从机接收到后发送数据到移位寄存器中。每次接收主机都需要发送数据触发从机发送数据。

   

SPI硬件有4根信号线:SCK(串行时钟线)、CS(片选信号)、MOSI(主机输出从机输入)、MISO(主机输入从机输出)

其中,CS通过拉低来选择从机设备,数据在SCK时钟的边沿跳变时进行数据采样和数据的读取和发送。具体规则由CPOL和CPHA控制。

CPOL:1——空闲状态时SCK为高电平       0——空闲状态时SCK为低电平

扫描二维码关注公众号,回复: 2631686 查看本文章

CPHA:1——数据在第一个跳变沿采样       0——数据在第二个跳变沿采样

故共有4种组合:

CPOL=0,CPHA=0,数据在第一个上升沿时采样,第一个下降沿读取/发送

CPOL=0,CPHA=1,数据在下降沿时采样,上升沿读取/发送

CPOL=1,CPHA=0,数据在第一个下降沿时采样,第一个上升沿读取/发送

CPOL=1,CPHA=1,数据在上升沿采样,下降沿读取/发送

SPI中断:

ROR ----  Rx FIFO状态为满时另外一帧被完全接收了,写入ICR清除中断

RT ---- Rx FIFO不为空且超过超时周期没有被读取,写入ICR清除中断

RX ---- Rx FIFO为至少半满状态,读取正确的FIFO可清除中断

TX ---- Tx FIFO为至少半空状态,写入正确的FIFO可清除中断

SPI Clock:位频率=PCLK/(CPSDVSR × [SCR+1])

在这章接触到一个新的函数和变量——Dummy

Dummy函数是一个空函数,函数体内没有语句,常常用于后期扩充功能,执行Dummy();时,什么工作也不做;

同样的,Dummy变量也有相似的意思,既是没有意义的一个变量或者空变量。在SPI的配置过程中,使能SPI前,可以将Rx FIFO中的数据清除干净,就可以采用Dummy = LPC_SSPx->DR的方式清空。

猜你喜欢

转载自blog.csdn.net/yhl_sophia/article/details/81237724
今日推荐