This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28034:F28034不能从待机状态唤醒

Guru**** 2536320 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/606629/tms320f28034-f28034-cannot-be-waken-up-from-standby-accasionally

器件型号:TMS320F28034

您好、香榭丽舍

我的客户发现有几个 F28034无法偶尔从待机模式唤醒。 在其系统中、有3个键用作唤醒源。 例如、如果按下一个键、将生成唤醒信号。 通过 GPIO 设置唤醒信号后、F28034仍处于低功耗模式。 MCU 只能在下电上电后恢复。 与低功耗相关的代码如下所示。

静态易失性 uint8_t su8_wake_source;

 

/**

 * MCU进入休眠模式

 *此函数返回时,表明已收到唤醒信号(未滤波)

 *@返回

 *唤醒信号源:

 * 1:开门信号1;2:开门信号2;3:关门信号

 *

uint8_t BSPSUPEnterSleep ()

   布尔_t int_state_Before_sleep;

 

   int_state_Before_sleep = mBSPIntIsEnable();

 

   SU8_WAKEUP_SOURCE = 0;

 

   //编写 LPM 代码值0

   EALLOW;

   if (SysCtrlRegs.PLLSTS.bit.MCLKSTS!= 1)//仅在 PLL 不处于跛形模式时进入待机模式。

   {

       SysCtrlRegs.LPMCR0.bit.LPM = 0x0001;  // LPM 模式=待机

   }

   EDIS;

 

   mBSPIntEnableWakeupInt();  //启用唤醒中断

 

   if (false = int_state_Before_sleep)//确保全局中断打开

   {

       EINT;

   }

 

   mBSPSupEnableDogInt();//设置 WD 中断

 

   操作

   {

       _asm (" idle");//执行此指令后,MCU进入休眠状态

 

       /********* 睡眠模式 /

 

       _asm (" NOP"); //从低功耗模式唤醒

 

       mBSPSupKickDog;

 

   } while (su8_WAKEUP_SOURCE = 0);   //非门打开信号,再次进入待机状态。

 

   if (false =int_state_Before_sleep)  

   {

       Dint;

   }

 

   mBSPSupportDisableDogInt(); //禁用 WDT 中断

 

   mBSPIntDisableWakeupInt();  

 

   返回 su8_WAKEUP_SOURCE;

 

/**

 *唤醒中断处理

 *

void BSPSupWakeupCBK (void)

   //检查唤醒信号

   if (0 = mBSPCOMGetPortPinValue (CPIN_OpenDoorSig1_Port、CPU_OpenDoorSig1_Pin))

   {

       SU8_WAKEUP_SOURCE = 1;

   }

   否则、如果(0 = mBSPCOMGetPortPinValue (CPIN_OpenDoorSig2_Port、CPU_OpenDoorSig2_Pin))

   {

       SU8_WAKEUP_SOURCE = 2;

   }

   否则、如果(0 = mBSPCOMGetPortPinValue (CPUIN_CloseDoorSig_Port、CPUIN_CloseDoorSig_Pin))

   {

       SU8_WAKEUP_SOURCE = 3;

   }

   其他

   {

       //非开关门唤醒,继续休眠

       SU8_WAKEUP_SOURCE = 0;

   }

   

   PieIntAckClear (1); //清除中断标识

 

如果使用内部振荡器、故障仍然存在。  

您是否会帮助检查此问题的根本原因? 谢谢。

BR、

年轻

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    从他们的原理图中、我发现另一个不正确的设计是晶体振荡器电路、如下所示。 它们使用10MHz 晶体。 根据数据表、建议将 Rd (R54)的值设置为470Ohm、但在其设计中使用0Ohm。 它是否合适?

    谢谢。

    BR、

    年轻

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    年轻、

    首先、XTAL 上的电路似乎不正确。 使用10MHz 晶体时、Rd 通常为470Ohm、CL1和 CL2 wil 为15pF。 请确保客户阅读并遵循数据表的"晶体振荡器选项"部分。 他们是否让晶振/谐振器供应商描述了电路的特性? 供应商将拥有设备和专业知识、以便就正确的价值向客户提出建议。

    其次、我在代码中看不到任何 GPIO 设置。 提供的唤醒信号是否长于 QUALSTDBY 配置? 器件无法唤醒的频率如何? 在待机模式下、系统中是否有噪声? 如果您可以提供示波器捕获来显示此情况、则可能有助于验证信号是否干净并保持足够长的时间来触发唤醒。

    谢谢、
    标记
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Mark、

    非常感谢您的回复。 请看我的答案如下。

    [引用用户="Mark Labbato"]

    首先、XTAL 上的电路似乎不正确。 使用10MHz 晶体时、Rd 通常为470Ohm、CL1和 CL2 wil 为15pF。 请确保客户阅读并遵循数据表的"晶体振荡器选项"部分。 他们是否让晶振/谐振器供应商描述了电路的特性? 供应商将拥有设备和专业知识、以便就正确的价值向客户提出建议。
    [/报价]

    根据客户的反馈、使用内部10MHz 振荡器时也会发生挂起。 因此、我们来看根本原因不是外部 XTAL。 但是、我仍然要求客户修改该电路。

    [引用用户="Mark Labbato"]
    其次、我在代码中看不到任何 GPIO 设置。 提供的唤醒信号是否长于 QUALSTDBY 配置?

    [/报价]

    请参阅示波器捕获、如下所示。这次信号可以满足数据表的要求。 但我的问题是、如果信号比 QUALSTDBY 配置短、F2803x 会发生什么情况? MCU 是否可能挂起?  

    [引用用户="Mark Labbato"]

    器件无法唤醒的频率如何?

    [/报价]

    他们编写了一个测试代码、即 MCU 将在运行1分钟后进入待机模式、然后30秒后、MCU 将被外部信号唤醒。 然后 MCU 将运行1分钟、依此类推。 没有发生故障的固定时间、仅从30分钟到4小时。

    [引用用户="Mark Labbato"]

    在待机模式下、系统中是否有噪声?

    [/报价]
    当 MCU 进入待机模式时、没有外部高 EMI 电路工作。 此外、3.3V 电源也很好、没有明显的噪声。

    谢谢。

    年轻

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    年轻、

    感谢您提供的额外信息、我将了解我们是否可以在此处获取设置以尝试复制它。 如果您可以附加主 c 文件并且我可以直接运行它、这可能会很有用。

    如果 WAKE 信号短于 QUALSTDBY 定义的周期、器件不应该挂起、它将忽略 WAKEUP 脉冲。 计数器从第一个边沿开始计数、如果计数值达到指定的周期、器件将唤醒。 您可以通过将脉冲设置为短于 QUALSTDBY 周期来验证这一点。

    谢谢!
    标记