120 likes | 325 Views
第 9 章: 串行外设接口模块 (SPI). 9.1 串行外设接口概述 9.2 串行外设接口操作 9.3 串行外设接口寄存器. 9 .1 串行外设接口概述. SPI: 高速同步串行输入/输出端口,传送速率可编程 应用: 外部移位寄存器、D/A、A/D、串行EEPROM、LED显示驱动器等外部设备进行扩展。 串行外设接口 模块的特性 4个外部引脚,以下引脚都可用作数字I/O引脚。 SPISIMO-SPI从输入、主输出 SPISOMI-SPI主输入、从输出 SPICLK -SPI时钟 SPISTE-SPI从发送使能 主动 / 从动两种工作方式
E N D
第9章: 串行外设接口模块(SPI) • 9.1 串行外设接口概述 • 9.2 串行外设接口操作 • 9.3 串行外设接口寄存器
9.1 串行外设接口概述 SPI:高速同步串行输入/输出端口,传送速率可编程 应用:外部移位寄存器、D/A、A/D、串行EEPROM、LED显示驱动器等外部设备进行扩展。 串行外设接口模块的特性 • 4个外部引脚,以下引脚都可用作数字I/O引脚。 • SPISIMO-SPI从输入、主输出 • SPISOMI-SPI主输入、从输出 • SPICLK -SPI时钟 • SPISTE-SPI从发送使能 • 主动/从动两种工作方式 • 125种可编程的波特率 • 1~16个数据位同时接收和发送操作 • 发送和接收操作可通过中断或查询方法完成
9.1 串行外设接口概述 4种时钟方案(由时钟极性和时钟相位控制) 无延时的下降沿 有延时的下降沿 无延时的上升沿 有延时的上升沿 9个8位的SPI模块控制寄存器 SPICCR:SPI配置控制寄存器。 SPICTL:SPI操作控制寄存器。 SPISTS:SPI状态寄存器。 SPIBRR:SPI波特率寄存器。 SPIRXEMU:SPI仿真缓冲寄存器。 SPIRXBUF:SPI串行输入缓冲寄存器。 SPITXBUF:SPI串行发送缓冲寄存器。 SPIDAT:SPI串行数据寄存器。 SPIPRI:SPI优先级控制。
9.2 串行外设接口操作 1、操作介绍 下图是SPI用于两个控制器(一个主控制器和一个从控制器)通信的典型连接方式。
9.2 串行外设接口操作 由上图可知,SPI有两种工作模式:主模式和从模式。 SPICTL.2位---MASTER/SLAVE用来选择操作模式和SPICLK的源。 (1)主模式:将Master的数据传送给Slave,数据传送完毕,申请中断 (2)从模式:将Slave的数据传送给Master,数据传送完毕,申请中断
9.2 串行外设接口操作 数据的发送方式有三种: (1)主控制器发送数据,从控制器发送伪数据; (2)主控制器发送数据,从控制器发送数据; (3)主控制器发送伪数据,从控制器发送数据。 主控制器控制SPICLK信号,通过发出SPICLK信号启动数据发送,从控制器则通过检测SPICLK信号接收数据。 一个主控制器可以连接多个从控制器,但是一次只允许一个从控制器给主控制器发送数据
9.2 串行外设接口操作 2、串行外设接口中断 有5个控制位用于初始化串行外设接口的中断: SPI中断使能位:SPI INT ENA (SPICTL.0); SPI中断标志位:SPI INT FLAG(SPISTS.6); SPI超限中断使能位:OVERRUN INT ENA(SPICTL.4); SPI接收器超限中断标志位:RECEIVER OVERRUN FLAG(SPISTS.7); SPI中断优先级选择位:SPI PRIORITY(SPIPRI.6)。 在SPI中断使能的情况下,当数据被一如或移出SPIDAT寄存器后,中断标志位被置位,并产生中断。
9.2 串行外设接口操作 3、数据格式 SPI通信时,要发送的数据从SPIDAT寄存器的MSB依次移出,接收的数据则从SPIDAT的LSB依次移入。 SPI数据字符位数(1-16位)由SPICCR.3-0指定。 当写入SPIDAT或SPITXBUF时,数据必须是左对齐的。 数据从SPIRXBUF读回时是右对齐的。
9.2 串行外设接口操作 4、SPI波特率和时钟模式 SPI模块支持125种不同的波特率和4种不同的时钟模式。SPI最大波特率为SYSCLK频率的四分之一。 SPI波特率的确定 SPI波特率取决于SYSCLK和SPIBRR的值。 (1)对于SPIBRR=3~127 SPI波特率=SYSCLK/(SPIBRR+1) SPIBRR=SYSCLK/SPI波特率-1 (2) 对于SPIBRR=0~2 SPI波特率=SYSCLK/4 例9.1已知系统时钟频率SYSCLK=24MHz,现将波特率设置为3Mbps,试确定SPI波特率寄存器的值。 SPIBRR=24×106/(3×106)-1=8-1=7H
9.2 串行外设接口操作 SPI时钟模式 SPI有四种时钟模式,由CLOCK POLARITY和CLOCKPHASE位控制。 CLOCK POLARITY位:选择时钟的有效沿是上升沿还是下降沿; CLOCK PHASE位:选择是否有半个时钟周期的延时。 (1)下降沿,无延时:SPI在时钟下降沿发送数据,在时钟的上升沿接收数据; (2)下降沿,有延时:SPI在时钟下降沿前半个周期发送数据,在时钟的下降沿接收数据; (3)上升沿,无延时:SPI在时钟上升沿发送数据,在下降沿接收数据; (4)上升沿,有延时:SPI在时钟上升沿前半个周期发送数据,在上升沿接收数据。 4种时钟模式如图9.3(p194)所示。
9.2 串行外设接口操作 6、SPI的复位和初始化 系统复位使SPI引脚功能被选定为通用输入,要对SPI的配置,需做以下工作: (1)设置SPI SW RESET位(SPICCR.7)的值为0,强制SPI复位; (2)初始化SPI的配置、格式、波特率和引脚功能为期望值; (3)设置SPI SW RESET位为1,从复位状态释放SPI; (4)向SPIDAT或SPITXBUF写数据; (5)数据发送完成后(SPISTS.6=1),读取SPIRXBUF以确定接收的数据。
9.3 串行外设接口控制寄存器 9个控制寄存器地址位于7040h~704Fh之间 串行外设接口配置控制寄存器(SPICCR)——地址7040h SPI软件复位、移位时钟极性、数据长度选择。 串行外设接口操作控制寄存器(SPICTL)——地址7041h 超时中断使能、时钟相位选择、工作方式选择、发送允许、中断使能。 串行外设接口状态寄存器(SPISTS)——地址7042h SPI接收过冲标志、中断标志、发送缓冲器满标志 串行外设接口波特率设置寄存器(SPIBRR)——地址7044h 串行外设接口仿真接收缓冲寄存器(SPIRXEMU)——地址7046h 串行外设接口接收缓冲寄存器(SPIRXBUF)——地址7047h 串行外设接口发送缓冲寄存器(SPITXBUF)——地址7048h 串行外设接口发送/接收移位寄存器(SPIDAT)——地址7049h 该寄存器中的数据在连续个SPICLK周期中被移出。 串行外设接口中断优先级控制寄存器(SPIPRI)——地址704Fh 用于选择SPI中断优先级的级别(INT1或INT5)。