TC387实现SPI自通讯

TC387实现SPI自通讯

预期效果:

TC387上定义两个SPI通讯接口,一个用于发数据一个用于收数据。准确无误的收到一次数据就对核心板led灯的状态进行一次翻转。
由于实验设备有限,只能想办法通过现有设备进行实验。

实现过程:

最开始在cpu0的主函数中撰写了两个spi的通讯接口,分别进行收发,但是实际效果并没有实现。经过思考,SPI是一种同步通讯的协议,在同一个核内编写的程序需要顺序执行,当SPI0接口发送数据时,另一个SPI1并没有同时进行数据的接收,而SPI0发送完数据后SPI1再进行接收,SPI1接收数据时候将会什么数据都收不到。

发现程序存在的问题之后,由于设备有限,考虑到TC387是一款多核芯片,可以将两个SPI接口分别交由不同的cpu执行,就可以实现数据的收发同步进行。最终效果如下所示:

在这里插入图片描述
cpu0代码(只是简单的SPI使用流程勿直接粘贴运行):

uint8 data = 255; //设为255的原因是希望通过MOSI去电灯判断数据传输的情况,但由于没有led灯进行调试故而放弃这个想法。
spi_init(SPI_0,SPI_MODE0,115200,SPI0_SCLK_P20_11,SPI0_MOSI_P20_14,SPI0_MISO_P20_12,SPI0_CS0_P20_8);
//  参数说明      spi_n           选择SPI模块(SPI_1-SPI_4)
//  参数说明      mode            SPI模式 0:CPOL=0 CPHA=0    1:CPOL=0 CPHA=1   2:CPOL=1 CPHA=0   3:CPOL=1 CPHA=1  // 具体细节可自行查阅资料
//  参数说明      baud            设置SPI的波特率
//  参数说明      cs_pin          选择SPI片选引脚
//  参数说明      sck_pin         选择SPI时钟引脚
//  参数说明      mosi_pin        选择SPI MOSI引脚
//  参数说明      miso_pin        选择SPI MISO引脚
//  返回参数      void
spi_write_8bit(SPI_0, data);

CPU1代码:

spi_init(SPI_1,SPI_MODE0,115200,SPI1_SCLK_P10_2,SPI1_MOSI_P10_1,SPI1_MISO_P11_3,SPI1_CS1_P20_9);
while(true)
{if(spi_read_8bit(SPI_1)==255){gpio_set_level(LED1, led_state);gpio_set_level(LED2, led_state);gpio_set_level(LED3, led_state);gpio_set_level(LED4, led_state);}else{gpio_set_level(LED1, !led_state);gpio_set_level(LED2, !led_state);gpio_set_level(LED3, !led_state);gpio_set_level(LED4, !led_state);}}

本阶段收获:

  • 基本掌握逐飞开源库中spi,gpio,时钟的使用方法,

实验心得:由于对逐飞科技的开源库不熟悉,利用逐飞科技开源库进行开发进度较慢,需要阅读库中代码,明白库函数使用方法及原理。
过程中遇到的不懂的地方:

  • 在开源库中只提供了SPI的读和写的函数方法,对于SPI协议如果突然收到数据的情况的解决方案还不知道。目前的想法是结合开源库的中断进行完成,但对于逐飞的中断使用还没有进行了解。
  • 目前我在cpu0中使用SPI0接口进行write(发送)时候,另一个cpu1的SPI1不停地进行read(接收)才能获取到数据。但如果cpu1并不是一直在进行read是不是就可能不能够接收到cpu0的数据。
  • 开源库的SPI封装函数并没有SPI主从模式的设定,如果在与外部设备进行SPI通讯时,如何同时进行数据的收和发呢?

下一步的工作内容的想法:

  • 使用实验室的示波器对SPI传输的数据进行观察,通过波形对实际传输的数据进行较为校验。
  • 主控芯片的四个CPU正好可以为整个项目分别控制四个电磁阀的,使得电磁阀悬架对悬架的控制更为精确
  • 继续研究和了解逐飞科技开源库中串口和中断的内容,方便后边项目的实现和调试。

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

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

相关文章

linux 设置定时任务---学习

1、设置定时任务 crontab -e 设置格式参考:【Linux】Linux crontab 命令定时任务设置_crontab 设置每天10:30执行-CSDN博客 测试过程: */1 * * * * /root/cronjob.sh 脚本内容: echo "hell0 cronjob" >> /root/test/hello.txt 实现…

extends继承

目录 什么时候用继承? 继承的格式? 继承的特点 子类可以继承父类的哪些呢? 是否可以继承父类的构造方法呢? 是否可以继承成员变量? 是否可以继承成员方法? 在Java中,extends关键字用于实现继承关系。通过使用…

24年重庆三支一扶报名照不通过怎么处理?

24年重庆三支一扶报名照不通过怎么处理?

Laravel 11入门:使用ServBay打造高效开发环境

Laravel 11发布,改进了不少功能。 它引入了更加流畅的应用结构、每秒限速、健康路由等特性。 此外,Laravel还推出了第一方可扩展的WebSocket服务器Laravel Reverb,为你的应用提供强大的实时功能。 在今天的指南中,我将设置一个…

ASP.NET基于BS课件发布系统

摘 要:本文在分析建立动态网站的技术细节和课件发布工作流程的基础上,阐述了网站的结构与功能设计。本网站采用的是B/S结构,网站使用 Microsoft Visual Studio .NET2003作为主要开发工具,采用Dreamweaver 作为辅助开发工具实现网…

ELK日志分析系统之Zookeeper

一、Zookeeper简介 ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,它提供了一项基本服务:分布式锁服务。分布式应用可以基于它实现更高级的服务,实现诸如同步服务、配置维护和集群管理或者命名的服务。 Zookeepe…

3_3.Apache的管理及优化web

### 一.Apache的作用 ### 在web被访问时通常使用http://的方式 http:// ##超文本传输协议 http:// 超文本传输协议提供软件: Apache nginx stgw jfe Tengine ### 二.Apache的安装 ### dnf install httpd.x86_64 -y ### 三.Apache的启用 ### systemctl enable --…

C语言 03 VSCode开发

安装好 C 语言的开发环境后,就需要创建项目进行开发了。 使用 IDE(集成开发环境)进行开发了。 C 语言的开发工具很多,现在主流的有 Clion、Visual Studio、VSCode。 这里以 VSCode 作为演示。 创建项目 安装 VSCode。 推荐直接在…

【C语言】<动态内存管理>我的C语言终末章

<动态内存管理> 1. 为什么要有动态内存分配2. malloc和free2.1 malloc2.2 free 3. calloc和realloc3.1 calloc3.2 realloc 4.常见的动态内存错误4.1 对NULL指针的解引用操作4.2 对动态开辟空间的越界访问4.3 对非动态开辟内存使用free释放4.4 使用free释…

Navicat的安装与破解

个人介绍 hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 🦁作者简介:一名喜欢分享和记录学习的…

linux下常见解压命令gz、tar、zip详解

常见解压缩命令汇总 # .tar.gz解压 tar -zxvf jdk-17_linux-aarch64_bin.tar.gz # .tar.gz压缩 tar -czvf archive.tar.gz /path/to/directory# .gz解压 gzip -d file.gz # .gz压缩 gzip filename# zip解压 unzip filename.zip # zip压缩 zip archive.zip /path/to/file.tar.g…

累积分布函数图(CDF)的介绍、matlab的CDF图绘制方法(附源代码)

在对比如下两个误差的时候,怎么直观地分辨出来谁的误差更低一点?: 通过这种误差时序图往往不容易看出来。 但是如果使用CDF图像,以误差绝对值作为横轴,以横轴所示误差对应的累积概率为纵轴,绘制曲线图&am…

SpringBoot启动时banner设置

SpringBoot启动时banner设置 1.操作步骤2.各种banner图像 1.操作步骤 在application.properties文件中设置新的banner对于的文件位置,最好放在resources目录下 spring.banner.locationbanner.txt2.各种banner图像 (1)经典大佛图 具体txt文…

【Linux C | 多线程编程】线程同步 | 互斥量(互斥锁)介绍和使用

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰: 本文未经允许…

洛谷P1364医院设置

洛谷P1364 医院设置 医院设置 题目描述 设有一棵二叉树,如图: 其中,圈中的数字表示结点中居民的人口。圈边上数字表示结点编号,现在要求在某个结点上建立一个医院,使所有居民所走的路程之和为最小,同时约…

vue--双向数据绑定原理

Vue采用数据劫持 发布者-订阅者模式实现双向数据绑定,实现逻辑图如下所示: 数据劫持 Vue 借助Object.defineProperty()来劫持各个属性,这样一来属性存取过程都会被监听到 发布者-订阅者模式 主要实现三个对象:Observer&#…

包装类初识泛型

一.包装类 在Java中, 基本类型不继承于Object类. 所以为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了一个包装类型.(包装类型相当于引用类型) 1.基本类型对应的包装类 byte -- Byteshort -- Shortint -- Integerlong -- Longfloat -- Floatdouble -- Doublech…

用c++实现串匹配问题、选择排序

5.2.2 串匹配问题 【问题】 给定两个字符串S和T,在主串S中查找子串T的过程称为串匹配(string matching,也称模式匹配),T称为模式。在文本处理系统、操作系统、编译系统、数据库系统以及 Internet 信息检索系统中,串匹配是使用最频…

便宜的dv ssl证书推荐

SSL数字证书是维护互联网安全的重要手段之一。SSL数字证书主要目的是保护客户端和服务器数据传输的安全,防止网站数据在传输过程中被窃取或者篡改。其次,SSL数字证书能够验证网站的身份和合法性,防止用户访问到假冒或钓鱼网站。此外&#xff…

C语言基础---指针的基本语法

概述 内存地址 在计算机内存中,每个存储单元都有一个唯一的地址(内存编号)。通俗理解,内存就是房间,地址就是门牌号 指针和指针变量 指针(Pointer)是一种特殊的变量类型,它用于存储内存地址。指针的实…