瑞萨RH850 SPI的异步传输

2024-05-07 11:44
文章标签 异步 传输 spi rh850 瑞萨

本文主要是介绍瑞萨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负载

这篇关于瑞萨RH850 SPI的异步传输的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/967253

相关文章

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

js异步提交form表单的解决方案

1.定义异步提交表单的方法 (通用方法) /*** 异步提交form表单* @param options {form:form表单元素,success:执行成功后处理函数}* <span style="color:#ff0000;"><strong>@注意 后台接收参数要解码否则中文会导致乱码 如:URLDecoder.decode(param,"UTF-8")</strong></span>

AsyncTask 异步任务解析

1:构建AsyncTask 子类的回调方法: A:doInBackground:   必须重写,所有的耗时操作都在这个里面进行; B: onPreExecute:     用户操作数据前的调用; 例如:显示一个进度条 等 ; C: onPostExecute:    当doInBackground 执行完成后;会自动把数据传给onPostExecute方法;也就是说:这个方法是处理返回的数据的方法

使用Node-API进行异步任务开发

一、Node-API异步任务机制概述         Node-API异步任务开发主要用于执行耗时操作的场景中使用,以避免阻塞主线程,确保应用程序的性能和响应效率。         1、应用场景: 文件操作:读取大型文件或执行复杂的文件操作时,可以使用异步工作项来避免阻塞主线程。网络请求:当需要进行网络请求并等待响应时,可以使用异步工作项来避免阻塞主线程,从而提高应用程序的响应性能。数据库操

【JavaScript】异步操作:Promise对象

文章目录 1 概述2 Promise 对象的状态3 Promise 构造函数4 Promise.prototype.then()5 then() 用法辨析6 微任务 1 概述 Promise 对象是 JavaScript 的异步操作解决方案,为异步操作提供统一接口。它起到代理作用,充当异步操作与回调函数之间的中介,使得异步操作具备同步操作的接口。 Promise 的设计思想是,

线程池创建线程实现异步执行

创建线程池 private final ThreadPoolExecutor executorService = new ThreadPoolExecutor(10, 100, 1L, TimeUnit.MINUTES, new ArrayBlockingQueue<>(100)); Runnable runnable = () -> { //线程体 }; //执行线程 executorSer

远程桌面文件传输异常或者取消传输后一直显示正在取消

环境: Window Servers 2008 R2 摘要说明: 本篇文章主要讲述当应用远程桌面进行文件传输时,若因网络等导致进程中断,再次传输时则不能进行文件传输;或者传输时取消传输,然后一直显示正在取消。此时可以通过重启window的rdpclip.exe进程来解决此问题 步骤 1.关闭rdpclip.exe进程 远程桌面连上上传输异常的服务器,打开资源管理器,在进程列关闭rdpc

Java传输本地目录到远程服务器

在使用Java进行开发时,有时需要将本地目录中的文件复制或传输到远程服务器上。这种场景在部署应用程序或进行数据迁移时尤为常见。JSch库提供了一种简便的方法来实现这一功能。以下是从Codekru网站获取的信息摘要,并结合相关内容,展示如何使用JSch库实现从本地计算机复制整个目录到远程服务器的过程。 准备工作 首先,确保您的项目中已经包含了JSch库的依赖。如果您使用Maven作为构建工具,可

高效传输秘籍,揭秘Rsync和SCP的优劣,助你做出明智选择!

在日常的运维工作中,文件传输任务频繁出现,而选择合适的工具能显著提高工作效率。Rsync 和 SCP 是两款常见的文件传输工具,但它们各具优缺点,适合不同的场景。本文将通过深入分析这两款工具的特性、使用场景和性能,帮助你做出明智的选择,从而在文件传输中省时省力。 Rsync 与 SCP 简介 Rsync:增量传输的强大工具 Rsync 是一款支持文件同步的工具,广泛应用于备份和传输

ajax xmlhttprequest异步获取后台数据(二)

前台代码: <%@ Page Title="主页" Language="C#"  AutoEventWireup="true"     CodeBehind="Default.aspx.cs" Inherits="ajax测试二._Default" %> <html> <head> <script type="text/javascript">     function getHttpObj(