瑞萨RH850 SPI的异步传输

一、SPI工作原理

SPI (Serial Peripheralinterface),顾名思义就是串行外围设备接口。SPI是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,主要应用在EEPROM,FLASH,实时时钟,AD转换器

关于SPI协议,那么我们理解一句话即可。SPI的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。

主机与从机连接关系图

RH850/P1x-C SPI组成

RAM数据通过内部数据总线P_Bus向CSIH模块传输数据

  • CSIHnTX0W寄存器写数据接口

  • CSIHnRX0W寄存器读数据接口

  • CSIHnCFGx配置CSIH接口(波特率,奇偶校验,数据方向,数据长度,时间参数等)

  • CTL0/1/2 MCTL0/1/2控制寄存器

配置好CSIH后,RAM向TX0W中写入数据,CSIH自动将数据加载到移位寄存器中,并根据配置好的时钟,波特率,向MOSI上发送数据

同时,MISO将接收到的数据放到移位寄存器后面,当发送完16bit数据后也接收到了16bit数据,这时CSIH将移位寄存器的值复制到RX0W中,RAM可通过RX0W读取接收到的数据

  • CSIH提供一个128 words的RAM空间,4路SPI通道共用(1word = 32bit+7bit ECC)

  • 二、SPI工作模式

    1.Direct access mode直接访问

    直接绕过CSIH提供的RAM区,当数据写入TX0W寄存器时,数据直接复制到移位寄存器中

  • 2.Memory Mode

    使用CSIH提供的RAM空间

根据操作方式不同又可分为3种

  1. FIFO Mode
  • 将数据写入CSIHnTX0W不用等待数据发送完成,可立即写入下一个数据,可以一直把FIFO写满

  • 当接收到一帧数据后,会用接收到的数据覆盖原来发送数据位置

  • 可通过CSIHnRX0W读取数据,读取一次后,FIFO指针自动移动到下一个数据,可以一直读完

  1. Dual buffer mode
  • 把128words的RAM空间氛围两份,一份64words

  • 一份只负责存放发送数据,一份只负责存放接收数据

  1. Transmit-only buffer mode
  • RAM空间只存放发送数据,接收数据不放到RAM中,只能从CSIHnRX0W读取

三、SPI发送数据长度

  • 由于CSIHnTX0W / CSIHnRX0W和移位寄存器的数据长度只有16bit所以一次性最多只能发送16位数据

  1. 2~16bit Data length

当数据长度在2~16bit时,在发送过程中不需要修改配置,只要将数据发送到CSIHnTX0W 即可

  1. Data length greater than 16 bits

  • 需要使能扩展数据长度位EDL is enabled by setting bit CSIHnCTL1.CSIHnEDLE to 1

  • CSIHnTX0W寄存器CSIHnEDL为表示这一块数据后是否还有数据(1有/0无)

  • 当CSIHnTX0W.CSIHnEDL= 1时发送16位数据,CS不变

  • 当CSIHnTX0W.CSIHnEDL= 0时发送CSIHnCFG0.CSIHnDLS[3:0]配置的数据长度,发送完成后CS拉高

Example

Example for sending 40-bit data (123456789AH) to CS0:

40 bits are split 2 × 16 bits plus 8 bits.

• Initialize CSIHnCFG0.CSIHnDLS0[3:0] = 8.

• To send 123456789AH with MSB first, write the following sequence to CSIHnTX0W:

– 20FE 1234H (CSIHnTX0W.CSIHnEDL = 1)

– 20FE 5678H (CSIHnTX0W.CSIHnEDL = 1)

– 00FE 009AH (CSIHnTX0W.CSIHnEDL = 0)

The following figure illustrates the timing.

四、SPI传输数据格式(大小端,略过)

LSB

MSB

五、SPI中断

1. CSIHTIC (communication interrupt)发送数据中断

FIFO模块:发送指定数据的数据后产生中断

Direct access: 每一次数据发送完成后

2. CSIHTIR (communication interrupt)接收数据中断

FIFO模块:接收指定数据的数据后产生中断

Direct access: 每一次数据接收完成后

3. CSIHTIRE (error interrupt)错误中断

  • 4.CSIHTIJC (job completion interrupt)job完成中断

JOB模式开启CSIHnCTL1.CSIHnJE

Job完成后产生中断CSIHnTX0W.CSIHnEOJ = 1

Job中断产生后会替代掉CSIHTIC 中断

六、SPI方案

  1. 方案1:Direct access + 同步传输

  2. 方案2:FIFO+异步传输+ISR

  3. 方案3:FIFO+异步传输+DMA+ISR

七、操作方法

1. Davinci SPI模块配置

SpiJobs: Hw Unit Synchronous配置为ASYNCHRONOUS

SpiMemoryMode:内存模式选择FIFO_MODE

SpiGeneral:使能异步通信

2. SPI接收中断注册

  1. 中断源选择INTCSIHnTIR,接收信号中断

3. 调用方式

在初始化中使用死等,异步的polling模式模拟同步进行通信

在周期化调用中,使用异步发送,中断接收的模式,节省CPU负载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/7470.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度解读:Agent AI智能体如何重塑我们的现实和未来|TodayAI

​​​​​​​ 一、 引言 在当今时代,人工智能(AI)技术的快速发展正不断改变着我们的生活与工作方式。尤其是Agent AI智能体,作为AI技术中的一种重要形式,它们通过模拟人类智能行为来执行各种复杂任务,从…

如何从Mac上的清空垃圾箱中恢复已删除的文件?

Mac用户几乎每天都会删除文件。当您将文档删除到 Mac 垃圾箱时,该文件将被剪切到 Mac 垃圾箱中,并且可以轻松放回原处。但是,在某些情况下,您错误地删除了文档和文件,并在您意识到自己犯了一个大错误之前清空了垃圾箱。…

【Leetcode 42】 接雨水-单调栈解法

基础思路: 维持栈单调递减,一旦出现元素大于栈顶元素,就可以计算雨水量,同时填坑(弹出栈顶元素) 需要注意: 单调栈通常保存的是下标,用于计算距离 public static int trap2(int[…

leetcode-缺失的第一个正整数-96

题目要求 思路 1.这里的题目要求刚好符合map和unordered_map 2.创建一个对应map把元素添加进去,用map.find(res)进行查找,如果存在返回指向该元素的迭代器,否则返回map::end()。 代码实现 class Solution { public:int minNumberDisappeare…

一文快速掌握高性能内存队列Disruptor

写在文章开头 Disruptor是英国外汇公司LMAX开源的一款高性能内存消息队列,理想情况下单线程可支撑600w的订单。所以本文会从使用以及设计的角度来探讨一下这款神级java消息队列。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java code…

【Java基础】JVM内存简单介绍

JVM把内存分为五块:栈、堆、方法区、本地方法区、寄存器当函数被调用时,函数内部的局部变量在栈中开辟内存,当局部变量的作用域结束时,立刻释放栈中所占据的内存。 栈 栈的特点:先进后出当函数被调用时,为…

unity制作app(5)--发送数据给数据库

这个之前做过,先不做照片的。下一节再做带照片的。 第一步 收集数据 1.先做一个AppModel结构体,这个结构体需要单做的。 using System; using System.Collections.Generic; using System.Linq; using System.Text; //using Assets.Model; public clas…

【Linux】System V 共享内存

文章目录 1. 共享内存示意图2. 共享内存数据结构3. 共享内存函数shmgetshmatshmdtshmctl 4. 实例代码测试共享内存5. 共享内存相关命令6. System V 消息队列(了解)7. System V 信号量(了解) 共享内存区是最快的 IPC 形式。一旦这样…

力扣每日一题109:有序链表转换二叉搜索树

题目 中等 给定一个单链表的头节点 head ,其中的元素 按升序排序 ,将其转换为 平衡 二叉搜索树。 示例 1: 输入: head [-10,-3,0,5,9] 输出: [0,-3,9,-10,null,5] 解释: 一个可能的答案是[0,-3,9,-10,null,5],它…

Linux进程间通信方式

每个进程的用户空间都是独立的,不能相互访问。 所有进程的内核空间(32位系统3G-4G)都是共享的 应用场景 作为缓冲区,处理速度不同的进程之间的数据传输资源共享:多个进程之间共享同样的资源,一个进程对共享数据的修改&#xff0c…

【目录】500 行或更少(500 Lines or Less)

AOSA 500 行或更少(500 Lines or Less)是《开源应用程序体系结构》(Architecture of Open Source Applications, AOSA)系列的第四卷。该系列的前三卷是关于大型程序必须解决的大问题,而本书专注于程序员在构建新事物时在小规模中做出的设计决…

亚马逊自养号测评环境搭建需要准备哪些?

在当下电商领域竞争白热化的背景下,亚马逊平台的卖家们对流量之于店铺转化率的重要性有着深刻的认识。随着对平台内部流量的依赖逐渐减弱,他们纷纷寻求更多元化的途径来提升销售业绩和品牌的市场影响力。在此过程中,自养号测评成为了一种备受…

Golang日志实战教程:掌握log与syslog库的高效使用

Golang日志实战教程:掌握log与syslog库的高效使用 简介理解 Golang 的 log 库基本概念创建日志记录器自定义日志记录器日志级别 深入 syslogsyslog 的基础配置和使用 syslog高级应用 日志格式化与管理日志格式化日志文件管理 日志的高级应用集成第三方日志框架使用 …

盲盒小程序怎么做?盲盒创业

盲盒作为当下的新兴行业,从出现就备受年轻消费者的追捧,成为了我国发展前景巨大的行业之一。盲盒市场不仅吸引了众多消费者,同时也吸引了更多的创业者,成为了一大创业新模式。 盲盒小程序是一种线上盲盒销售模式,以社…

气膜滑雪馆:滑雪新宠的全面介绍—轻空间

气膜滑雪馆,作为一种创新型的滑雪运动设施,正以其独特的建筑特点和功能优势,成为滑雪运动领域的引领者。这些场馆凭借其轻盈的结构、优良的保温性能和环保节能的特性,为滑雪场馆的建设提供了全新的解决方案。相较于传统建筑&#…

【ElasticSearch】IK分词器中停用词问题

问题描述 在ES中进行部分关键词搜索时,搜索无结果,如搜索 【IT】 环境描述 中文分词插件 这里使用的是 analysis-ik 分词调试 POST test_index/_analyze {"text":"IT Manager","analyzer": "ik_max_word"…

【Django学习笔记(八)】MySQL的数据管理

MySQL的数据管理 前言正文1、新增数据2、删除数据3、修改数据4、查询数据5、案例:员工管理5.1 创建表结构5.1.1 创建数据库5.1.2 创建数据表 5.2 Python操作MySQL5.2.1 pymysql 的基本操作步骤5.2.2 优化 pymysql 的基本操作步骤5.2.3 查询数据5.2.4 修改数据5.2.5 …

使用 Gitea 进行私有 Git 仓库管理

在本文中,我们将介绍如何使用 Gitea 搭建并管理私有 Git 仓库。Gitea 是一个轻量级的 Git 服务,提供了类似于 GitHub 的功能,适合个人和小团队使用。我们将通过以下步骤来完成搭建和配置 Gitea 服务器。 步骤一:安装 Gitea 首先…

spss 导入数据的时候 用于确定数据类型的值所在的百分比95%是什么意思,数据分析,医学数据分析

在SPSS中,当提及“数据类型的值所在的百分比95%”时,这通常与数据的统计分布或置信区间有关,而不是直接关于数据类型的定义。 导入数据的时候需要定义数据类型,那么根据提供的数据,来定义,有时候&#xff…

【每天一个linux小知识】如何使用 oh-my-zsh 让使用zsh更高效

往期文章 tailf 和 tail -f nslookup 目录 往期文章对比演示zshoh-my-zsh安装自动提示、补全、语法高亮等插件参考 对比演示 使用 oh-my-zsh 之前: 使用 oh-my-zsh 之后: zsh 要使用oh-my-zsh前提是使用zsh。所以第一步安装zsh 可以看一下你的系统…