【SPI】LPC1700系列Cortex-M3_ZLG
- 格式:pdf
- 大小:770.04 KB
- 文档页数:22
同步串行外设接口(SPI) LPC1700系列Cortex-M3微控制器
SPI 简介与特性1SPI 基本操作2
SPI 寄存器结构3SPI 操作流程与示例4SPI 使用注意事项
5
SPI 是一种同步串行外设接口,允许MCU 与外围设备以串行方式通信。
SPI 控制器使LPC1700系列Cortex-M3能与众多外设通信,从而大大增强了处理器的外设扩展能力。
MOSI
MISO SCK
SSEL LPC1700
SCK :用于同步SPI 接口间数据传输的时钟信号
MOSI :单向信号线,数据通过它由主机传输到从机SSEL :指示被选择参与数据传输的从机(低电平有效)MISO :单向信号线,数据通过它由从机传输到主机从机选择
串行时钟主机输入从机输出主机输出从机输入
SPI 总线可以连接一个主机和多个从机同一时刻只允许主机和一个从机进行通信SPI 总线通信是全双工的
SPI 总线
从机
从机从机从机
从机
从机
LPC1700(主机)
SPI 简介与特性1SPI 基本操作2
SPI 寄存器结构
SPI 操作流程与示例
SPI 使用注意事项
SPI初始化
●时钟极性控制位——CPOL
该位决定了SPI总线空闲时,SCK时钟线的电平状态。
CPOL=0,当SPI总线空闲时,SCK时钟线为低电平;
CPOL=1,当SPI总线空闲时,SCK时钟线为高电平。
●时钟相位控制位——CPHA
该位决定了SPI总线上数据的采样位置。
CPHA=0,SPI总线在时钟线的第1个跳变沿采样数据;
CPHA=1,SPI总线在时钟线的第2个跳变沿采样数据。
1
0SCK
MOSI
模式一:SCK 空闲时为低,
SCK 前沿采样
采样结果为:10101010b
总线空闲时,SCK 为低电平
CPOL=0CPHA=0
1
1SCK
MOSI
模式二:SCK 空闲时为低,
SCK 后沿采样
采样结果为:01010101b
总线空闲时,SCK 为低电平
CPOL=0CPHA=1
1010101
SCK
MOSI
模式三:SCK 空闲时为高,
SCK 前沿采样
采样结果为:10101010b
总线空闲时,SCK 为高电平
从SCK 的前沿开始采样
CPOL=1CPHA=0
0101
010
1
SCK
MOSI
模式四:SCK 空闲时为高,
SCK 后沿采样
采样结果为:01010101b
从SCK 的前沿开始采样
总线空闲时,SCK 为高电平
CPOL=1CPHA=1
帧长度:可以设置成8~16位
帧格式:设置高位先发送还是低位先发送
配置帧长度为8,低位先发送,情形如下所示:
1 2 3 4 5 6 7 8
帧长度
帧格式
帧长度为8
低位在前
P0.0
SCK
MOSI
SPI 主机
MOSI
SCK
SSEL
SPI 从机
DATA
需发送的数据
数据编码后发送
主机提供时钟
DATA
从机选择
释放从机
数据传输完成
P0.0
SCK
MISO
SPI 主机
MISO
SCK
SSEL
SPI 从机
需发送的数据
DATA
从机选择
释放从机
数据传输完成
DATA
SPI简介与特性
SPI基本操作
3
SPI寄存器结构
SPI操作流程与示例
SPI使用注意事项
数据寄存器(S0SPDR)
数据移位寄存器
收发模块
时钟计数寄存器(S0SPCCR)
F PCLK
控制寄存器(S0SPCR )
中断标志寄存器(S0SPINT) 状态寄存器(S0SPSR)
F PCLK 经分频后为收发模块提供时钟信号
SPI 初始化配置
反映收发模块的状态信息反映传输完成的中断信息SPI 控制器的核心
SPI 传输完成发生模式错误
Bit4:MODF Bit7:SPIF SPI 中断标志寄存器
SPINT[0]置位
SPI 控制寄存器
SPI 状态寄存器
SPI简介与特性
SPI基本操作
4
SPI操作流程与示例
SPI使用注意事项
void SPIMasterInit (uint8 fdiv)
{
S0SPCR = (1 << 5) |
(0 << 7) |
(0 << 2) |
(0 << 6) |
(1 << 4) |(0 << 3); if (fdiv < 8) {
fdiv = 8;
}
S0SPCCR = fdiv & 0xfe; }
void SPISlaveInit (void){S0SPCR = (0 << 5) | (0 << 7) |(0 << 2) |(0 << 6) |(1 << 4) |(0 << 3);}主机模式/从机模式不使用中断帧长度为8位先发送高位时钟极性为1
时钟相位为0
设置时钟频率
uint8 MSendData (uint8 ucdata){
IO0CLR |= SPI_CS;S0SPDR = ucdata;
while ((S0SPSR & 0x80) == 0);IO0SET |= SPI_CS;return (S0SPDR);
}
void SSendData (uint8 ucdata){
S0SPDR = ucdata ;
while ((S0SPSR & 0x80) == 0);}
选中从机发送数据
等待数据发送完成释放从机
返回接收到的数据
发送数据
等待数据发送完成
SPI 简介与特性
SPI 基本操作
SPI 寄存器结构SPI 操作流程与示例4SPI 使用注意事项
5
⏹连接时,MOSI、MISO不能交叉连接;
⏹使用时注意主机和从机的模式设置匹配;
⏹SPI主机提供总线时钟;
⏹作为主机使用时,SSEL引脚可以作为I/O口使用;指定作为SSEL功能后,则必须无效。