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.hqwc.cn/news/620857.html

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

相关文章

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

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

算法训练营第25天回溯(分割)

回溯算法(分割) 131.分割回文串 力扣题目链接(opens new window) 题目 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。 返回 s 所有可能的分割方案。 示例: 输入: “aab” 输出: [ [“aa”,“b”], [“a”,“…

SpringMVC:搭建第一个web项目并配置视图解析器

👉需求:用spring mvc框架搭建web项目,通过配置视图解析器达到jsp页面不得直接访问,实现基本的输出“hello world”功能。👩‍💻👩‍💻👩‍💻 1 创建web项目 1…

Hello算法11:排序

https://www.hello-algo.com/chapter_sorting/ 选择排序 初始未排序的区间是[0,n-1]在[0,n-1]中查找最小元素,和索引0交换,此时未排序的区间是[1,n-1]在[1,n-1]中查找最小元素,和索引1交换,此时未排序区间是[2,n-1]以此类推&…

C++ PTA 天梯赛 L1-003 个位数统计 L1-005 考试座位号 【范围for循环】【. 与 -> 访问成员】

L1-003 个位数统计 最后一个测试点考察的是当N特别大时,如果用整数存会数据溢出,改成字符串可以增大范围 知识点: 1.范围 for 循环,它对于遍历容器(比如字符串)中的元素非常方便。在这里,N 是…

低频电磁仿真 | 新能源汽车性能提升的利器

永磁同步电机 新能源汽车的心脏 近年来,全球变暖的趋势日益加剧,极端天气事件层出不穷,这些现象都反映出当前气候形势的严峻性。为了应对这一全球性挑战,各国纷纷采取行动,制定了一系列降碳、减碳的措施。中国在2020年…

蓝桥杯 — — 纯质数

纯质数 题目: 思路: 一个最简单的思路就是枚举出所有的质数,然后再判断这个质数是否是一个纯质数。 枚举出所有的质数: 可以使用常规的暴力求解法,其时间复杂度为( O ( N N ) O(N\sqrt{N}) O(NN ​)&…

【C++】哈希封装unordered_map和unordered_set

在前边的博客中我们已经实现了哈希表,我们又知道unordered_map和unordered_set就是用哈希表封装出来的,那么我们就自己来封装出它们,就跟之前用红黑树封装出set和map是一样的,我们这里使用哈希桶的版本 首先我们要用一个哈希表同时…

01-Git 之快速入门操作本地仓库

https://learngitbranching.js.org/?localezh_CN在线练习git 1. Git 安装好Git以后, 先检查是否已经绑定了用户名和邮箱 git config --list1.1 为什么要使用版本控制? 从个人角度: 在做项目时,如果一点点去改代码会很乱,不利…

《QT实用小工具·二十五》日志重定向输出

1、概述 源码放在文章末尾 日志重定向输出,包含如下功能: 支持动态启动和停止。支持日志存储的目录。支持网络发出打印日志。支持输出日志上下文信息比如所在代码文件、行号、函数名等。支持设置日志文件大小限制,超过则自动分文件&#xf…

免费插件集-illustrator插件-Ai插件-批量替换链接图

文章目录 1.介绍2.安装3.通过窗口>扩展>知了插件4.功能解释5.总结 1.介绍 本文介绍一款免费插件,加强illustrator使用人员工作效率,进行批量替换链接图。首先从下载网址下载这款插件 https://download.csdn.net/download/m0_67316550/87890501&am…