PIC24系列单片机原理与开发-第9章-串行外设接口SPI及编程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

PIC24系列单片机原理与开发byZeng2012-6-131第9章串行外设接口SPI及编程9.1.概述串行外设接口(SerialPeripheralInterface),一般简称为SPI接口,是一个同步串行全双工通信接口。它以主从方式工作,通常有一个主器件和一个或多个从器件。CPU通过SPI接口与外围器件交换信息。简单地说,SPI接口就是一个可编程的移位寄存器,在移位脉冲作用下,数据按位传输,格式为高位在前,低位在后。数据传输速度总体来说比I2C总线要快,速度可达到几Mbps。SPI接口有占用I/O口线少,接口简单,传输速度快等优点。和I2C总线接口一样,SPI接口的芯片引脚数少,可有效地减少芯片封装尺寸,使得PCB板的布局更为紧凑,并且布线也比较方便。鉴于此,SPI接口也是现在一种常见接口模式。很多IC制造商都生产接口为SPI的芯片,例如25CxxEEPROM、FLASH存储器、移位寄存器、显示驱动器和A/D、D/A转换等芯片,为单片机的扩展带来极大的方便。PIC24系列的SPI模块与Motorola的SPI和SIOP接口兼容。根据型号的不同,PIC24系列的大多数芯片集成有两个SPI模块,有几款型号集成了三个SPI模块,只有少数几种引脚较少的芯片为一个SPI模块,它们具有完全相同的功能。例如PIC24FJxxGA006芯片的SPI模块为2个:SPI1和SPI2。为表述方便,用SPIx表示某SPI模块,x=1,2,3。模块的特殊功能寄存器也采用类似的表示法。例如,SPIxCON指SPI1或SPI2或SPI3模块的控制寄存器。PIC24系列芯片的SPIx模块主要技术特性可归纳如下:(1)三线同步传送,支持8位或16位全双工数据传输;(2)可工作在主控或从动模式(3)有相互独立的发送和接收缓冲器,实现双缓冲工作;(4)作主控时,移位时钟的频率和相位均可灵活设置;(5)移位时钟可达10MHz;(6)具有发送结束、接收完成和接收溢出标志;(7)支持发送、接收事件中断以及出错中断;(8)支持从动模式的片选或帧脉冲同步功能;(9)可方便地与各种串行扩展器件接口。图9-1所示为SPIx模块的基本接构框图。每个SPIx接口有4个引脚:SDIx:串行数据输入SDOx:串行数据输出SCKx:移位时钟输入或输出SS____x/FSYNCx:从动选择(低电平有效)或帧同步脉冲SPIx接口与I/O端口复用引脚,如PIC24FJxxGA006芯片的两个SPI接口引脚如下面的表9-1所示:表9-1PIC24FJxxGA006外设SPI接口引脚SPI接口1SPI接口2SPI接口引脚SDI1SDO1SCK1SS1FSYNC1SCK2SDI2SDO2SS2FSYNC2复用I/O口RF2RF3RF6RB2RG6RG7RG8RG9PIC24系列单片机原理与开发byZeng2012-6-132SPIx模块可以配置为2、3或4个引脚工作。通过对SPIx模块的控制寄存器设置,可以禁止模块使用SS____x/FSYNCx和SDOx引脚。从编程角度看,管理SPIx模块有4个特殊功能寄存器。寄存器SPIxBUF是作为发送和接收的缓冲器,它是一个编程可见的寄存器。实际上,SPIxBUF对应模块内2个编程不可见的单向寄存器:发送缓冲器SPIxTXB和接收缓冲器SPIxRXB。或者说发送和接收这2个独立的缓冲器共用一个存储器映射地址:SPIxBUF。当发送数据写SPIxBUF时,该数据实际上是送发送缓冲器PIxTXB;读SPIxBUF时,实际读的是接收缓冲器SPIxRXB。控制寄存器SPIxCON1和SPIxCON2用于将模块配置成各种工作模式。状态寄存器SPIxSTAT用于指示SPIx模块的当前工作状态。此外,图中还有一个16位的移位寄存器SPIxSR,用于装载SPIxTXB的数据,并逐位移出到引脚SDOx,同时从SDIx引脚移入数据。该移位寄存器对用户编程是不可见的。移位寄存器SPIxSR与SPIxTXB或SPIxBUF构成双缓冲,可使数据传输在后台进行,并且可同时进行发送和接收。图中Fcy是指令时钟,它经过主、辅两级分频器后形成移位时钟信号,用户可在控制寄存器1中设置所需的分频系数。9.2.SPI模块的寄存器1.控制寄存器1SPIxCON1表9-2为SPIx模块控制寄存器1的各控制位的分布和定义。表9-2:控制寄存器1SPIxCON1各位功能定义内部数据总线SPIxBUFFcySPIxCON11:0主控时钟使能SPIxCON14:2SPIxRXBSPIxTXBSPIxSR接收发送帧同步控制时钟控制边沿选择辅分频器主分频器16图9-1SPI模块的结构框图SDIxSDOIxSCKxSSxPIC24系列单片机原理与开发byZeng2012-6-133其中:R=可读,W=可写,U=未用(读为0),-n=上电复位值U-0U-0U-0R/W-0R/W-0R/W-0R/W-0R/W-0未用未用未用DISSCKDISSDOMODE16SMPCKEbit15bit8R/W-0R/W-0R/W-0R/W-0R/W-0R/W-0R/W-0R/W-0SSENCKPMSTENSPRE2:0PPRE1:0bit7bit0bit12DISSCKSCKx引脚使能位(用于SPIx主控模式):1=禁止SCKx引脚,该引脚用作通用I/O0=使能SCKx引脚,作为移位时钟bit11DISSDO禁止SDOx引脚使能位:1=禁止SDOx引脚,该引脚用作通用I/O0=使能SDOx引脚,该引脚由SPIx模块控制bit10MODE16字/字节通信选择位:1=采用字(16位)方式通信0=采用字节(8位)方式通信bit9SMP数据输入采样控制位:主控模式:1=在数据位的尾部位置采样,0=在数据位的中间位置采样从动模式:此位必须清零bit8CKESPIx的时钟沿选择位:1=移位时钟的上沿输出数据(当CKP位为“1”时)移位时钟的下沿输出数据(当CKP位为“0”时)0=移位时钟的下沿输出数据(当CKP位为“1”时)移位时钟的上沿输出数据(当CKP位为“0”时)注:在帧模式(FRMEN=1)下不使用CKE位,该位应清“0“。bit7SSENSSx引脚使能位:1=从动模式时使用SSx引脚0=SPIx模块不使用SSx引脚,该引脚用作通用I/Obit6CKPSCKx时钟极性选择位:1=低电平有效,即SCKx空闲时为高电平0=高电平有效,即SCKx空闲时为低电平bit5MSTEN主控模式使能位:1=SPIx模块为主控模式0=SPIx模块为从动模式bit4~2SPRE2:0移位时钟辅分频器的分频数设置位(主控模式用)000=8分频,001=7分频,010=6分频,011=5分频,100=4分频,101=3分频,110=2分频,111=1分频bit1~0PPRE1:0移位时钟主分频器的分频数设置位(主控模式用):00=64分频,01=16分频,10=4分频,11=1分频PIC24系列芯片的SPIx模块的工作方式可由SPIxCON1灵活配置,以适应各种SPI接口的外围器件。传送方式可以是字节(每帧8位)也可以是字(每帧16位),由设置位MODE16定义。SPI为主从方式工作,设置MSTEN位可定义模块是作主控器还是从动方式工作。移位时钟SCKx由主控器产生,用户可设置位域SPRE2:0和PPRE1:0获得所需的时钟速率。例如,Fcy=16MHz,希望时钟速率为1MHz,可取PPRE1:0=0b01(16分频),SPRE2:0=0b111(1分频)。利用C30的芯片头文件定义,设置分频系数的C语句为(SPI1模块):SPI1bits.PPRE=0x01;SPI1bitsSPRE=0x07;注:SCKx的最小时钟周期为100ns,主、辅分频系数的的设置不能违反此条件。2.控制寄存器2SPIxCON2SPIxCON2中只4个位有定义,它们主要用于帧同步模式的控制。表9-3列出了这4个控制位的分布和定义。有关帧同步模式的详细说明见后。表9-3:控制寄存器2SPIxCON2各位功能定义PIC24系列单片机原理与开发byZeng2012-6-134其中:R=可读,W=可写,U=未用(读为0),-n=上电复位值R/W-0R/W-0R/W-0U-0U-0U-0U-0U-0FRMENSPIFSDSPIFPOL未用未用未用未用未用bit15bit8U-0U-0U-0U-0U-0U-0R/W-0R-0未用未用未用未用未用未用SPIFE保留bit7bit0bit15FRMEN帧SPIx使能位:1=使能帧SPIx0=禁止帧SPIxbit14SPIFSD帧同步脉冲方向控制位:1=SSx引脚为帧同步脉冲输入(帧从模式)0=SSx引脚为帧同步脉冲输出(帧主模式)bit13SPIFPOL帧同步脉冲极性选择位(仅用于帧模式):1=帧同步脉冲高电平有效0=帧同步脉冲低电平有效bit1SPIFE帧同步脉冲边沿选择位:1=帧同步脉冲与第一个位时钟同时发生0=帧同步脉冲先于第一个位时钟bit0保留保持为03.状态寄存器SPIxSTAT表9-4所列为状态寄存器SPIxSTAT的各位定义。表9-4:状态寄存器SPIxSTAT各位功能定义其中:R=可读,W=可写,C=只可清零,U=未用(读为0),-n=上电复位值,x=未知R/W-0U-0R/W-0U-0U-0R-xR-xR-xSPIEN未用SPISIDL未用未用保留保留保留bit15bit8U-0R/C-0U-0U-0U-0U-0R-0R-0未用SPIROV未用未用未用未用SPITBFSPIRBFbit7bit0bit15SPIEN模块使能位:1=使能模块,并将SCKx、SDOx、SDIx和SSx配置为SPIx引脚0=禁止模块bit13SPISIDL空闲模式停止位:1=芯片进入IDEL模式后,模块停止工作0=芯片进入IDEL模式后,模块保持工作bit6SPIROV接收溢出标志位:1=溢出;0=无溢出bit1SPITBF发送缓冲器满状态位:1=满,写SPIxBUF(实际是SPIxTXB)时硬件中自动置“1”0=空,数据从SPIxTXB传送到SPIxSR时,硬件自动清零bit0SPIRBF接收缓冲器状态位:1=接收完成。数据从SPIxSR传送到SPIxRX时,硬件自动置“1”0=接收未完成。读SPIxBUF(即读SPIxRXB)时,硬件自动清“0”SPIx状态寄存器SPIxSTAT中SPIEN和SPISIDL位为控制位。若用户将模块使能位SPIEN置“1”,原则上SPIx接口的4个引脚受模块管理,与引脚相应的端口寄存器和方向寄存器无关。但是,SCKx引脚、SS____x/FSYNCx引脚和SDOx引脚均可由控制寄存器1中的相应位来定义模块是否使用该引脚。禁止模块使用的引脚作为通用I/O使用,与SPIx模块无关。PIC24系列单片机原理与开发byZeng2012-6-135SPIxSTAT中的状态位只有3个,其状态“0”或“1”由模块硬件自动建立。若溢出标志位SPIROV为“1”,表明SPIxBUF(实际是SPIxRXB)寄存器中数据未取走之前,移位寄存器SPIxSR又接收到一个新的字节/字,并已丢弃。用户发送数据(写SPIxBUF寄存器)时应检查发送缓冲器满标志位SPITBF是否为“0”,否则会覆盖发送缓冲器SPIxTXB中的数据。9.3.工作模式SPIx模块有主控、从动和帧同步传送3种工作模式。这3种工作模式的传送格式均可是字节或字。字节/字选择位MODE16(SPIxCON110)置“1”为16位格式,即发送和接收均为16位数据,或者说按“字”传送;MODE16位清“0”为8位格式传送。不管是16位还是8位传送格式,数据的位传送都是高位先行。需要注意的是,当字节/字选择位MODE16的值改变时,模块会复位。因而,在初始化控制寄存器后,除非接口对象器件的时序所需,一般不要再去更改该位的值。在发送或接收数据时,对于8位格式,移入/移出一个数据需要8个时钟脉冲,对于16位格式需

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功