跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
折叠
品牌标识

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1M系列
  4. SPI通信,数据发送完成,但状态一直处于BUSY状态

SPI通信,数据发送完成,但状态一直处于BUSY状态

已定时 已固定 已锁定 已移动 已解决 YTM32B1M系列
11 帖子 3 发布者 3.7k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • wangzhenW 离线
    wangzhenW 离线
    wangzhen
    写于 最后由 编辑
    #1

    上电初始化SPI,DMA,后,在初始化函数中继续使用SPI_DRV_MasterTransfer发送数据,数据发送成功,且可以使用逻辑分析仪抓取到数据,但是在SPI_DRV_MasterGetTransferStatus函数判断中一直处理BUSY状态。把SPI发送放到TASK中执行,就一切正常,SPI_DRV_MasterGetTransferStatus函数判断为SUCCESS状态,数据也正常。

    1 条回复 最后回复
    0
    • runR 离线
      runR 离线
      run YunTu
      写于 最后由 编辑
      #4

      SPI_DRV_MasterTransfer() 会在中断中更新SPI busy的状态。
      检查一下是否关了全局中断。

      1 条回复 最后回复
      0
      • wangzhenW 离线
        wangzhenW 离线
        wangzhen
        写于 最后由 编辑
        #2

        由于上电需要使用SPI初始化外部设备模块,所以请帮忙分析下原因,在云途的demo程序中是正常的,已进行过配置对比,修改后也一直不行。

        1 条回复 最后回复
        0
        • wangzhenW 离线
          wangzhenW 离线
          wangzhen
          写于 最后由 编辑
          #3

          20241205-192434.jpg 20241205-192447.jpg 20241205-192453.jpg 20241205-192459.jpg

          1 条回复 最后回复
          0
          • runR 离线
            runR 离线
            run YunTu
            写于 最后由 编辑
            #4

            SPI_DRV_MasterTransfer() 会在中断中更新SPI busy的状态。
            检查一下是否关了全局中断。

            1 条回复 最后回复
            0
            • wangzhenW 离线
              wangzhenW 离线
              wangzhen
              写于 最后由 编辑
              #5

              全局中断开了的,而且在Task中执行SPI读写就是正常的

              1 条回复 最后回复
              0
              • runR 离线
                runR 离线
                run YunTu
                写于 最后由 编辑
                #6

                用的是freertos吗?Freertos在调用vTaskStartScheduler()之前,全局中断可能会被关掉的。请再次检查一下全局中断(可以直接看内核寄存器:priMask,baseMask)
                https://github.com/FreeRTOS/FreeRTOS-Kernel/issues/254

                1 条回复 最后回复
                0
                • wangzhenW 离线
                  wangzhenW 离线
                  wangzhen
                  写于 最后由 编辑
                  #7

                  用的是Freertos,我在初始化的时候,有手动打开全局中断,这样的话可以排除这个问题吗?
                  1.jpg 2.jpg

                  1 条回复 最后回复
                  0
                  • runR 离线
                    runR 离线
                    run YunTu
                    写于 最后由 编辑
                    #8

                    不能排除,freertos可能用的是baseMask(看portDISABLE_INTERRUPTS()实现)
                    可以调用portENABLE_INTERRUPTS() 来打开全局中断。
                    最好还是通过看寄存器方式来排除。

                    1 条回复 最后回复
                    0
                    • wangzhenW 离线
                      wangzhenW 离线
                      wangzhen
                      写于 最后由 编辑
                      #9

                      portENABLE_INTERRUPTS() ;我在发送SPI之前加上了这个函数调用就OK了,那应该是这个问题了;请问下这个问题有什么优化的办法吗?还是说必须在portENABLE_INTERRUPTS() 调用之后才能发送SPI数据?

                      1 条回复 最后回复
                      0
                      • FrankieF 离线
                        FrankieF 离线
                        Frankie YunTu
                        写于 最后由 编辑
                        #10

                        用freeRTOS,所有的外设中断不能为0

                        1 条回复 最后回复
                        0
                        • wangzhenW 离线
                          wangzhenW 离线
                          wangzhen
                          写于 最后由 编辑
                          #11

                          这里的外设中断,指的是中断优先级吗?

                          1 条回复 最后回复
                          -1
                          • FrankieF Frankie 将这个主题转为问答主题,在
                          • FrankieF Frankie 将这个主题标记为已解决,在

                        • 云途开发生态介绍

                          快速上手云途开发生态

                        • 云途论坛规则/Yuntu Forum Rules

                          发帖前请查看

                        • YT CONFIG TOOL调查问卷

                          帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...

                        • can
                          28
                          demo
                          23
                          uds
                          14
                          lin stack
                          13
                          md14
                          6
                          yt-link
                          6
                          fbl
                          5
                          adc模块
                          4
                          Online Users
                          lxhxssL
                          lxhxss
                          frankieqqF
                          frankieqq
                          JETTJ
                          JETT
                          chenchaoC
                          chenchao
                          xiangyuX
                          xiangyu
                          yt0069Y
                          yt0069
                          • 登录

                          • 登录或注册以进行搜索。
                          • 第一个帖子
                            最后一个帖子
                          0
                          • 版块
                          • 最新
                          • 标签
                          • 热门