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.

[参考译文] MSP430FR5994:MSP430从冷启动加电的时间

Guru**** 2589245 points
Other Parts Discussed in Thread: MSP430FR5994, MSP-EXP430FR5994

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/762803/msp430fr5994-msp430-power-up-time-from-cold-start

器件型号:MSP430FR5994
主题中讨论的其他器件: MSP-EXP430FR5994

大家好、

我目前正在评估要使用的 MSP430FR5994芯片、需要验证冷启动的加电时间。  根据数据表、它指定标称值为0.5ms、最大值为1ms (数据表、第5.12.4节)。  我的测试显示不同、并想知道是否有人知道测试方法来获得此类结果。  (不确定我能否在 GPIO 引脚变为高电平之前更改时钟源、也就是测试应用中的第三行)

我的设置如下:

  1. 使用 LaunchPad 开发板 MSP-EXP430FR5994
  2. 使用基本"BlinkLed"项目、对其进行修改、使其在启动时初始化特定的 GPIO 并将其驱动为高电平
  3. 使用示波器、将探头连接到该引脚、3.3V 电源和开发板上的 RST 引脚
  4. 触发范围
    1. 为电路板加电、触发 GPIO 上升沿上的示波器。
    2. 保持电路板通电、按下复位按钮

(基本上、在冷启动时、3.3和 RST 同时变为高电平)

在4.a 和4.b 中、从 RST 高电平或3.3高电平到 GPIO 高电平的时间约为1.7ms。  我们的应用需要非常快的唤醒时间、节省一毫秒将大有帮助。

谢谢、

-Mike

代码片段:

int main (void){

volatile uint32_t i;

//停止看门狗计时器
WDT_A_HOLD (WDT_A_base);

//将 P4.4设置为输出方向
GPIO_setAsOutputPin (
GPIO_PORT_P4、
GPIO_PIN4
);

GPIO_setOutputLowOnPin (GPIO_PORT_P4、GPIO_PIN4);//init 为0

GPIO_setOutputHighOnPin (GPIO_PORT_P4、GPIO_PIN4);//驱动高电平-示波器触发

//电路板初始化
init_gpio();

GPIO_setOutputHighOnPin (GPIO_PORT_P4、GPIO_PIN4);//驱动为高电平,INIT GPIO 将重置为低电平

FRAMCTL_A_configureWaitStateControl (FRAMCTL_A_ACCESS_TIME_CYCESS_1);
init_Clock ();//16MHz DCO

//将 P1.0设置为输出方向
GPIO_setAsOutputPin (
GPIO_PORT_P1、
GPIO_PIN0
);

//将 P1.0设置为输出方向
GPIO_setAsOutputPin (
GPIO_PORT_P4、
GPIO_PIN4
);

//禁用 GPIO 上电默认高阻抗模式
//激活先前配置的端口设置
//PMM_unlockLPM5 ();

while (1)
{
//切换 P1.0输出
GPIO_toggleOutputOnPin (
GPIO_PORT_P1、
GPIO_PIN0
);

//GPIO_toggleOutputOnPin (
// GPIO_PORT_P4、
// GPIO_PIN4
// );

//延迟
for (i=1000000;i>0;i--);
}
} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Mike:
    我将在我的一侧执行一些测试、但我的初始反馈如下:
    从代码中可以看到、您使用的是驱动程序库功能。 在这种情况下、您必须记住对代码执行时间、代码大小和电流消耗的影响。 当然、使用库可以轻松地生成代码、但它不是免费的。 即使对于切换引脚等简单操作、代码也要大得多。 因此、它会消耗更多的内存、更多的电流和更多的时间。
    第二个因素是 C 语言中的编码。C 语言中的库和代码意味着、除了器件内部启动代码之外、该代码在启动时执行并且无法避免、还插入并执行启动代码。 这在 main.c 文件中的代码之前发生。 所有 C 编码项目都是这样。 给定项目的复杂性会增加 C 启动代码、因此使用驱动程序库也是可以预料的。 可以手动修改 C-Startup、以便尽快包括关键代码。 对于给定的器件、基于汇编器的代码无疑是最快的选择。
    就像一个侧注。 没有片上电源管理功能的 MSP430器件、F1xx、F4xx、F2xx 和 G2xx 的启动速度明显更快、因为在 POR 上没有执行内部启动代码。
    我很快就会回到我身边的测试结果。

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

    您好、Peter、

    感谢您的回复。  正如您所建议的那样、我对提供的示例代码进行了更多的挖掘、并且确实看到了单个端口的 GPIO 初始化花费了相当多的周期。  我还发现、由于这个原因、清除 PMM 位会延迟我的所有启动、从而延迟我的初始 GPIO 高电平设置。  BU 删除了大部分驱动程序库功能、移动 PMM 位在代码段早期清零、我可以将加电时间设置为580us 左右(这对我们的应用很好、我猜我们可以通过删除其余的驱动程序代码来缩小该范围、 或组装)。  但是、正如您提到的、我们可能必须对 C init 例程进行一些修改、以便及时初始化所有需要的内容。  非常感谢您向正确的方向指示。  我必须承认、该芯片组与我们之前的项目(C2000系列 DSP)不同。  

    再次感谢。

    -Mike

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

    尊敬的 Mike:

    非常感谢您的反馈。 我对 FR5994 Launchpad 和基于汇编器的代码执行了一些简单的测试。

    一个测量是释放 RST。

    第二个是 P1.0的加电和切换。

    请记住、这仅基于一个样本、可用作指示器、使用尽可能短的代码可实现的目标。

    请参阅下面使用的汇编器代码:

    ;------------------------------------------------------------------
    ;与 TI Code Composer Studio 一起使用的 MSP430汇编器代码模板



    ; 作者:Peter Spevak

    ; 最后一个变化:2019年1月15日

    ; 2019年1月15日设置项目
    ;------------------------------------------------------------------
               cdecls C、list、"msp430.h"      ;包含器件头文件
               
    ;------------------------------------------------------------------
               .def   重置                  ;将程序入口点导出到
                                               ;使链接器知道它。
    ;********
    ;堆栈指针定义
    ;********
               .global __stack_end
               .sect  .stack

    ;------------------------------------------------------------------

               .text                          ;汇编到程序存储器中。
               .retain                        ;覆盖 ELF 条件链接
                                               ;并保留当前部分。
               .retainrefs                    ;并保留具有的任何段
                                               ;对当前段的引用。

    ;------------------------------------------------------------------

    复位
          MOV    #_STACK_END、SP             ;初始化堆栈指针
    StopWDT
          MOV    #WDTPW|WDTHOLD、&WDTCTL      ;停止看门狗计时器

          BIC.B  #BIT0、&P1OUT                ;将 P1.0设置为低电平
          MOV.B  #BIT0、&P1DIR                ;将 P1.0切换到输出方向

          BIC    #LOCKLPM5、&PM5CTL0          ;禁用 GPIO 上电默认值
                                               ;要激活的高阻抗模式
                                               ;以前配置的端口
                                               ;设置

          XOR.B  #BIT0、&P1OUT                ;切换 P1.0

    ;********
    ;主循环

    ;@简述:主循环

    ;最后一个变化:2018年9月4日

    ;2018年9月4日设置功能
    ;********
    主程序
          NOP
          BIS    #LPM0 + GIE、SR              ;输入 LPM0、带中断
          NOP                                 ;用于调试器
          JMP    main                        ;
          NOP


    ;********
    ;中断矢量

    ;最后一个变化:2018年9月4日

    ;********
          .sect  ".reset"               ;MSP430复位矢量              0FFFEh
          短路 复位

    此致

    Peter

    ;------------------------------------------------------------------
    ;与 TI Code Composer Studio 一起使用的 MSP430汇编器代码模板



    ; 作者:Peter Spevak

    ; 最后一个变化:2019年1月15日

    ; 2019年1月15日设置项目
    ;------------------------------------------------------------------
               cdecls C、list、"msp430.h"      ;包含器件头文件
               
    ;------------------------------------------------------------------
               .def   重置                  ;将程序入口点导出到
                                               ;使链接器知道它。
    ;********
    ;堆栈指针定义
    ;********
               .global __stack_end
               .sect  .stack

    ;------------------------------------------------------------------

               .text                          ;汇编到程序存储器中。
               .retain                        ;覆盖 ELF 条件链接
                                               ;并保留当前部分。
               .retainrefs                    ;并保留具有的任何段
                                               ;对当前段的引用。

    ;------------------------------------------------------------------

    复位
          MOV    #_STACK_END、SP             ;初始化堆栈指针
    StopWDT
          MOV    #WDTPW|WDTHOLD、&WDTCTL      ;停止看门狗计时器

          BIC.B  #BIT0、&P1OUT                ;将 P1.0设置为低电平
          MOV.B  #BIT0、&P1DIR                ;将 P1.0切换到输出方向

          BIC    #LOCKLPM5、&PM5CTL0          ;禁用 GPIO 上电默认值
                                               ;要激活的高阻抗模式
                                               ;以前配置的端口
                                               ;设置

          XOR.B  #BIT0、&P1OUT                ;切换 P1.0

    ;********
    ;主循环

    ;@简述:主循环

    ;最后一个变化:2018年9月4日

    ;2018年9月4日设置功能
    ;********
    主程序
          NOP
          BIS    #LPM0 + GIE、SR              ;输入 LPM0、带中断
          NOP                                 ;用于调试器
          JMP    main                        ;
          NOP


    ;********
    ;中断矢量

    ;最后一个变化:2018年9月4日

    ;********
          .sect  ".reset"               ;MSP430复位矢量              0FFFEh
          短路 复位