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

YunTu Forum

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

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

已定时 已固定 已锁定 已移动 YTM32B1M系列
11 帖子 3 发布者 345 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 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 条回复 最后回复
                      0

                    • 云途论坛规则/Yuntu Forum Rules

                      发帖前请查看

                    • YCT离线License申请流程

                      帮助没办法联网的电脑使用YCT

                    • YT CONFIG TOOL调查问卷

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

                    • demo
                      12
                      can
                      9
                      lin stack
                      6
                      yt-link
                      5
                      vscode
                      3
                      adc模块
                      2
                      i2c
                      2
                      uuid
                      2
                      Online Users
                      jankyJ
                      janky
                      kasselK
                      kassel
                      YTCQ_shejiwangY
                      YTCQ_shejiwang
                      DavidBLD
                      DavidBL
                      • 登录

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