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

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1M系列
  4. ICU PORT程序不进中断

ICU PORT程序不进中断

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

    CANRX引脚(PTC_6)复用ICU休眠时切换ICU检测总线,现在发现程序不进入ICU中断,程序没有进IcuPortIrqProcess,PIFR没有置位,可能是什么原因?比较急!谢谢9a83edd1-3c90-46e9-b0b7-d34863a6c942-image.png

    1 条回复 最后回复
    0
    • janJ 离线
      janJ 离线
      jan YunTu
      编写于 最后由 编辑
      #2

      image.png
      检查一下Platform中的GPIOC中断是否使能

      chenchaoC 1 条回复 最后回复
      0
      • chenchaoC 离线
        chenchaoC 离线
        chenchao
        回复了jan 最后由 编辑
        #3

        jan 在 ICU PORT程序不进中断 中说:

        image.png
        检查一下Platform中的GPIOC中断是否使能
        使能了025c5d00-7ba2-441b-b371-22cddf83b51f-image.png

        WRW 1 条回复 最后回复
        0
        • WRW 离线
          WRW 离线
          WR YunTu
          回复了chenchao 最后由 编辑
          #4

          chenchao 把你yct发出来看一下

          chenchaoC 1 条回复 最后回复
          0
          • chenchaoC 离线
            chenchaoC 离线
            chenchao
            回复了WR 最后由 编辑
            #5

            WR 在 ICU PORT程序不进中断 中说:

            chenchao 把你yct发出来看一下

            54ca97f5-9951-4b4e-aea5-f68b7c8a5ea3-S52_Lamp.yct 麻烦了,谢谢

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

              image.png

              AI提供的解决方案,仅供参考!!!!

              🔍 核心问题分析

              1️⃣ 【最可能】CAN1_RX引脚功能模式冲突 ⚠️

              您的Port配置中,PTC_6的 PortPinMode = "CAN1_RX"(CAN1接收的复用功能),但ICU使用的是 IcuIp = "PORT" 模式。

              问题本质:

              • 当引脚处于 CAN1_RX 复用功能时,PORT模块的数字输入中断检测电路可能无法有效捕获信号变化
              • ICU的PORT模式依赖的是PORT模块的 GPIO数字输入路径 上的边沿检测
              • CAN1_RX模式下,CAN控制器直接接管了该引脚,PORT模块的PIFR(Pin Interrupt Flag Register)不会因为CAN总线信号的变化而置位

              解决方案: 在休眠切换到ICU检测时,需要先将PTC_6的引脚功能切换为 GPIO输入模式,再使能ICU中断。唤醒后再切回CAN1_RX。


              2️⃣ 边沿触发配置不匹配 — ICU_RISING_EDGE

              "IcuDefaultStartEdge": "ICU_RISING_EDGE"
              

              CAN总线物理层特性:

              电平 含义
              HIGH 隐性(Recessive,空闲态)
              LOW 显性(Dominant,激活态)

              一个CAN帧的第一个动作是 SOF(Start of Frame)= 显性位 = 下降沿。如果您只配置了 ICU_RISING_EDGE,CAN帧起始的下降沿无法被捕获!虽然后续数据位中会有上升沿,但如果CAN控制器已经休眠,整个总线上可能只有一个下降沿就结束了。

              解决方案: 改为 ICU_BOTH_EDGES(双边沿检测):

              "IcuDefaultStartEdge": "ICU_BOTH_EDGES"
              

              3️⃣ IcuWakeupCapability = false

              "IcuWakeupCapability": false
              

              您在休眠场景下需要使用ICU检测总线唤醒,但该通道的Wakeup能力是 关闭的。

              需要改为: true

              同时确认 IcuWakeup 子容器已正确关联到EcuM唤醒源:

              "IcuWakeup": {
                  "IcuChannelWakeupInfo": "EcuM/EcuMConfiguration/EcuMCommonConfiguration/EcuMWakeupSource/EcuMWakeupSource_0"
              }
              

              4️⃣ 无内部上拉/下拉电阻

              "PortPinPS": "PORT_PIN_NO_PULL"
              

              当CAN进入休眠模式、CAN控制器停止驱动RX引脚时,引脚如果没有外部上拉,引脚电平会浮动/不确定。PIFR检测需要清晰的数字边沿,浮动电平可能根本产生不了有效边沿。

              解决方案:

              • 硬件上确保CAN RX有外部上拉到VCC(通常CAN收发器会处理)
              • 或软件配置弱上拉:PORT_PIN_PULLUP

              5️⃣ 休眠期间PORT模块时钟可能被关闭

              您有 IcuEnableSchmSupport: true 和 IcuEnableUserModeSupport: true。如果进入休眠模式(如STOP模式)时PORT模块的时钟被门控关闭,则PIFR永远无法置位。

              请检查:

              • Mcu的 McuModeSettingConf 中休眠模式下的时钟门控配置
              • 确保PORT模块在休眠模式下时钟保持开启

              ✅ 建议修改方案汇总

              参数路径 当前值 建议值
              Icu/IcuConfigSet/IcuChannel/IcuChannel_0/IcuDefaultStartEdge ICU_RISING_EDGE ICU_BOTH_EDGES
              Icu/IcuConfigSet/IcuChannel/IcuChannel_0/IcuWakeupCapability false true
              Port/PortConfigSet/PortContainer/CAN1/CAN1_RX_PTC6/PortPinPS PORT_PIN_NO_PULL PORT_PIN_PULLUP
              应用代码中休眠前 未处理 需要切PTC_6为GPIO输入

              最关键的一点 — 应用代码流程

              休眠前的正确流程应是:

              1. CAN_DeInit() / CAN_SetMode(SLEEP)      // 关闭CAN控制器
              2. Port_SetPinMode(PTC_6, PORT_GPIO_MODE) // 切PTC_6为GPIO输入
              3. Icu_Init()                              // 初始化ICU(PORT中断模式)
              4. Icu_EnableWakeup()                      // 使能唤醒
              5. 进入休眠
              

              唤醒后的流程:

              1. Icu_DisableWakeup()
              2. Port_SetPinMode(PTC_6, CAN1_RX)        // 恢复CAN功能
              3. Can_Init()
              

              如果不做第2步的引脚功能切换,直接使用CAN1_RX模式下的PORT中断检测,PIFR大概率不会置位,这就是您碰到的问题。

              1 条回复 最后回复
              1
              • WRW 离线
                WRW 离线
                WR YunTu
                编写于 最后由 编辑
                #7

                can_wakeup_demo.zip
                这个是can唤醒的demo你可以看一下

                1 条回复 最后回复
                0

              • 云途开发生态介绍

                快速上手云途开发生态

              • 云途论坛规则/Yuntu Forum Rules

                发帖前请查看

              • YT CONFIG TOOL调查问卷

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

              • can
                24
                demo
                22
                lin stack
                13
                uds
                13
                md14
                6
                yt-link
                6
                fbl
                5
                adc模块
                4
                Online Users
                EkkoE
                Ekko
                摆烂大王的学习奴隶摆
                摆烂大王的学习奴隶
                • 登录

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