rtthread下基于spi device架构MCP25625驱动
1.CAN驱动架构
由于采用了RTT的spi device架构,不能再随心所遇的编写CAN驱动 了,之前内核虽然采用了RTT内核,但是驱动并没有严格严格按RTT推荐的架构来做,这次不同了,上次是因为4个MCP25625挂在了4路独立的SPI总线上, 这次2个mcp25625挂在1个SPI总线上,同时此SPI总线上还挂载了1个铁电,1个norflash,且FM25V10我已经使用了spi device架构驱动起来了,说实话,用RTT的spi架构,还很方便,于是CAN驱动我也只能用spi架构。首先我遇到一个问题就是,怎么处理mcp25625中断,之前是在中断中操作spi总线接收数据的,但在官方spi架构下,这种方法行不通,因为在RTT中,不允许在中断中调用可能导致中断挂起的操作,比如申请信号量、互斥互斥量等,但spi架构的核心函数都要lock(spibus),这直接就导致系统死掉,其实我测试发现不但不能在中断处理函数中调用可能导致中断挂起操作,即使在RT_TIMER_FLAG_SOFT_TIMER定时器中这种操作也是被禁止的,因为我想设计1个50ms定时器,定时发送几个CAN帧,发现直接在超时处理函数中发送CAN帧是不行的,(程序直接打印的原因是timer线程优先级为0,在优先级为0 的线程是不被允许申请资源的!),于是我只能专门新建一个发送线程,超时处理函数向此线程发送邮箱,“发送线程”收到邮箱后,触发发送动作。 接收线程也是类似这样的操作,在mcp25625的中断处理函数中只发送邮箱,而在设置了高优先级的接收线程内收到邮箱信息后, 开启接收CAN帧动作。经过2天的调试,基本可以实现MCP25625驱动。
2, mcp25625,不连接CAN总线时,发送死循环
OSM单次触发,CAN正常情况下,如果 发送不成功的话,会一直尝试发送,直到发送成功,但是也可以设置发1次,就需要使能此位(正常情况禁止)

这个与USB上的HOST会自动再发IN Token,非常像,总线上不回应数据,就一直询问,这2个地方都是发送之后会产生1个中断,造成系统一直在中断、中断处理死循环,其它任务得不到执行。
解决办法也不一样,
对于MERR中断, 直接关闭MERR中断使能,因为在中断处理函数中,MERR中断处理非常简单,就是清了一下中断标志,禁止MERR中断也没有什么影响,
对于USB IN taken产生NACK中断, 只能减少中断次数, 设置为1ms中断1次,也能解决问题。
3, mcp25625接收丢数据
因为RTTHREAD效率问题,也不好改,而且用的是倍受争议的SPI HAL库,同中接收数据不在中断中了,在线程中,这就导致了老是丢CAN数据了 ,试过了很多方法,也没解决,包括,提高接收线程的优先级,提高了6, 仅次于timer系统记数器优先级,结果还是不能,最终通过提高SPI时钟频率解决,因为SPI总线经连通了核心板与底板,上面又挂了很多外设,之前设置的是5Mhz,直接提高到10Mhz,测试SPI总线正常,收发数据正常,CAN也没再丢数据,先这个办了。

相关文章:
rtthread下基于spi device架构MCP25625驱动
1.CAN驱动架构 由于采用了RTT的spi device架构,不能再随心所遇的编写CAN驱动 了,之前内核虽然采用了RTT内核,但是驱动并没有严格严格按RTT推荐的架构来做,这次不同了,上次是因为4个MCP25625挂在了4路独立的SPI总线上&…...
Open3D 点云投影到圆柱(python详细过程版)
目录 一、算法原理1、圆柱方程2、投影原理二、代码实现三、结果展示1、原始点云2、投影结果四、参考链接一、算法原理 1、圆柱方程 圆柱方程可以表示为: ( x − x...
Unity实战(10):如何将某个相机的画面做成贴图(RenderTexture)
目录 前言 一、创建物体、材质与相机 二、将RenderTexture赋给材质 2.1 修改rt1的一些属性 2.2 将rtMat1材质的shader改为Unlit/Texture,并将rt1赋给这个材质 三、效果呈现 前言 本文记录如何将某个相机的画面做成贴图,即游戏某些场景中小地图做法…...
STL- 函数对象
1 函数对象 1.1 函数对象概念 概念: 重载函数调用操作符的类,其对象常称为函数对象函数对象使用重载的()时,行为类似函数调用,也叫仿函数 本质: 函数对象(仿函数)是一个类,不是一个函数 1.2 函数对象…...
前端 JS 经典:上传文件
重点:multipart/form-data 后端识别上传类型必填 1. form 表单上传 <!-- enctype"multipart/form-data" 这个必填 --> <form action"http://127.0.0.1:8080/users/avatar" method"post" enctype"multipart/form-data…...
数据分析面试
数据分析相关的职位面试可以拆解为以下三块: 1)技术基础 2)项目经验提问 3)业务问题 【数据分析与挖掘(二)】面试题汇总(附答案)_数据分析面试常见问题及答案_youthlost的博客-CSDN博客 我裸辞去面试p…...
Open3D(C++) 整体最小二乘拟合平面
目录 一、算法原理1、算法过程2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。 一、算法原理 1、算法过程 最小二乘拟合平面认为点云数据系数矩阵不存在误差,然而由于观测条件的限制,观测向量、系数矩阵都有可能存在误差,那么最小二乘方法就不再是最…...
【android12-linux-5.1】【ST芯片】【RK3588】【LSM6DSR】HAL源码分析
一、环境介绍 RK3588主板搭载Android12操作系统,内核是Linux5.10,使用ST的六轴传感器LSM6DSR芯片。 二、芯片介绍 LSM6DSR是一款加速度和角速度(陀螺仪)六轴传感器,还内置了一个温度传感器。该芯片可以选择I2C,SPI通讯,还有可编程终端,可以后置摄像头等设备,功能是很…...
MT8788安卓核心板详细参数_MTK安卓主板开发板智能通讯模块
MT8788安卓核心板集成了一个高效的12nm SoC,内置4G LTE调制解调器,将强大的硬件与到处可连接的全面功能设计相结合。 MTK8788智能终端具备许多功能,包括4G、2.4G/5G双频WiFi、蓝牙4.2BLE、2.5W功放、USB、mipi屏接口、三路摄像头接口、GPS和…...
C++String模拟实现
实际上string没什么可讲,主要是对string函数的运用与理解,与其写库函数如何用,不如直接去看c库函数来得好。 以下是自己实现string功能函数。但没对string库中的全部函数进行实现,而是实现主要使用的。 .cpp内是用来测试函数功能…...
Java 设置免登录请求接口被拦截问题
1、在设置免登录时,前端将请求的路由添加到白名单后,请求接口还是被拦截到了,将请求接口也设置后还是会被拦截跳转到登录页面 通过JAVA 注解 Anonymous 进行设置匿名访问就可以了...
(其他) 剑指 Offer 67. 把字符串转换成整数 ——【Leetcode每日一题】
❓ 剑指 Offer 67. 把字符串转换成整数 难度:中等 写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为…...
【MySQL】一文详解MySQL,从基础概念到调优
作者简介 前言 博主之前写过一个MySQL的系列,从基础概念、SQL到底层原理、优化,专栏地址: https://blog.csdn.net/joker_zjn/category_12305262.html?spm1001.2014.3001.5482 本文会是这个系列的清单,拉通来聊一聊Mysql从基础概…...
机器学习——boosting之提升树
提升树和adaboost基本流程是相似的 我看到提升树的时候,懵了 这…跟adaboost有啥区别??? 直到看到有个up主说了,我才稍微懂 相当于,我在adaboost里的弱分类器,换成CART决策树就好了呗࿱…...
解决Spring Boot启动错误的技术指南
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...
使用Spring Security保障你的Web应用安全
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...
PostgreSQL本地化
本地化的概念 本地化的目的是支持不同国家、地区的语言特性、规则。比如拥有本地化支持后,可以使用支持汉语、法语、日语等等的字符集。除了字符集以外,还有字符排序规则和其他语言相关规则的支持,例如我们知道(‘a’,‘b’)该如何排序&…...
MySQL——日志
日志的作用 1.用来排错 2.用来做数据分析 3.了解程序的运行情况,是否健康--》了解MySQL的性能,运行情况 分类 mysql很多有类型的日志,按照组件划分的话,可以分为 服务层日志 和 存储引擎层日志 : - 服务层…...
玩转Mysql系列 - 第18篇:流程控制语句(高手进阶)
这是Mysql系列第18篇。 环境:mysql5.7.25,cmd命令中进行演示。 代码中被[]包含的表示可选,|符号分开的表示可选其一。 上一篇存储过程&自定义函数,对存储过程和自定义函数做了一个简单的介绍,但是如何能够写出复…...
LED屏幕电流驱动设计原理
LED电子显示屏作为户外最大的应用产品,是大型娱乐,体育赛事,广场大屏幕等场所不可或缺的产品,从单双色简单的文字展示到今天的高清全彩,显示屏的技术一直都在进步,全球80%的LED电子显示屏皆产自于中国。显示…...
机器视觉中的坐标系转换:从像素到世界的无缝衔接
1. 机器视觉中的坐标系基础概念 第一次接触机器视觉时,最让我困惑的就是各种坐标系之间的关系。记得当时调试工业相机时,明明在图像上看到了目标物体,但机械臂就是抓不准位置。后来才发现,问题出在没有正确理解像素坐标系和世界坐…...
macOS歌词解决方案:LyricsX从安装到精通的全方位指南
macOS歌词解决方案:LyricsX从安装到精通的全方位指南 【免费下载链接】LyricsX 🎶 Ultimate lyrics app for macOS. 项目地址: https://gitcode.com/gh_mirrors/ly/LyricsX 在数字音乐体验中,歌词同步显示是提升沉浸感的关键要素。然而…...
ChatTTS 入门指南:从零开始构建你的第一个语音对话应用
最近在做一个需要语音交互的小项目,选型时发现了 ChatTTS 这个工具,感觉挺有意思的。它不像一些大厂的 TTS 服务那么“重”,更像是一个专为对话场景优化的语音合成工具。如果你是第一次接触,可能会觉得有点无从下手,比…...
AI背景分离革新性全攻略:ComfyUI-BiRefNet创意工作流零基础上手指南
AI背景分离革新性全攻略:ComfyUI-BiRefNet创意工作流零基础上手指南 【免费下载链接】ComfyUI-BiRefNet-ZHO Better version for BiRefNet in ComfyUI | Both img & video 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-BiRefNet-ZHO 在数字创意…...
Linux原生B站客户端:突破平台限制的深度体验指南
Linux原生B站客户端:突破平台限制的深度体验指南 【免费下载链接】bilibili-linux 基于哔哩哔哩官方客户端移植的Linux版本 支持漫游 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-linux 对于Linux用户来说,在开源生态中寻找优质的视频…...
RTX 4090D深度学习镜像效果展示:PyTorch 2.8实测Wan2.2-T2V高清视频生成
RTX 4090D深度学习镜像效果展示:PyTorch 2.8实测Wan2.2-T2V高清视频生成 1. 开箱即用的专业级深度学习环境 当拿到这台搭载RTX 4090D显卡的工作站时,我首先被它的硬件配置震撼了。24GB显存加上120GB内存的组合,在本地运行大型视频生成模型不…...
投资回报不到 1 年!这套导热油炉处理油泥减量化方案,凭什么火遍行业?
行业痛点:油泥处置面临的严峻挑战随着环保政策日趋严格,HW08类含油污泥的处理已成为石化、炼油等企业的必答题。然而,传统处理方式面临四大核心痛点:成本压力巨大:传统焚烧处置费用高达3000-5000元/吨,填埋…...
Cosmos-Reason1-7B保姆级教程:从NVIDIA模型下载到浏览器界面可用全流程
Cosmos-Reason1-7B保姆级教程:从NVIDIA模型下载到浏览器界面可用全流程 本文面向想要快速上手Cosmos-Reason1-7B推理工具的初学者,无需深厚技术背景,跟着步骤操作即可完成本地部署和使用。 1. 工具简介:你的本地推理助手 Cosmos-…...
乳腺癌治疗新思路:除了ER/PR/HER2,你的单细胞数据里还藏着哪些靶点?(附PLK1抑制剂案例)
乳腺癌精准治疗新靶点:单细胞数据驱动的PLK1抑制剂开发路径 当临床医生面对三阴性乳腺癌患者时,传统分子分型往往无法提供足够的治疗指引。最新单细胞测序技术揭示,在ER/PR/HER2这些经典标志物之外,肿瘤微环境中还隐藏着更具临床价…...
KKManager:Illusion游戏模组管理终极指南,一键安装更新所有插件和卡片
KKManager:Illusion游戏模组管理终极指南,一键安装更新所有插件和卡片 【免费下载链接】KKManager Mod, plugin and card manager for games by Illusion that use BepInEx 项目地址: https://gitcode.com/gh_mirrors/kk/KKManager KKManager是一…...
