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正好可以为整个项目分别控制四个电磁阀的,使得电磁阀悬架对悬架的控制更为精确
  • 继续研究和了解逐飞科技开源库中串口和中断的内容,方便后边项目的实现和调试。
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值