stc15系列单片机还提供另一种高速串行通信接口 —— spi接口。spi是一种全双工、高速、同步的通信总线,有两种操作模式:主模式和从模式。在主模式中支持高达3 mbps的速率(工作频率为12mhz时,如果cpu主频采用20mhz到36mhz,则可更高,从模式时速度无法太快,sysclk/4以内较好),还具有传输完成标志和写冲突标志保护。
一、 与spi功能模块相关的特殊功能寄存器
1.1spi控制寄存器spctl
spctl : spi控制寄存器
ssig:ss引脚忽略控制位。
ssig=1,mstr(位4)确定器件为主机还是从机
ssig=0,ss脚用于确定器件为主机还是从机.ss脚可作为i/o口使用(见spi主从选择表)
spen:spi使能位。
spen=1,spi使能;
spen=0,spi被禁止,所有spi引脚都作为i/o口使用。
dord:设定spi数据发送和接收的位顺序
dord=1, 数据字的lsb(最低位)最先发送;
dord=0, 数据字的msb(最高位)最先发送。
mstr:主/从模式选择位(见spi主从选择表)。
cpol:spi时钟极性
cpol=1,sclk空闲时为高电平。sclk的前时钟沿为下降沿而后沿为上升沿。
cpol=0,sclk空闲时为低电平。sclk的前时钟沿为上升沿而后沿为下降沿。
cpha:spi时钟相位选择。
cpha=1, 数据在sclk的前时钟沿驱动,并在后时钟沿采样
cpha=0, 数据在ss为低(ssig=0)时被驱动,在sclk的后时钟沿被改变,并在前时钟沿被采样。(注:ssig = 1时的操作未定义)
spr1、spr0:spi时钟频率选择控制位:
表中,cpu_clk是cpu时钟。
1.2 spi状态寄存器spstatspstat: spi状态寄存器
spif:spi传输完成标志。
当一次串行传输完成时,spif置位 spi中断被打开(即espi (ie2.1) 和ea(ie.7) 都置位),则产生中断。spi处于主模式且ssig=0时,如果ss为输入并被驱动为低电平,spif也将置位 模式改变。spif标志通过软件向其写入1清零。
wcol:spi写冲突标志。
在数据传输的过程中如果对spi 数据寄存器spdat执行写操作,wcol将置位。wcol标志通过软件向其写入1清零。
1.3 spi数据寄存器spdatspdat: spi数据寄存器
spdat.7 - spdat.0: 传输的数据位bit7~bit0。
1.4 中断允许寄存器2
espi : spi中断允许位
espi=1,允许spi中断,
espi=0,禁止spi中断。
二、spi接口的结构stc15系列单片机的spi功能方框图如下图所示。
spi的核心是一个8位移位寄存器和数据缓冲器,数据可以同时发送和接收。在spi数据的传输过程中,发送和接收的数据都存储在数据缓冲器中。对于主模式,若要发送一字节数据,只需将这个数据写到spdat寄存器中。主模式下ss信号不是必需的;但是在从模式下,必须在ss信号变为有效并接收到合适的时钟信号后,方可进行数据传输。在从模式下,如果一个字节传输完成后,ss信号变为高电平,这个字节立即被硬件逻辑标志为接收完成,spi接口准备接收下一个数据。
三、spi接口的数据通信spi接口 有4个管脚 sclk, miso, mosi和ss,可在3组管脚之间进行切换 sclk/p1.5,miso/p1.4, mosi/p1.3和ss/p1.2 ];sclk_2/p2.1, miso_2/p2.2, mosi_2/p2.3和ss_2/p2.4][sclk_3/p4.3, miso_3/p4.1, mosi_3/p4.0和ss_3/p5.4]。mosi ( master out slave in,主出从入):主器件的输出和从器件的输入,用于主器件到从器件的串行数据传输。当spi作为主器件时,该信号是输出;当spi作为从器件时,该信号是输入。数据传输时最高位在先,低位在后 根据spi规范,多个从机可以共享一根mosi信号线。在时钟边界的前半周期,主机将数据放在mosi信号线上,从机在该边界处获取该数据。miso ( master in slave out,主入从出):从器件的输出和主器件的输入,用于实现从器件到主器件的数据传输。当spi作为主器件时,该信号是输入;当spi作为从器件时,该信号是输出。数据传输时最高位在先,低位在后 spi规范中,一个主机可连接多个从机,因此,主机的miso信号线会连接到多个从机上,或者说,多个从机共享一根miso信号线。当主机与一个从机通信时,其他从机应将其miso引脚驱动置为高阻状态。sclk ( spi clock,串行时钟信号):串行时钟信号是主器件的输出和从器件的输入,用于同步主器件和从器件之间在mosi和miso线上的串行数据传输。当主器件启动一次数据传输时,自动产生8个sclk时钟周期信号给从机。在sclk的每个跳变处(上升沿或下降沿)移出一位数据。所以,一次数据传输可以传输一个字节的数据。ss( slave select,从机选择信号):这是一个输入信号,主器件用它来选择处于从模式的spi模块。主模式和从模式下ss的使用方法不同。在主模式下,spi接口只能有一个主机,不存在主机选择问题,该模式下ss不是必需的。主模式下通常将主机的ss管脚通过10kω的电阻上拉高电平。每一个从机的ss接主机的i/o口,由主机控制电平高低,以便主机选择从机。
在从模式下,不管发送还是接收,ss信号必须有效。因此在一次数据传输开始之前必须将ss为低电平。spi主机可以使用i/o口选择一个spi器件作为当前的从机。
spi从器件通过其ss脚确定是否被选择。如果满足下面的条件之一,ss就被忽略:如果spi系统被禁止,即spen(spctl.6)= 0(复位值)
如果spi配置为主机,即mstr(spctl.4)=1,并且p1.2/ss配置为输出( p1m0.2和p1m1.2)如果ss脚被忽略,即ssig(spctl.7)= 1,该脚配置用于i/o口功能。
注:即使spi被配置为主机(mstr = 1),它仍然可以通过拉低ss脚配置为从机(如果p1.2/ss配置为输入且ssig=0)。要使能该特性,应当置位spif(spstat.7)。
四、spi测试代码这里采用的是查询法。
#define u16 unsigned int #define u8 unsigned char// 控制寄存器 spctl#define ssig 1 // 1: 忽略ss脚,由mstr位决定主机还是从机 0: ss脚用于决定主从机。#define spen 1 // 1: 允许spi,0:禁止spi,所有spi管脚均为普通io#define dord 0 // 1:lsb先发,0:msb先发#define mstr 1 // 1:设为主机 0:设为从机#define cpol 1 // 1: 空闲时sclk为高电平,0:空闲时sclk为低电平#define cpha 1 // 数据在sclk的前时钟沿驱动,并在后时钟沿采样#define speed_4 0 // fosc/4#define speed_8 1 // fosc/8#define speed_16 2 // fosc/16#define speed_32 3 // fosc/32// 状态寄存器 spstat#define spif 0x80 //spi传输完成标志。写入1清0。#define wcol 0x40 //spi写冲突标志。写入1清0。void spi_init(void){ spdat = 0; //初始化spdat spstat = spif | wcol; //清除spi状态标志 spctl = (ssig < < 7) + (spen < < 6) + (mstr < < 4) + (cpol < < 3) + (cpha < < 2) + speed_4; }void spi_send(u8 dat){ spstat = spif + wcol; //清0 spif和wcol标志 spdat = dat; //发送一个字节 while (!(spstat & spif)); //等待spi数据传输完成 spstat = spif + wcol; //清0 spif和wcol标志}
提高性能,简化设计,搞掂电力线监控应用就看它
美团云与英特尔开启战略合作,携手加速人工智能创新与普及
不同电压等级的矿热炉需要用不同等级的无功补偿装置吗?
电感器的巧妙代换方法及故障解决办法
降噪耳机哪个品牌好?降噪比较好的蓝牙耳机推荐!
STC15W408AS单片机SPI的相关寄存器
小米6今天12点见分晓!小米max2最新消息:五月份即将强势来袭,搭载骁龙626、支持双摄
玩手机游戏不卡顿 骁龙855 Plus助力高帧率游戏体验
tpu是什么材料_tpu硬度范围_tpu的应用
土耳其货币崩溃,加密货币为何无法拯救?
一加5什么时候上市?一加5最新消息:一加5配置、外观、性能提前看,不将就的高颜值旗舰你买吗?
积极应对疫情影响 多方位布局 5G“后移动时代”
三大运营商2020年年底数据盘点:电信是大赢家
势不可挡!中国监控系统正在走出国门
如何对加密后的数据进行模糊查询
OPPO不止做手机,未来或推出机器人和智能手表
国内连接器厂家在汽车领域走向趋势
CAN采用了隔离依旧通讯异常怎么办?
iPhone8若推迟上市,背后也许有人在叫好
比特币涨势猛然熄火_51天蒸发1.4万亿