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

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1M系列
  4. CAN的DMA 是否会在 SPI DMA运行时有概率出现无法进入DMA中断现象,无法进入CAN DMA接收完成中断

CAN的DMA 是否会在 SPI DMA运行时有概率出现无法进入DMA中断现象,无法进入CAN DMA接收完成中断

已定时 已固定 已锁定 已移动 YTM32B1M系列
7 帖子 2 发布者 131 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 曹 离线
    曹 离线
    曹文勋
    写于2024年12月19日 03:23 最后由 编辑
    #1

    4512be64-a76b-4e22-a762-8ade34f82762-image.png
    b78b3339-0ffa-449c-939f-3eaebe13d338-image.png
    ced32c4a-b405-45e3-9334-26297dc638f0-image.png
    02c65d28-eb9f-4251-8a01-df38db7a498f-image.png
    08ad434e-8e3d-4633-9756-a539d2713443-image.png

    1 条回复 最后回复
    0
    • 曹 离线
      曹 离线
      曹文勋
      写于2025年3月19日 05:23 最后由 编辑
      #2

      在spi 的 dma传输前后需要关闭全局中断 这个现象才会消失,这个是必须的嘛,SDK 的demo中没有需要关闭全局中断

      1 条回复 最后回复
      0
      • R 离线
        R 离线
        run YunTu
        写于2025年3月19日 05:40 最后由 编辑
        #3

        可以修改一下下面这个函数试试
        platform\drivers\src\dma\dma_hw_access.c:

        void DMA_SetDmaRequestCmd(DMA_Type *base, uint8_t channel, bool enable)
        {
            /* Halt DMA before changing the REQEN register */
            SDK_ENTER_CRITICAL();
            base->CTRL |= 1 << 17u;
            int32_t timeout = 50;
            /* Wait DMA active done */
            while ((base->CTRL & DMA_CTRL_ACTIVE_MASK) != 0)
            {
                timeout--;
                if (timeout <= 0)
                {
                    break;
                }
            }
            if (enable)
            {
                base->REQEN |= (0x01UL << channel);
            } else
            {
                base->REQEN &= ~(0x01UL << channel);
            }
            /* Resume DMA */
            base->CTRL &= ~(1 << 17u);
            SDK_EXIT_CRITICAL();
        }
        
        1 条回复 最后回复
        0
        • 曹 离线
          曹 离线
          曹文勋
          写于2025年3月19日 05:49 最后由 编辑
          #4

          好的,这个改动是关于什么的呢,可以麻烦解释一下吗

          1 条回复 最后回复
          0
          • 曹 离线
            曹 离线
            曹文勋
            写于2025年3月19日 05:55 最后由 编辑
            #5

            我看你也是做了临界区的判断,这个是新的patch嘛,
            请教一下下面的操作是做什么用处?
            while ((base->CTRL & DMA_CTRL_ACTIVE_MASK) != 0)
            {
            timeout--;
            if (timeout <= 0)
            {
            break;
            }
            }

            R 1 条回复 最后回复 2025年3月19日 06:06
            0
            • R 离线
              R 离线
              run YunTu
              在 2025年3月19日 06:06 回复了 曹文勋 最后由 编辑
              #6

              曹文勋 在 CAN的DMA 是否会在 SPI DMA运行时有概率出现无法进入DMA中断现象,无法进入CAN DMA接收完成中断 中说:

              我看你也是做了临界区的判断,这个是新的patch嘛,
              请教一下下面的操作是做什么用处?
              while ((base->CTRL & DMA_CTRL_ACTIVE_MASK) != 0)
              {
              timeout--;
              if (timeout <= 0)
              {
              break;
              }
              }

              看描述的现象确实像临界区设置被重入出的问题。

              这个修改主要是DMA REQEN 可以硬件清除,所以读 / 更改 / 写操作可能会导致错误地再次启用DMA通道。
              如果是CAN的接收的话,可能会再次启动接收。
              SDK 1_3_1 HOTFIX 版本中有做修复。

              如果不是这里的问题,可以再看看是不是其他地方临界区被重入了。

              曹 1 条回复 最后回复 2025年3月19日 06:23
              0
              • 曹 离线
                曹 离线
                曹文勋
                在 2025年3月19日 06:23 回复了 run 最后由 编辑
                #7

                run 在 CAN的DMA 是否会在 SPI DMA运行时有概率出现无法进入DMA中断现象,无法进入CAN DMA接收完成中断 中说:

                曹文勋 在 CAN的DMA 是否会在 SPI DMA运行时有概率出现无法进入DMA中断现象,无法进入CAN DMA接收完成中断 中说:

                我看你也是做了临界区的判断,这个是新的patch嘛,
                请教一下下面的操作是做什么用处?
                while ((base->CTRL & DMA_CTRL_ACTIVE_MASK) != 0)
                {
                timeout--;
                if (timeout <= 0)
                {
                break;
                }
                }

                看描述的现象确实像临界区设置被重入出的问题。

                这个修改主要是DMA REQEN 可以硬件清除,所以读 / 更改 / 写操作可能会导致错误地再次启用DMA通道。
                如果是CAN的接收的话,可能会再次启动接收。
                SDK 1_3_1 HOTFIX 版本中有做修复。

                如果不是这里的问题,可以再看看是不是其他地方临界区被重入了。

                收到,感谢

                1 条回复 最后回复
                0

              • 云途论坛规则/Yuntu Forum Rules

                发帖前请查看

              • YCT离线License申请流程

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

              • YT CONFIG TOOL调查问卷

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

              • demo
                11
                can
                8
                lin stack
                5
                yt-link
                5
                vscode
                3
                adc模块
                2
                i2c
                2
                uuid
                2
                Online Users
                • 登录

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