首页 > 其他分享 >DSP学习笔记之SPI

DSP学习笔记之SPI

时间:2024-05-11 14:09:18浏览次数:12  
标签:信号线 传送 SpiaRegs DSP SPI 笔记 FIFO 设备

DSP学习笔记之SPI

SPI介绍

SPI 的全称是"Serial Peripheral Interface",意为串行外围接口。SPI 是一种高速的,全双工,同步的通信总线,SPI采用主从方式工作,一般有一个主设备和一个或多个从设备; SPI需要至少4根线,分别是MISO(主设备输入从设备输出)、MOSI(主设备输出从设备输入)、SCLK(时钟)、CS(片选)。

SPI分为硬件SPI和软件SPI,由于软件SPI的响应速度没有硬件SPI快,在日常使用中,为追求更高的响应速度,会使用硬件SPI。

image-20240511111216368

寻址方式

image-20240511111322795

当有多个 SPI 从设备与 SPI 主机相连时,设备的其它信号线 SCK、 MOSI及 MISO 同时并联到相同的 SPI 总线上,即无论有多少个从设备,都共同只使用这 3 条总线;而每个从设备都有独立的这一条 CS 信号线,本信号线独占主机的一个引脚,即有多少个从设备,就有多少条片选信号线。把该从设备的 CS 信号线设置为低电平,该从设备即被选中,即片选有效。

通信过程

image-20240511111508171

SPI总线在进行数据传送时,先传送高位,后传送低位;数据线为高电平表示逻辑‘1’,低电平表示逻辑‘0’;一个字节传送完成后无需应答即可开始下一个字节的传送; SPI总线采用同步方式工作,时钟线在上升沿或下降沿时发送器向数据线上发送数据,在紧接着的下降沿或上升沿时接收器从数据线上读取数据,完成一位数据传送,八个时钟周期即可完成一个字节数据的传送;

相关寄存器

SPI 配置控制寄存器(SPICCR)

SPI 操作控制寄存器(SPICTL)

SPI 波特率设置寄存器(SPIBRR)

SPI 串行接收缓冲寄存器(SPIRXBUF)

SPI 串行发送缓冲寄存器(SPITXBUF)

SPI FIFO 寄存器(SPIFFTX、SPIFFRX、SPIFFCT)

代码分析

SPI 初始化函数

void SPIA_Init(void)
{
	EALLOW;
	SysCtrlRegs.PCLKCR0.bit.SPIAENCLK = 1;   // SPI-A
	EDIS;

	InitSpiaGpio();

	// Initialize SPI FIFO registers
	SpiaRegs.SPIFFTX.all=0xE040;  //使能FIFO,清除发送中断
	SpiaRegs.SPIFFRX.all=0x204f;  //使能FIFO,接受16级深度
	SpiaRegs.SPIFFCT.all=0x0;   //清除FIFO计数器


	SpiaRegs.SPICCR.all =0x000F;	             // 复位SPI,上升沿发送,下降沿接收,16位数据
	SpiaRegs.SPICTL.all =0x0006;    		     // 无相位延时,主模式
	                                                 
	SpiaRegs.SPIBRR =0x007F;                    //确定SPICLK
	SpiaRegs.SPICCR.all =0x00DF;		         // 自测模式并从复位状态释放
	SpiaRegs.SPIPRI.bit.FREE = 1;                // 自由启动

}

SPI 数据收发函数

Uint16 SPIA_SendReciveData(Uint16 dat)
{
	// Transmit data
	SpiaRegs.SPITXBUF=dat;

	// Wait until data is received
	while(SpiaRegs.SPIFFRX.bit.RXFFST !=1);

	return SpiaRegs.SPIRXBUF;
}

标签:信号线,传送,SpiaRegs,DSP,SPI,笔记,FIFO,设备
From: https://www.cnblogs.com/filosefer/p/18186146

相关文章

  • 软件测评笔记03--软件测试
    软件测试的对象程序、数据、文档 ,跟人没有关系 测试用例要设计有效的功能测试用例,应该做到1、测试用例应该100%地覆盖测试业务需求2、利用场景法模拟核心业务流程的正确执行3、利用场景法设计测试用例时,往往是一个业务流程需要多条验证数据4、利用边界值法设计测试用例,......
  • 第六届·2024 MindSpore 量子计算黑客松热身赛赛题解读
    第六届·2024MindSpore量子计算黑客松火热进行中。本次大赛由量子信息网络产业联盟主办,昇思MindSporeQuantum社区承办,多所高校和单位联合举办。开发者将全面体验全新一代通用量子计算框架MindSporeQuantum。热身赛为量子计算基础学习和编程演练。完成热身赛的前100名选手将有......
  • 【学习笔记】Python 装饰器
    装饰器是Python中一种非常强大的语法特性,它允许你在不改变函数代码的情况下,动态地增加功能。装饰器本质上是一个函数,它接受一个函数作为参数,并返回一个新的函数。下面是Python装饰器的基本语法:defdecorator_function(original_function):defwrapper_function(*args,*......
  • WIN10的BUG:语言栏快捷键重启丢失的问题(解决笔记)
    这个问题据说已存在多年,但一直没有解决:crtl+shift+del导致切换语言的热键丢失-MicrosoftCommunity经过下文的引导,发现真存在这个可能性,参照下文的方法解决W10修改输入法快捷键及快捷键BUG解决-知乎(zhihu.com)在我的电脑中是这样设置的:而这个“美式键盘”的快捷方式每次......
  • 软件测评笔记02--软件工程
     设计模式UML支持13种图,可分为两大类结构图:类图、组合结构图、构件图、部署图、对象图、包图行为图:活动图、交互图(顺序图、通信图、交互概览图、时序图)、用例图、状态图主要作用:数据流图-功能建模实体联系图-数据建模状态迁移图-行为建模开发模型V模型:包括低层测试又......
  • 读书笔记
    《Core.Software.Security.Security.at.the.Source.CN.软件安全.从源头开始》读书笔记概览本书深入探讨了从源头保障软件安全的基本方面,为软件开发生命周期(SDL)中嵌入安全性提供了全面指南。它是开发人员、安全专业人士和软件架构师的重要资源。主要内容概览《软件安全:从源头开......
  • python异常的一些代码笔记
    点击查看代码whileTrue:try:x=int(input("请输入一个数字:"))print("你输入的数字是:",x)except:print("异常,输入的不是数字:")try:a=input("请输入被除数:")b=input("请输入除数:")c=float(a)/float......
  • 软件测评笔记01--网络相关
     IP地址与子网划分主动关闭的Socket端会进入TIME_WAIT状态,一般维持在1-4分钟ESTABLISHED:表示连接已经建立DMZ俗称:隔离区,非军事化区,非安全系统与安全系统之间的缓冲区可以放置一些必须公开的服务器设置,如web服务器、FTP服务器、论坛拒绝服务的实现方式不断发送请求,迫......
  • 204-基于Xilinx Virtex-6 XC6VLX240T 和TI DSP TMS320C6678的信号处理板
    基于XilinxVirtex-6XC6VLX240T和TIDSPTMS320C6678的信号处理板 1、板卡概述    板卡由北京太速科技自主研发,基于VPX架构,主体芯片为两片TIDSPTMS320C6678,两片Virtex-6XC6VLX240T-ff1156FPGA,1个RapidIOSwitch。FPGA连接FMC子卡。FPGA......
  • JDK源码阅读-------自学笔记(二十六)(java.util.Map 自定义讲解)
    一、简介Map就是用来存储“键(key)-值(value)”对的.通过键寻找value,所以键不能重复.数组的本质也是一种键值对,区别就是索引一般是数字,而Map的Key可以是任意对象(字符串,数字),相当于把数组的索引范围扩的更大,使用更方便.实际开发中较为常用.二、Map的常用方法实例(1......