1、AVR单片机的SPI接口
SPI(SerialPeripheralINTERFACE---串行外设接口)总线系统是一种同步串行外设接口,允许MCU与各种外围设备以串行方式进行通信、数据交换,广泛应用于各种工业控制领域。基于此标准,SPI系统可以直接于各个厂家生产的多种标准外围器件直接接口。SPI接口通常包含有4根线:串行时钟(SCK)、主机输入/从机输出数据线(MISO)、主机输出/从机输入数据线(MOSI)和低电平有效的从机选择线SS。在从机选择线SS使能的前提下,主机的SCK脉冲将在数据线上传输主/从机的串行数据。主/从机的典型连接图如图(1)所示:
图(1)主/从机的连接图
串行外设接口SPI允许ATmega16和外设之间进行高速的同步数据传输。ATmega16SPI的特点如下:全双工,3线同步数据传输,主/从机操作,LSB首先发送或MSB首先发送,7种可编程的比特率,传送中断结束,写碰撞标志检测,可以从闲置模式唤醒,作为主机时具有双速模式(CK/2)。
如图(2)所示,系统包括两个移位寄存器和一个主时钟发生器。通过将需要的从机的SS引脚拉低,主机启动一次通信过程。主机和从机将需要的数据放到相应的移位寄存器,主机在SCK引脚上产生时钟脉冲以交换数据。主机的数据从MOSI移出,从从机MISO移入。从机的数据从MISO移出,从从机MOSI移入。主机通过将从机的SS拉高实现与从机的同步。
图(2)SPI主机-从机的互连
下面将介绍SPI的几个特殊寄存器:
1.1SPI的控制寄存器—SPCR
SPIE为SPI中断使能,置位后,只要SPSR寄存器的SPIF和SREG寄存器的全局中断使能位置位,就会引发SPI中断。SPE置位将使能SPI,DORD置位时数据的LSB首先发送;否则数据的MSB首先发送。MSTR置位时选择主机模式,否则为从机。CPOL置位表示空闲SCK为高电平;否则空闲时SCK为低电平。CPHA决定数据是在SCK的起始沿采样还是在SCK的结束沿采样。通过对SPR1、SPR0进行设计,确定主机的SCK速率。
1.2SPI的状态寄存器—SPSR
SPIF为中断标志位,串行发送结束后,SPIF置位。若此时寄存器 SPCR的SPIE和全局中断使能位置位,SPI中断即产生。进入中断例程后SPIF将自动清零。在发送当中对SPI数据寄存器SPDR写数据将置位WCOL,SPI2X置位后SPI的速度加倍。
1.3SPI的数据寄存器—SPDR
SPDR数据寄存器为读/写寄存器,用来在寄存器文件SPI移位寄存器之间传输数据。写寄存器将启动数据传输,读寄存器将读取寄存器的接收缓冲器。SPI系统的发送方向只有一个缓冲器,而在接收方向有两个缓冲器。也就是说,在发送时一定要等到移位过程全部结束后才能对SPI数据寄存器执行写操作。而在接收数据时,需要在下一个字符移位过程结束之前通过访问SPI数据寄存器读取当前接收到的字符。否则第一个字节将丢失。
比起8051使用软件模拟时序实现SPI功能来,AVR的硬件SPI实在是先进了许多。通过读写相应的寄存器就能轻松实现SPI的操作,使得编程变得更加方面。下面是使用AVR SPI的几个步骤:
- 首先,应设置相应管脚的读写寄存器以设定数据传输方向。在Mega16里,SPI的接口为以下管脚:PB4-PB7 (SS/MOSI/MISO/CLK)。如果工作在主模式则可以这么写(PORTB=0xff; DDRB=0xBF; PB7(SCK):输出 PB6(MISO):输入 PB5(MOSI):输出 PB4(SS):输出)
- 接着还需要设定SPI工作寄存器,控制的寄存器只有三个:SPDR(SPI数据寄存器)、SPCR(SPI控制寄存器)、SPSR(SPI状态寄存器),其中SPDR是读写移位寄存器中的值,SPSR中包括了SPIE:SPI中断使能位 SPE:SPI使能位 DORD:数据传送从最高位或最低位开始MSTR:主从工作方式选择 COPL/CPHA:时钟极性相位选择 SPR1/SPR0:时钟速率选择;SPSR中主要是几个状态标志位,用来做软件查询,SPIF:SPI中断标志位 WCOL:冲则可以如下设置突标志位 如果使用的是软件查询, SPCR中只需要置SPE和MSTR两位。
- 随后的工作就是往SPDR里读写数据,需要注意的是一次最少读写一个Byte(8 bit)的数据,这和硬件的设计有关。在读取数据前需要先写入数据。可以一次读写一个字节,也可以块读写,在OurAVR上的例程中这两种方式均有.
关键字:AVR单片机 SPI 串行设计
引用地址:
基于AVR单片机SPI的串行设计
推荐阅读最新更新时间:2024-03-16 15:00
如何使用AVR单片机写入TEA5767数据
#include #include #define uchar unsigned char #define uint unsigned int #define ulong unsigned long void delay() { uint i=0; for (i=0;i《2000;i++) ; } unsigned char radio_write_data[5]={0x69,0x28,0xa0,0x13,0x00}; //要写入TEA5767的数据 void inputbyte(uchar CD) //写入一字节数据 { uchar i,mid=0; for (i=0;i《8;i++) { mid=CD&0x80; if (mi
[单片机]
基于AVR单片机和温度传感器实现智能温控系统的设计
引言 在工农业生产和日常生活中,温度的测量及控制越来越重要。传统的温度控制系统采用热敏电阻器或热电偶测量温度,但是由于模拟温度传感器输出的是模拟信号,必须经过A/D转换等环节才能获得数字信号,再加上这种温度采集电路有时需要冷端补偿电路,这样增加了电路的复杂性,且电路易受干扰,使采集到的数据准确性不高。随着技术的发展,目前国际上新型温度传感器已从模拟式向数字式,从集成化向智能化、网络化的方向飞速发展。智能化温度传感器DS18B20将温度传感器、寄存器、接口电路集成在一个芯片中,能直接输出数字信号。本论文设计了以ATmega16单片机和DS18B20为主构成的智能温控系统,该系统的温度启控点可以根据用户需要而自行设定。 1、 系统
[单片机]
基于FPGA的SPI4.2接口设计
1.引言 SPI-4.2(System Packet Interface)是 OIF(Optical Internetworking Forum)定义的局部高速总线标准,用于 PHY层芯片到链路层芯片的 10Gbps信号传输。主要应用有 OC-192 ATM、Packet over SONET/SDH(POS)、10Gbps以太网等。 SPI4.2接口分为数据通道和状态通道。数据通道最多分成 256个逻辑通道,16bit位宽,采用 LVDS信号电平,按照 cell格式传送数据,cell的长度为 16字节的整数倍,可随意配置,根据网上流量的分析,一般配置成 128字节。每个 cell都是以控制字开始的,控制字一共16bi
[嵌入式]
AVR单片机入门+使用keil-MDK裸奔TQ2440
两三个月没更新博客了,近两个月在学习AVR单片机,芯片的复杂度提高了不少,光300页的数据手册就看了三遍才有个大概的认识。接下来要做实验来熟悉各个模块啊,就找到了马潮老师的《单片机C语言程序设计实训--基于AVR PROTEUS仿真》这本极好的入门书籍,到现在基础练习就差一个上位机和下位机通信和看门狗实验没有做了,遗憾的是这本书布置的“作业”整体难度不高,有些作业一眼就能想出解决方案的就没有做,我认为还不清楚该怎么做的就一个也不放过。 每次开始学习新类型单片机的时候,都需要做的事是: 1)选择合适的单片机芯片 2)选择合适的开发环境 3)选择合适的烧写工具 4)学写裸奔程序以此熟悉单片机片上的资源 这样才能开始应用级的开发。我
[单片机]
嵌入式系统中可配置式GPIO模拟SPI总线方法
在嵌入式系统处理器中有相当一部分处理器不带SPI接口,但基丁SPI接口的设备非常丰富,此外,SPI设备的不同以及处理器对GPIO口位寻址是否支持各处理器各有不同,因而不同处理器中软件模拟GPIO也各不相同。若能提供一种通用可配置可移植的GPIO模拟SPI总线的驱动则能很方便快捷的访问SPI设备,从而提高整个嵌入式系统的开发效率。本文针对GPIO口位寻址与否给出方面,给出了一种可配置GPIO模拟SPI总线的方法并详细介绍了其设计与实现过程,且具有代码小可移植性强使用方便等特点。 1 GPIO规范 SPI是一个全双工的串行接口。它设计成可以在一个给定总线上处理多个互联的主机和从机。在一定数据传输过程中,接口上只能有一个丰机和一个从
[嵌入式]
SPI的应用领悟
最近在做一个使用SPI协议对ADS1298芯片进行数据读取的项目。通过这个项目也渐渐的了解了SPI的一些皮毛知识。在此记录,以后可用。 SPI串口协议的工作原理是时钟信号控制移位寄存器的输入输出。主机发送时钟信号(SCLK),控制主机的寄存器和从机寄存器的移位。 最常用的全双工模式是这样工作的: 主机控制片选信号,使能我们要操作的从机。 然后主机写一个数据,写数据的时候,会发送相应的SCLK,同时主机按照SCLK,将寄存器位中的数据一一移位发送出来,从机也按照SCLK将从机寄存器的数据一一移位出来。到最后一个时钟的时候,他们两个寄存器的数据互换了。 如果主机发送数据的时候,从机也会发送数据,从机发送的数据也许
[单片机]
用AVR单片机实现多功能数显电子秤的设计方案
简介:本方案设计采用AVR系列单片机ATMEGA16L作为微控制器,结合压力传感器、模数转换芯片AD7705、液晶模块LCD1602实现的一种高精度多功能数显电子秤,具有体积小、成本低、精确度高、可靠性高等优点。文章详细介绍了系统的硬件电路结构和软件的程序开发流程。 本方案设计采用AVR系列单片机ATMEGA16L作为微控制器,结合压力传感器、模数转换芯片AD7705、液晶模块LCD1602实现的一种高精度多功能数显电子秤,具有体积小、成本低、精确度高、可靠性高等优点。文章详细介绍了系统的硬件电路结构和软件的程序开发流程。 一、引言 随着电子技术和自动化测量技术的不断发展,传统的称重系统在功能、精度、性价比等方面已难以
[单片机]