您的位置 首页 方案

avr单片机SPI串行外设接口初始化装备及阐明

串行外设接口SPI允许ATmega16和外设或其他AVR器件进行高速的同步数据传输。7种可编程的比特率,主机或从机操作,全双工,3线…

串行外设接口 SPI答应 ATmega16 和外设或其他 AVR 器材进行高速的同步数据传输。7 种可编程的比特率,主机或从机操作,全双工, 3 线同步数据传输,能够从搁置形式唤醒 ,作为主机时具有倍速形式 (CK/2)

/*
PB7 SCK (SPI 总线的串行时钟 )
PB6 MISO (SPI 总线的主机输入 / 从机输出信号 )
PB5 MOSI (SPI 总线的主机输出 / 从机输入信号 )
PB4 SS (SPI 从机挑选引脚 )
SCK – 端口 B, Bit 7 SCK :SPI 通道的主机时钟输出,从机时钟输入端口。作业于从机形式时,不管 DDB7 设
置怎么,这个引脚都将设置为输入。作业于主机形式时,这个引脚的数据方向由 DDB7 控
制。设置为输入后,上拉电阻由 PORTB7 操控。
MISO – 端口 B, Bit 6 MISO :SPI 通道的主机数据输入,从机数据输出端口。作业于主机形式时,不管 DDB6 设
置怎么,这个引脚都将设置为输入。作业于从机形式时,这个引脚的数据方向由 DDB6 控
制。设置为输入后,上拉电阻由 PORTB6 操控。
MOSI – 端口 B, Bit 5 MOSI : SPI 通道的主机数据输出,从机数据输入端口。作业于从机形式时,不管 DDB5 设
置怎么,这个引脚都将设置为输入。当作业于主机形式时,这个引脚的数据方向由 DDB5
操控。设置为输入后,上拉电阻由 PORTB5 操控。
SS – 端口 B, Bit 4 SS: 从机挑选输入。作业于从机形式时,不管 DDB4设置怎么,这个引脚都将设置为输入。
当此引脚为低时 SPI 被激活。作业于主机形式时,这个引脚的数据方向由 DDB4 操控。设
置为输入后,上拉电阻由 PORTB4 操控。
简略界说:
引脚 方向SPI主机 方向SPI从机
MOSI 用户界说 输入
MISO 输入 用户界说
SCK 用户界说 输入
SS 用户界说 输入
//*************************************SPI 操控寄存器SPCR***************************************
SPI 操控寄存器SPCR

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0
SPIE: 使能SPI 中止
置位后,只需SPSR 寄存器的SPIF 和SREG 寄存器的大局中止使能方位位,就会引发
SPI 中止
SPE: 使能SPI
SPE 置位将使能SPI。进行任何SPI 操作之前有必要置位SPE
DORD: 数据次第
DORD 置位时数据的LSB 首要发送;不然数据的MSB 首要发送
MSTR: 主/ 从挑选
MSTR置位时挑选主机形式,不然为从机。假如MSTR为”1”,SS装备为输入,但被拉
低,则MSTR 被清零,寄存器SPSR 的SPIF 置位。用户有必要从头设置MSTR 进入主机
形式。
CPOL: 时钟极性
CPOL 置位表明空闲时SCK 为高电平;不然空闲时SCK 为低电平。
CPOL 功用
CPOL 开始沿完毕沿 CPOL
0 上升沿下降沿 0
1 下降沿上升沿 1

SPR1, SPR0: SPI 时钟速率挑选1 与0
确认主机的SCK 速率。SPR1 和SPR0 对从机没有影响。SCK 和振荡器的时钟频率fosc
联系如下表所示:
SCK 和振荡器频率的联系
SPI2X SPR1 SPR0 SCK
0 0 0 fosc/4
0 0 1 fosc/16
0 1 0 fosc/64
0 1 1 fosc/128
1 0 0 fosc/2
1 0 1 fosc/8
1 1 0 fosc/32
1 1 1 fosc/64
CPHA :数据形式
决议数据是在 SCK 的开始沿采样仍是在 SCK 的完毕沿采样
相对于串行数据, SCK 的相位和极性有4 种组合。CPHA 和CPOL 操控组合的方法。SPI
数据传输格局。每一位数据的移出和移入发生于SCK不同的信号跳变沿,以确保有满足的时
间使数据安稳。
CPOL 与CPHA 功用
形式 开始沿 完毕沿 SPI
CPOL 0 CPHA=0 采样(上升沿) 采样(下降沿) 0
CPOL 0 CPHA=1 设置(上升沿) 采样(下降沿) 1
CPOL 1 CPHA=0 采样(下降沿) 采样(上升沿) 2
CPOL 1 CPHA=1 采样(下降沿) 采样(上升沿) 3
///****************************SPI 状况寄存器SPSR*********************************************
SPI 状况寄存器SPSR
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
SPIF WCOL – – – – – SPI2X
SPIF: SPI 中止标志
串行发送完毕后,SPIF 置位。若此刻寄存器SPCR 的SPIE 和大局中止使能方位位
SPI中止即发生。假如SPI 为主机, SS 装备为输入,且被拉低, SPIF 也将置位
进入中止服务程序后SPIF主动清零。或许能够经过先读SPSR,紧接着拜访SPDR来对
SPIF清零。
WCOL: 写磕碰标志
在发送傍边对SPI 数据寄存器SPDR写数据将置位WCOL。WCOL能够经过先读SPSR,紧接
着拜访SPDR 来清零。
Bit 5..1 – Res: 保存
保存位,读操作回来值为零。
SPI2X: SPI 倍速
置位后SPI 的速度加倍。若为主机,则SCK 频率可达CPU 频率的一半。若为从机,
只能确保fosc /4。
ATmega16的SPI接口一起还用来完成程序和EEPROM的下载和上载。

//********************************SPI 数据寄存器SPDR**************************************
SPI 数据寄存器SPDR
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
MSB LSB
SPI 数据寄存器为读/写寄存器,用来在寄存器文件和SPI移位寄存器之间传输数据。写
寄存器将发动数据传输,读寄存器将读取寄存器的接纳缓冲器。
*/
#include
#include

#pragma interrupt_handler SPI_END: iv_SPI_STC
void SPI_MasterInit(void)// 初始化为主机
{
DDRB = (1<SPCR = (1<}
void SPI_MasterTransmit(char cData) //主机数据发送
{
SPDR = cData; // 发动数据传输
while(!(SPSR & (1<}
void SPI_SlaveInit(void)// 将SPI初始化为从机
{
DDRB = (1<SPCR = (1<}
char SPI_SlaveReceive(void)//从机数据接纳
{
while(!(SPSR & (1<return SPDR;// 回来数据
}

void SPI_END()
{

//add your code here!

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/266648.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部