美文网首页RTOS和GUI_基于英飞凌tc2x及stm32开发板
MCAL SPI分析源码且配置SPI DMA通信成功--Appl

MCAL SPI分析源码且配置SPI DMA通信成功--Appl

作者: applecai | 来源:发表于2022-05-21 20:18 被阅读0次

    一,前言

    今天没事做,那么还是学习吧,之前MCAL SPI使用不顺畅,所以我今天就把同步及异步spi的源码全部看懂吧,侧重于了解它的设计思路。

    二,学习点

    1. 同步spi使用Spi_lSyncStartJob函数,Spi_SetupEB仅用来设置发送接收buffer及长度的。
    2. 多核共享同一资源的操作,比如写spi4使用同步方式的策略。反正要对共享硬件资源操作的时候,就设置自选锁,对多核共享变量操作就加自选锁。对应共享资源的操作依赖判断变量的结果是忙碌还是空闲。
    Temp=4,就是操作spi4。
    a.先加自旋锁
    b.判断此核spi4状态是否空,且核没锁住
        if((Spi_RuntimeKernelVar[temp]->KernelStatus == SPI_IDLE)
            && (Spi_RuntimeCoreVar[CoreId]->KernelLock == 0U))
    c.先设置锁住kernel,然后设置此核spi4为忙
          Spi_RuntimeCoreVar[CoreId]->KernelLock |= (uint32)(1UL<<temp);
          Spi_RuntimeKernelVar[temp]->KernelStatus = SPI_BUSY;
    d.退出自旋锁
    e.开始spi4同步传输动作
    f.先加自旋锁
    g.设置变量KernelLock为unlock,KernelStatus为idle。
    e.退出自旋锁
    
    1. 异步主要使用Spi_lAsyncStartJob函数。关于spi中使用的DMA函数为Dma_ChUpdate。
    2. 通过看code可以知道异步通信函数中除了Global配置和ECON配置外,和DMA连接的是DATA_ENTRY(地址为0xF0002064),且用到了BACONENTRY。

    三,MCAL配置spi为DMA异步方式

    我参考MCAL demo,然后进行的修改。一开始就是无波形,于是我就跑了下MCAL demo的code,进行了配置修改及裁剪,结果通过对比找到原因,DMA也是类似中断,是需要安装的。加了如下3句在初始化,SPI通过DMA触发后就有波形了。

      IrqSpi_Init();
      SRC_QSPI4RX.B.SRE = 1;
      SRC_QSPI4TX.B.SRE = 1;
    

    四,关于MCAL SPI的EB配置备忘

    1.SpiLevelDelivered (0 -> 2) 要选择2,就是支持同步和异步,若仅选0,仅支持同步。若是异步的,最好添加如下API设置为异步Spi_SetAsyncMode((Spi_AsyncModeType)1u)。
    2.spijob要选异步


    image.png

    3.spi的hardware需要选DMAchannel


    image.png
    4.至于DMA模块中自己要创建channel,然后Irq中不选CPU0直接选DMA,然后中断优先级的位置填写DMA通道号。

    五,DMA SPI通信成功

    image.png

    六,小结

    技能又长进了,搞定spi~

    相关文章

      网友评论

        本文标题:MCAL SPI分析源码且配置SPI DMA通信成功--Appl

        本文链接:https://www.haomeiwen.com/subject/authprtx.html