SPI模式允许同时、同步发送和接收 8位数据。支持 SPI的所有四种模式。一般用以下三个引脚来完成通信:
• 串行数据输出 (SDO)
• 串行数据输入 (SDI)
• 串行时钟 (SCK)
当工作在从动模式时,可能还需要第 4个引脚:
• 从动选择 (SS)
结构框图:
SSP模块由一个发送/接收移位寄存器(SSPSR)和一个缓冲寄存器(SSPBUF)组成。SSPSR用于器件输入和输出数据的移位,高位在前。在新的数据接收完毕前,SSPBUF保存上次写入SSPSR的数据。一旦8位新数据接收完毕,该字节被送入SSPBUF寄存器。同时缓冲区满标志位BF(SSPSTAT <0>)和中断标志位 SSPIF置1。这种双重缓冲接收方式,允许接收数据被读走之前,开始接收下一个数据。在数据发送/接收期间,任何试图写SSPBUF寄存器的操作都无
效,却会将写冲突检测位WCOL(SSPCON<7>)置1。此时用户必须用软件将WCOL位清零,以判别下一次对SSPBUF的写操作是否成功完成。为确保应用软件有效地接收数据,应该在新数据写入SSPBUF之前,将SSPBUF中的数据读走。
缓冲区满标志位BF(SSPSTAT<0>)用于表示SSPBUF是否已经载入了接收的数据(发送完成)。当SSPBUF中的数据被读取后,BF位即被清零。如果SPI仅仅作为一个发送器,则不必理会这一位。通常可用SSP中断来判断发送或接收是否完成。如果需要接收数据,可从SSPBUF中读取。SSP中断一般用来确定发送/接收何时完成。必须对SSPBUF进行读和/写。如果不打算使用中断方法,用软件查询方法同样可确保不会发生写冲突。
主控模式的操作
因为主控制器控制着SCK信号,所以它可以在任何时候启动数据传输,同时主控制器通过软件协议来决定从控制器何时发送数据。在主控模式下,数据一旦写入SSPBUF就开始发送或接收。如果SPI仅作为接收器,则SDO输出可以禁止(将其设置为输入口 )。SSPSR寄存器按编程设置的时钟速率,对SDI引脚上的信号进行连续地移位输入,每接收完一个字节,都把其送入 SSPBUF,就象普通的接收字节一样(相应的中断和状态位置1)。这在作为“在线主动监控”方式的接收器应用中是很有用的。时钟极性可通过对SSPCON寄存器的CKP位(SSPCON<4>)进行适当的编程来设定。在主控模式下,SPI 时钟速率(位速率)可由用户编程设定为下面几种方式之一 :
•FOSC/4 (或 TCY)
•FOSC/16 (或 4 • TCY)
•FOSC/64 (或 16 • TCY)
• 定时器2 输出 /2
这里允许的最大数据速率是8.25 Mbps(当晶振为 20 MHz时 )。图 17-6 给出了主控模式的时序图。当CKE位置1时,SDO数据在SCK的第一个时钟边沿前就有效。图中所示输入采样的变化则由SMP位的状态决定。图中同时给出了何时将接收到的数据写入SSPBUF。
典型应用
关键字:PIC16F877 SPI通信
引用地址:
PIC16F877 MSSP模块之SPI通信
推荐阅读最新更新时间:2024-03-16 14:40
基于PC及和PIC16F877芯片实现情感表情机器人的研究与设计
1、引言 十多年前“诡异谷”的理论制约了类人机器人的发展,但随着科技的发展,人们再次把关注的眼光投向了“更像人类的机器人”身上,机器人博览会上的saya已经到了以假乱真的地步,制作外形和行为方式更接近于人类的机器人已经成为了新的焦点和热点。在国外的一些科学家已经取得了一定的成绩,但在国内,对于表情机器人的研究还处于初级阶段,为了能在08年的奥运会上看到我们自己制作的机器人解说员,北京科技大学的王志良老师的课题组正致力于此项研究并取得了一定的成果。 2、机器人头部的设计要求 本设计的目的是设计一个仿人的机器人头部,以实现各种表情,来表达机器人内在的情感状态,最终使机器人能通过丰富生动的表情与人进行自然流畅的情感交流。既
[机器人]
CPLD的DSP多SPI端口通信设计
引 言 目前在电气自动化控制装置中,广泛采用各种通信手段以完成上层与底层控制器、底层控制器以及控制芯片之问的信息传递,并实现相应的控制功能;各种通信功能的设计与实现已成为自动化装置设计的重要组成部分。本文以一种超声波电机运动控制装置为应用背景,讨论了基于CPLD的DSP控制芯片多SPI端口通信技术。 串行同步外设端口(SPI)通常也称为同步外设端口,具有信号线少、协议简单、传输速度快的特点,大量用在微控制器与外围芯片的通信中。目前SPI通信方式已被普遍接受,带有SPI端口的芯片越来越多,如Flash、RAM、A/D转换、LED显示、控制专用DSP芯片等。 本文介绍一种采用运动控制专用DSP芯片DSP56F80
[嵌入式]
stm32的模拟/硬件的spi和i2c通信及其应用
本章节主要讲解:模拟spi、硬件spi、两种方法驱动6针oled、模拟i2c、硬件i2c、硬件i2c驱动mpu6050 一、硬件spi 1、首先是基础知识,这里参考正点原子的资料:s 2、接下来讲一讲硬件spi及cubemx配置方法: 这里在cubemx配置,Mode部分配置是全双工还是半双工还是单线通信,是主机模式还是从机模式,如果是单线,那么是只接受还是只接受 Hardware NSS Signal配置NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制 最下面配置一些参数,包括但不限于数据大小,第一位是MSB位还是LSB位,串行同步时钟的空
[单片机]
两块STM32之间的SPI通信
本文以STM32F103为例展示两块STM32之间的SPI通信。废话少说,直接奉上我写的SPI库吧。 首先是 SPI.h #ifndef _SPI_H_ #define _SPI_H_ #include stm32f10x.h void RCC_Configuration(void); void GPIO_Configuration(void); void SPI_Configuration(void); void SPI_SendData(u8 byte); //void SPI_SendString(char* str); u8 SPI_ReceiveData(void); #endif 然后是S
[单片机]
ATmega128(SPI通信)
//atmega128的SPI应用示例程序,采用SPI接口的DAC芯片TLC5615,连续进行电压转换 //DAC为TI公司的10位串行电压型输出的DAC芯片TLC5615,SPI接口连接方式 //驱通过SPI接口,动DAC芯片,使其完成000-FFC(TLC5615后两位的值一直为0)输出的转换 //LED指示灯DS3对应从暗到亮,表示电压逐渐增大 //编译环境 AVR Studio 4.17/AVR GCC //系统时钟7.3728MHZ,设置熔丝位为外部高频石英晶体振荡,启动时间4.1ms //*******************************************************************
[单片机]
STM32如何配置使用SPI通信
简介:SPI是一种高速的,全双工,同步的通信总线,原理和使用简单,占用引脚资源少,是一种常用的通信方式。 STM32通常有2~3个SPI接口 根据STM32手册的使用方法: 1. Enable peripheral clock 2. Enable SCK, MOSI, MISO and NSS GPIO clocks 3. Peripherals alternate function: Connect the pin to the desired peripherals' Alternate Function (AF) Call GPIO_Init() function. 4. P
[单片机]
STM32如何配置使用SPI通信
SPI是一种高速的,全双工,同步的通信总线,原理和使用简单,占用引脚资源少,是一种常用的通信方式。 STM32通常有2~3个SPI接口 根据STM32手册的使用方法: 1. Enable peripheral clock 2. Enable SCK, MOSI, MISO and NSS GPIO clocks 3. Peripherals alternate function: Connect the pin to the desired peripherals' Alternate Function (AF) Call GPIO_Init() function. 4. Program the Polari
[单片机]
STM32F103做从机SPI通信SPI3中断异常
在做AM335D板子与STM32F103使用SPI通信时,需要用到STM32的从机模式,所以特别对于ST的从机模式进行了研究,由于硬件上使用的是STM32F103的SPI3,所以过程中遇到了一点麻烦,这里记录一下过程,以备查阅: 使用SPI3通信时,从机时钟产生不了中断,经过查阅资料,是因为spi3的nss口与JTAG有共用引脚,所以配置错误会导致SPI3无法使用。需要注意以下两点就可以了: 1.开启GPIO时钟的同时,开启AFIO时钟,如下: RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE ); 2.关闭JTAG功能,
[单片机]