AutoSar中的Spi_SetupEB函数原理与实现

文章目录

    • 一、函数介绍
    • 二、项目背景
    • 三、函数在AUTOSAR官网中的介绍
    • 四、代码实现
    • 五、验证
    • 六、联调过程中遇到的问题

一、函数介绍

此函数是Autosar标准中的接口,为EB SPI处理器/驱动程序设置缓冲区和数据长度的服务
指定频道。用容易理解的话说就是 设置一下某个通道的接收数据地址和发送数据地址以及数据长度的函数。

函数原型:
Std_ReturnType Spi_SetupEB ( Spi_ChannelType Channel, const Spi_DataBufferType* SrcDataBufferPtr, Spi_DataBufferType* DesDataBufferPtr, Spi_NumberOfDataType Length )
入参Channel为Channel索引号,索引号在Spi_Cfg.h里有。入参SrcDataBufferPtr为某路Channel的发送数据缓冲区地址,DesDataBufferPtr为某路Channel的接收数据缓冲区地址,Length为数据长度。

二、项目背景

写此函数的背景是目前有一个项目,需要我这边的MCU做SPI从机,SOC做主机与MCU进行SPI通信,并使用AUTOSAR标准接口实现。

三、函数在AUTOSAR官网中的介绍

首先进入到AUTOSAR官网
在这里插入图片描述
在Communication Drivers中即可找到关于SPI相关的介绍,可通过此访问文档。
在这里插入图片描述
函数的详细介绍可查看此文档进行了解。了解功能和接口定义实现一个函数基本就足够了。

四、代码实现

根据上面介绍,我们就来实现一下这个接口。并将其应用到SPI从机的代码逻辑功能中。
下面代码是当SPI来数据,SPI从机就会进入到接收中断中进行处理数据,然后将数据放入到Spi_SetupEB中的接收数据DesDataBufferPtr中。

函数实现:

Spi_ChannelObjType Spi_ChannelObj[SPI_MAX_CHANNELS];typedf struct
{Spi_DataBufferType* TxBufPtr;Spi_DataBufferType* RxBufPtr;Spi_NumberOfDataType numWordsTxRx;
}
Spi_ChannelObjType;Spi_SetupEB(spi_ChannelType Channel,Spi_DataBufferType *Src,Spi_DataBufferType *Des,Spi_NumberOfDataType Length)
{/*关全部中断*/Spi_ChannelObjType *chObj;chObj = &Spi_ChannelObj[Channel];chObj->TxBufPtr = Src;ChObj->RxBufPtr = Des;ChObj->numWordsTxRx = Length;/*开全部中断*/
}

接收中断处理代码

uint8 RxOneData;
void Spi_IrqHandler(spi_ChannelType Channel)
{RxOneData = xxxx();//xxxx()代表获取接收SPI数据的函数Spi_ChannelObj[Channel].RxBufPtr  = &RxOneData;//将数据给到全局指针中
}

验证测试代码

Spi_DataBufferType  TXEB[10];
Spi_DataBufferType  RXEB[10];
Spi_NumberOfDataType Length = 10;Spi_SetupEB(0,TXEB,RXEB,Length);//上电后调用一次即可
//待接收中断中收到数据,即存到了EXEB中

五、验证

当调用验证代码,当SPI主机来了数据,RXEB数组中也就存放了接收到的数据。

六、联调过程中遇到的问题

1、字节间纯同步
众所周知,SPI是同步传输的,从机应跟随时钟线进行数据通信,问题是,当主机来了一个字节的数据,从机触发了中断,数据从机收到了,但是,从机的第二个字节的数据是主机第一个字节的数据,导致数据错了一位。
:其实这不是一个问题,是没问题的,因为从机是不可能提前知道主机要给从机发什么数据的,相当于我告诉你我要打你一拳,你是不知道我打你哪里的,这也是相同的道理,不可能提前预知。但是甲方毕竟是甲方,此问题要解决。
**解决办法是:**在应用设置SpiSetupEB接口时,将第一个字节的数据放入到接收数据寄存器中,也就是提前将第一个接收数据寄存器的一个字节放入了主机要发送给我第一个数据,这样就实现数据对齐了。
2、数据错误
在本地调试没有问题,到了项目中调试出现了主机给从机发数据,不过几秒中从机就收不到数据了,经过测试,主机确实给主机发过去了,从机没有进接收中断。
**答:**这是从机MCU产生错误标志,需要将错误状态标志位给清掉之后才能再次进中断接收数据。
解决办法是:
每间隔1ms的时间查询是否产生了错误状态,如果产生了错误状态,连续读四次接收数据寄存器才能彻底清除。然后再清除错误状态寄存器。

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

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

相关文章

SpringBoot中使用监听器

1.定义一个事件 /*** 定义事件* author hrui* date 2024/7/25 12:46*/ public class CustomEvent extends ApplicationEvent {private String message;public CustomEvent(Object source, String message) {super(source);this.message message;}public String getMessage() …

uniapp手写滚动选择器

文章目录 效果展示HTML/Template部分&#xff1a;JavaScript部分&#xff1a;CSS部分&#xff1a;完整代码 没有符合项目要求的选择器 就手写了一个 效果展示 实现一个时间选择器的功能&#xff0c;可以选择小时和分钟&#xff1a; HTML/Template部分&#xff1a; <picker…

『 Linux 』信号概念与信号的产生 ( 万字 )

文章目录 信号概念前台进程与后台进程信号的本质硬件理解信号的产生Core dump 标志 信号概念 "信号"一词指用来传达信息或只是的各种形式的提示或标志; 在生活中常见的信号例如红绿灯,交通标志,短信通知等 在操作系统中,"信号"是一种用于异步通知进程发生特…

国衍科技——RFID技术的应用

在文物馆藏信息的记录与管理过程中&#xff0c;准确性和详细性是至关重要的。无论是大型博物馆还是私人收藏馆&#xff0c;都需要有效的方法来确保馆藏文物信息的可追溯性和可访问性&#xff0c;才能提供更好的服务和保护馆藏资源。而结合射频识别&#xff08;RFID&#xff09;…

2024年虚拟主机转移教程

转移网站并不困难&#xff0c;但选择正确的选项和最佳程序才是关键。网站托管服务被视为当今数字世界的基石&#xff0c;全球有18 亿个网站。网站所有者可以通过下载备份、将其上传到新服务器并指向域名来手动转移网站。他们还可以通过新网站托管商的助手请求来移动网站。对于初…

华清数据结构day5 24-7-22

1>使用栈&#xff0c;完成进制转换输入&#xff1a;一个整数&#xff0c;进制数输出&#xff1a;该数的对应的进制数 seqstack.h #ifndef SEQSTACK_H #define SEQSTACK_H #define MAX 10 #include"myhead.h" typedef int datatype;typedef struct {datatype *d…

【Tomcat】快速入门

概述 Tomcat是Apache软件基金会一个核心项目&#xff0c;是一个开源免费的轻量级Web服务器&#xff0c;支持Servlet/JSP.少量avaEE规范。Tomcat Tomcat也被称为Web容器、Servlet容器。Servleti程序需要依赖于Tomcat才能运行。 安装使用 下载安装都是绿色版本&#xff0c;解…

Git、Gitlab以及分支管理

分布式版本控制系统 一、Git概述 Git是一种分布式版本控制系统&#xff0c;用于跟踪和管理代码的变更。它由Linus torvalds创建的&#xff0c;最初被设计用于Linux内核的开发。Git 允许开发人员跟踪和管理代码的版本&#xff0c;并且可以在不同的开发人员之间进行协作。 Githu…

全年销售7亿块,巧克力企业如何通过相邻业务打造极致产品力?

蒂罗尔巧克力是日本经典的巧克力品牌。 糖果业务是松尾早期的主营业务&#xff0c;在主营业务下滑的情况下&#xff0c;确立新的竞争方向&#xff0c;通过主营业务优势进入相邻业务&#xff0c;打造新产品成就巧克力极致产品力&#xff0c;避免衰退重回增长。 如何通过进入相邻…

MFC列表框示例

本文仅供学习交流&#xff0c;严禁用于商业用途&#xff0c;如本文涉及侵权请及时联系本人将于及时删除 目录 1.示例内容 2.程序步骤 3.运行结果 4.代码全文 1.示例内容 编写一个对话框应用程序CMFC_Li6_4_学生信息Dlg&#xff0c;对话框中有一个列表框&#xff0c;当用户…

matlab gui下的tcp client客户端编程框架

GUI界面 函数外定义全局变量 %全局变量 global TcpClient; %matlab作为tcpip客户端 建立连接 在“连接”按钮的回调函数下添加以下代码&#xff1a; global TcpClient;%全局变量 TcpClient tcpip(‘192.168.1.10’, 7, ‘NetworkRole’,‘client’); %连接到服务器地址和端…

【Hot100】LeetCode—152. 乘积最大子数组

目录 题目1- 思路2- 实现⭐152. 乘积最大子数组——题解思路 3- ACM 实现 题目 原题连接&#xff1a;152. 乘积最大子数组 1- 思路 动规五部曲 2- 实现 ⭐152. 乘积最大子数组——题解思路 class Solution {public int maxProduct(int[] nums) {// 初始化答案以及以第一个元…

windows wsl ubuntu系统安装桌面可视化

参考&#xff1a; https://www.bilibili.com/read/cv33557374/ 1&#xff09;首先先安装好wsl ubuntu系统 2&#xff09;安装 Ubuntu 桌面版 sudo apt purge -y acpid acpi-support modemmanagersudo apt-mark hold acpid acpi-support modemmanager sudo apt install ubunt…

黑马头条Day09-用户行为

一、课前准备 1. long类型精度丢失问题 解决方案&#xff1a; 当后端响应给前端的数据中包含了id或者特殊标识&#xff08;可自定义&#xff09;的时候&#xff0c;把当前数据进行转换为String类型当前端传递给后端的dto中有id或者特殊标识&#xff08;可自定义&#xff09;的…

Windows环境下安装docker、配置Ubuntu容器并使用vscode ssh连接到容器

目录 一、Windows环境下安装docker二、配置Ubuntu三、在容器中安装ssh服务参考文章 一、Windows环境下安装docker 在任务栏中搜索**“Windows功能”** -将适用于Linux的Windows子系统和虚拟机平台选上 然后按照提示重启电脑。然后开始安装WSL。通过cmd以管理员身份打开命令提…

OSPF概述

OSPF OSPF属于内部网关路由协议【IGP】 用于单一自治系统【Autonomous System-AS】内决策路由 自治系统【AS】 执行统一路由策略的一组网络设备的组合 OSPF概述 为了适应大型的网络&#xff0c;OSPF在AS内划分多个区域 每个OSPF路由器只维护所在区域的完整的链路状态信息 …

ufw命令简介

正文共&#xff1a;3999 字 41 图&#xff0c;预估阅读时间&#xff1a;4 分钟 我们之前在CentOS系统中研究了iptables命令的使用方法&#xff08;iptables命令简介&#xff09;&#xff0c;还做了简单的应用实验&#xff08;如何通过iptables配置URL过滤黑名单&#xff1f;、如…

Vue3 + Vite 打包引入图片错误

1. 具体报错 报错信息 报错代码 2. 解决方法 改为import引入&#xff0c;注意src最好引用为符引入&#xff0c;不然docker部署的时候可能也会显示不了 <template><img :src"loginBg" alt""> </template><script langts setup> …

LinkedList与链表(1万多字超级详细版本)

一. ArrayList的缺陷 上个博客已经熟悉了ArrayList的使用&#xff0c;并且进行了简单模拟实现。通过源码知道&#xff0c;ArrayList底层使用数组来存储元素&#xff1a; public class ArrayList < E > extends AbstractList < E > implements List < E &g…

国际奥委会主席巴赫:阿里AI技术将巴黎奥运转播带到新高度

7月26日&#xff0c;巴黎奥运会开幕在即&#xff0c;国际奥委会主席巴赫在国际转播中心举行的活动中表示&#xff0c;2024巴黎奥运会展现了奥运转播的未来&#xff0c;广泛应用的阿里AI技术正在将巴黎奥运转播带到新的高度。 &#xff08;国际奥委会主席巴赫&#xff09; 在巴黎…