SPI原理

M68HC08串行外围接口(SPI)
1  SPI简介
许多M68HC08单片机有一个SPI系统,它是一个同步串行外围接口,允许MCU与各种外围设备以串行方式进行通信。
外围设备包括简单的TTL移位寄存器(用作并行输入或输出)至复杂的LCD显示驱动器或A/D转换器。
SPI系统可直接与各个厂家生产的多种标准串行外围器件直接接口。
由于绝大多数M68HC08的总线不能在外部加以扩展,在片内I/O功能或存储器不能满足应用需要时,可使用SPI来扩展各种接口芯片,这是一种最方便的M68HC08单片机系统扩展方法。它的最大优点是只需3~4根数据和控制线即可扩展各种I/O或存储器接口器件。
M68HC08的SPI有如下特点:
·全双工三线同步传送;
·主机或从机工作方式;
·
分开的双缓冲发送寄存器和接收寄存器;
·四种可程控的主机频率(最高为总线频率除以2);
·最高从机方式频率等于总线频率;
·串行时种有可程控的相位和极性;
苌家拳
·两个分开允许的中断
——SPRF(SPI接收器满)
——SPTE(SPI发送器空)
·方式错标志,可产生中断;
·溢出标志,可产生中断;
·可程控为“线或”方式,I2C兼容;
·在设置为输入口时,I/O口可设置为有上拉电阻。
2  SPI结构
一、SPI引脚
SPI系统使用四个I/O脚,它们是串行时钟SPSCK;主机输入/从机输出数据线MISO;主机输出/从机输入数据线MOSI和低有效的从机选择线SS。
在不使用SPI系统时,这四根线可用作一般的输入线(PTD3、PTD2、PTD1、PTD0)。
1.串行数据线(MISO、MOSI)
MISO和MOSI用于串行接收和发送数据,先为MSB(高位),后为LSB(低位)。在SPI 设置为主机方式时,MISO是主机数据输入给,MOSI是主机数据输出线。这时SPMSTR控制位(位于SPCR寄存器位5)应由程序设置为1从允许主机方式。在SPI设置为从机方式时,MISO变成从机数据输出线,而MOSI成为从机数据输入线。三星sghe258
2.串行时钟(SPSCK)
SPSCK用于同步数据从MOSI和MISO的输入和输出的传送。在SPI设置为主机方式时,SPSCK脚为输出;设置为从机方式时,SPSCK脚为输入。对主机方式,SPSCK信号由内部MCU总线时钟得出。在
主机启动一次传送时,自动在SPSCK脚产生8个时钟。在主机和从机SPI器件中,SPSCK信号的一个跳变进行数据移位,在数据稳定后的另一个跳变进行采样。主机的SPCR寄存器的两位SPR1、SPR0选择时钟速率。
3.从机选择(SS(
在从机方式中,SS脚用于使能SPI从机进行数据传送。在主机方式中,如“禁止方式
检测”时,SS可用作I/O口(PTD0),方向由DDRD0控制;如“允许方式检测”时,SS为输入口。
二、SPI结构
SPI分频器的输入来自时钟发生模块输出的二分频,由SPR1、SPR0位选择SPI的时钟为45中频率之一。
1.主机方式
在主机方式中,CPU向发送数据寄存器写入数据字节时,如移位寄存器为空,则该字节立即传送至移位寄存器,并由串行时钟所控制从MOSI脚串行移位输出至从机器件,同时置位SPI发送器空标志(SPTE)。在这同时,从机送来的数据字节从MIS)脚移位输入。在接收完成后,置位接收器满标志(SPRF),并把接收到的字节从移位寄存器传送到接收数据寄存器。
2.从机方式
在从机方式中,SPSCK脚为输入。从机等待主机发来的SS脚低电平和SPSCK脚上的时钟输入,从MOSI接收数据输入移位寄存器。在接收完一个字节时,传送至接收数据寄存器,并置位SPRF位。为防止溢出,从机软件在接收完另一个字节前必须读出接收数据寄存器内容,否则会产生溢出。当主机启动从机发送时,从机移位寄存器的数据从MISO移位输
出(MISO仅在SS=0时为输出状态)。从机可先向发送数据寄存器写入需发送的数据,从而可在接收主机的数据字节时,把该写入数据自动传送至主机。
在从机方式中,SPSCK时钟取决于外部主机,它的最高频率可等于总线频率,它不受SPI波特率控制位的控制。
三、时钟相位和极性控制
软件可选择SPSCK的4种相位和极性的组合。其中CPOL选择时钟极性(高有效或低有效),它与发送格式无关。而时钟相位CPHA控制两种发送格式。对于主、从机通信,时钟相位和极性必须相同。
1.CPHA=0的发送格式
图1为CPHA=0的发送格式。图中SPSCK有两种波形;一种为CPOL=0,一种为CPOL=1。对CPHA=0,SS下跳用于启动从机数据发送,而第一个SPSCK跳变捕捉最高位。在一次SPI传送完毕,从机的SS脚必须返回高电平。
图1
2.CPHA=1的发送格式
图2为CPHA=1的发送格式。这时,主机在SPSCKK的第一个跳变开始驱动MOSI,从机应用它来启动数据发送。在连结几次SPI传送期间,从机的SS脚可保持为低电平。
图2
四、出错条件
SPI有两种出错情况:
1.溢出
dtmf在接收数据寄存器已有一个数据(SPRF=1)未读走,移位寄存器又收到一个新字节时,置位溢出标志(OVRF)。这时丢失新的字节,可读出旧的数据。在允许时,OVRF可产生中断。
注意:1:如发生了SPI溢出,必须读出SPSCR,再读出SPDR,以清零OVRF。否则将不会再产生新的SPRF。
注意2:有可能在读出SPSCR和SPDR之间发生溢出,这时读出SPSCR时OVRF未轩位,这可能引起丢失以后的新字节。为防止这种情况,可在读出SPDR后,再读出SPSCR 来检查OVRF位。也可允许SPI溢出中断来处理溢出情况。
2.方式错
主机方式设置MOSI脚为输出,MISO为输入。这时如SS脚变成低电平时,将置位方式错标志MODF。在允许时,它可产生中断,清SPE位,置位SPTE位,复位SPI。
从机方式设置MOSI脚为输入,MISO为输出(三态)。这时,在一次传送过程中,如SS 脚变成高电平,将置位方式错标志MODF。在允许时它可产生中断。但它不影响SPE位和
SPI状态。刘廷析
为允许MODF,必须置位“方式错允许”位(MODFEN),否则MODF将恒为“0”。
五、SPI中断
有两个SPI中断,一个为SPI发送中断,它由SPI发送器空(SPTE)所产生。另一个为SPI接收/出错中断,它可由SPI接收器满(SPRF)和SPI出错标志OVRF及MODF所产生。共有3个中断允许位来分别允许这3种中断。
六、SPI复位
系统复位全面复位SPI。在工SPI允许位(SPE)为0时,部分复位SPI,包括:
·置位SPTE标志;sss8.aa.am
·停止正在进行的发送;
·清“0”移位寄存器;
·清除SPI状态计数器;
·SPI脚设置为通用I/O口;
以下仅由系统复位所复位:
·SPCR寄存器的控制位;
·SPSCR寄存器的控制位;
·状态标志SPRF、OVRF和MODF。
3  SPI寄存器
一、SPI控制寄存器SPCR
除了DMAS位外,SPCR的各位均可读/写。
注:在设置CPOL和CPHA前,应先置SPE=0。
SPRIE——SPI接收中断允许:
1=允许SPRF产生中断
0=禁止SPRF产生中断
DMAS——DMA选择位:
对于无DMA功能的M68HC08单片机,它只可读出,并恒为“0”。对有DMA功能的M68HC08单片机,DMAS=“1”,允许SPRF和SPTE的DMA服务请求。
SPMSTR——SP主机位:
1=设置为主机方式
0=设置为从机方式
CPOL——时钟极性位:
这位决定SPSCK的极性。
CPHA——时钟相位位:这位控制串行时钟和数据的定时关系。
SPWOM——SPI线或方式位:
1=设置SPSCK、MOSI和MISO脚为开漏输出
0=设置SPSCK、MOSI和MISO脚为普通输出
SPE——允许SPI位:
1=允许SPI系统
0=禁止SPI系统
SPTIE——SPI发送中断允许位:
1=允许SPTE中断
0=禁止SPTE中断
二.SPI状态控制寄存器
SPSCR寄存器的ERRIE、MODFEN、SPR1、SPR0为可读/写位,而SPRF、OVRF、MODF、SPTE是只可读出位。
SPRF——SPI接收器满标志:
SPRF在数据从移们寄存器传至接收数据寄存器时置位。在SPRIE=“1”时可产生中断。在SPRF置位时读出SPSCR,再读出SPI数据寄存器,使清“0”SPRF。
1=接收数据寄存器满
0=接收数据寄存器空
ERRIE——“允许出错中断”标志位:
1=允许MODF和OVRR出错中断
外大陆架
0=禁止MODF和OVRF出错中断
OVRF——“溢出”标志:
在软件示读出接收数据寄存器的数据时,移位寄存器又收到下一个字节。在OVRF置位时读出SPSCR,再读出SPDR,使OVRF清“0”。
1=数据接收时发生溢出
0=数据接收时没发生溢出
MODF——“方式错”标志:
在主机方式置位MODFEN位时,SS脚变成0时置位MODF。在从机方式置位
MODFEN位时,正在传送SS脚变高时置位MODF。在MODF置位时读出SPSCR,再写入SPDR,使MODF清“0”
1=SS脚发生不正常电平
0=SS脚电平正常
SPTE——SPI“发送器空”标志:
一个字节从发送数据寄存器传送至移位寄存器时置位SPTE。允许时可产生中断。向SPI数据寄存器写入数据时使SPTE位清“0”。
1=发送数据寄存器为空
0=发送数据寄存器不空
MODFEN——“方式错允许”位:
它允许方式错检测功能。在主机方式,MODFEN=0,允许SS脚用作通用I/O口(PTDO)。
在MODFBN=1时,允许方式错检测功能。(这时SS脚为输入)
SPR1和SPR0——SPI波特率选择位:
在主机方式,它们选择4种分频率之一,见表5-4。
(注:在设置CPOL、CPHA和SPR1、SPR0时,应先置SPE=0)。
实际的SPI波特率可按下式计算:

本文发布于:2024-09-22 01:24:27,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/472542.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:寄存器   数据   方式   允许
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议