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:Lanchpad SVSH 计数器读取故障(汇编代码示例)

Guru**** 2595770 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/789690/msp430fr5994-lanchpad-svsh-counter-read-failure-assembler-code-sample

器件型号:MSP430FR5994

在激活模式下运行 Launchpad (使用超级电容器)时、如果触发 SVSH、则 RTC 计数器无法正确读取。

;--copyright--, bsd_EX
; Copyright (c) 2012 Texas Instruments Incorporated
;版权所有。
;
;以源代码和二进制形式重新分发和使用,无论是否修改
;只要
满足以下条件;

;;;*源代码的重新分发必须保留上述版权
; 声明、此条件列表和以下免责声明。
;;*
二进制形式的再发行必须复制上述版权
; 通知、本条件列表和中的以下免责声明
; 分发时提供的文档和/或其他材料。
;
*德州仪器公司的名称和名称均不
相同; 其贡献者可用于认可或推广衍生产品
; 未经特定的事先书面许可。
;
本软件由版权所有者和贡献者“按原样”提供
;以及任何明示或暗示的保证,包括但不限于;
对适销性和特定
用途适用性的暗示保证不予承认。 在任何情况下,版权所有者或
;作者都不对任何直接、间接、偶然、特殊的、
; 惩罚性或必然的损害(包括但不限于
:采购替代产品或服务;丧失使用、数据或利润;
或业务中断)、但出于任何责任理论;
无论是在合同中、严格的责任还是
由于使用本软件而以任何方式产生的侵权行为(包括疏忽或其他)
;即使被告知可能会造成此类损害。
;

;
MSP430代码示例免责声明
;
MSP430代码示例是自包含的低级程序,通常
以
高度简洁的方式演示单个外设功能或器件功能。 为此,代码可能依赖于器件的加电默认
值;
在组合多个示例中的代码时,必须注意寄存器值和设置,如时钟配置和注意;以避免潜在的副作用
。 有关 GUI 的信息,另请参见 www.ti.com/grace;
有关外设配置的 API 函数库方法,请参见 www.ti.com/msp430ware。
;;--/
版权--;*********

;MSP430FR59x 演示-使用软件切换 P1.0
;
说明:使用软件切换 P1.0。
;ACLK = n/a,MCLK = SMCLK = TACLK =默认 DCO =~625KHz
;
MSP430FR5969
; --------
; /|\| |;
|| |;
-|RST |;
| |;
| P1.0|->LED
;
Tyler Witt/ P. Thanigai
;Texas Instruments Inc.
;2012年8月
;使用 Code Composer Studio v5.5构建

;------------------------------------------------------------------
cdecls C、list、"msp430.h" ;包含设备头文件
;-----------------
.def 复位 ;导出程序入口点到
;使链接器知道它。
;------------------------------------------------------------------
全局_main
.global __stack_end
.sect .stack ;使堆栈链接器段为“已知”?

.text ;汇编到闪存
保留 ;确保当前段已链接
.retainrefs

;----------------------------------------------------
;这里的主代码
;--------------------------------------------------------
_main
复位 MOV.w #_STACK_END、SP ;初始化 stackpointer
StopWDT MOV.w #WDTPW+WDTHOLD、&WDTCTL;停止 WDT

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


;-----------------
; SVSH 复位代码这里
;-----------------------------
cmp.b&IV、&SYSRSTIV;检查复位是否为 SVSH
jne SKIPSVSH
mov.b&RTCCNT1、&CNT1
mov.b&RTCCNT2、&CNT2
mov.b&RTCCNT3、&CNT3
mov.b&RTCCNT4、CNT4
add.w#1、RESETCNT
SKIPSVSH (&R):

MOV.b #0x10、&PJSEL0;PJ SEL0 lfxt
mov.b#0xA5、&RTCCTL0_H;解锁
mov.b#RT1SSEL、&RTCCTL1;设置计数器模式。
MOV.b#0x1C、&RTCPS0CTL
MOV.b#RT1SSEL+RT1PSDIV+RT1IP、&RTCPS1CTL
BIC.b#RTCHOLD、&RTCCTL1;清除 RTCHOLD 和位以启动计数器。
MOV.b#0xA5、&RTCCTL0_H;锁定


设置 P1 BIS.b #BIT0、&P1OUT ;清除 P1.0输出锁存器以获得定义的上电状态
BIS.b #BIT0、&P1DIR ;将 P1.0设置为输出方向

MainLoop:
NOP
JMP MainLoop
nop

;-------------------------------------------------------
;可变定义
;-----------------
.text
CNT1.byte 0xFF
CNT2.byte 0xFF
CNT3.byte 0xFF
CNT4.byte 0xFF
RESETCNT.word 0xFFFF
IV.word 0x000E
.end


;------------------------------------------------------------------
;堆栈指针定义
;-----------------
.global __stack_end
.sect .stack

;------------------------------------------------------------------
;中断矢量
;-----
.sect ".reset" ;MSP430复位向量
短路复位

以下是诊断变量的结果:

CNT1
3021
CNT3
0002
RESETCNT
0000
IV
000E 

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

    感谢您分享您的代码。 我将在下周早些时候进行测试并向您提供反馈。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 CTM:

    很抱歉我迟到了。 但是、在过去的几天里、我太忙了、无法花时间测试您的代码。 明天我将有机会检查您的问题、然后回复您。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 CTM:

    在查看您的代码后、我很困惑您读取和保存 RTCCNTx 的时间。 在 SVSHIFG SVSH 事件(BOR)之后、您读取并保存 RTC 计数值。 但是、RTC 计数寄存器不应包含 BOR 之后的值、这意味着计数值将在 BOR 复位后被复位或一些虚拟值。

    在 BOR 事件之后、我将与我们的开发团队再次确认 RCTCNTx 的价值。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在 SVSH 事件之后、在 BOR 之前、我读取 RCTCNTx。

    问题在于、如果超级电容器放电、则一切都可以保持运行、直到 SVSH 事件发生。 现在、RCNTT 被保存到 FRAM 中、以便在正常上电时恢复。 (我可以确认保存确实发生在 BOR 之前。)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我对您的汇编代码感到困惑。 您只需检查 SYSRSTIV 并在代码开始时进行保存、这可以在新的上电或 PUC / BOR 复位后运行。 但是、所有这些事件都可以让 RTCCNTx 不包含该值。

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

    请阅读文档。

    正常重置会绕过您标记的代码。 您可以在调试器中检查此内容。

    当超级电容器放电时、将发生三次复位。

    1、SVSH -(我们在这里尝试读取并保存计数器)
    2. BOR -最终断电
    3.开机-读取保存的信息。

    只有1个将执行标记的代码。

    C:

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

    尊敬的 CTM:

    我会让您的代码清楚地读取和保存 RTCCNTx 值。 这些代码在使用 SVSHIFG SVSH 事件(BOR)条件(0Eh)检查 SYSRSTIV 之后运行

    请注意、SVSH 事件将触发 BOR 复位、这意味着您上次回复中的1和2复位条件实际上是相同的。 您可以在 器 件用户指南的"1.2系统复位和初始化"部分和"2.2.2.1 SVS 阈值"部分找到详细说明。

    因此、读取和保存 RTCCNTx 值的代码将始终在由 SVSH 事件触发的 BOR 复位后运行。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我可以确认有两个复位:1. SVSH 复位、然后复位2。 BOR 复位。

    两次复位的原因如下:

    当它由电池或超级电容器供电时、SVSH 复位通常用于保存重要参数、例如到 FRAM 的时钟/计数器。 SVSH 复位触发一个 BOR。

    (是否可以上报此问题?)

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

    我们的讨论应该有一些误解。

    您可能需要参阅器件用户指南的"1.2系统复位和初始化"部分。 该器件具有3种系统复位类型、即欠压复位(BOR)、上电复位(POR)和上电清零(PUC)。 SVSH 低电平条件将触发 BOR。 在用户指南中找不到任何有关单个 SVSH 复位的说明。 如果您能找到任何信息、请与我分享。

    正如我们长时间讨论过的、我会为您的申请提供一些建议。
    您可以清除 SVSHE 位来禁用电源电压监控器、以触发 BOR 复位。 然后、您需要在 while 环路中监视 SVSHIFG 标志、并在该标志被置位时存储 RTC 值。
    2.当 DVCC 降至设置的阈值以下时,在 BOR 复位发生之前,您可以通过 ADC 监视 DVCC 并存储 RTC 值。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我现在知道问题的来源-以下是 FR5994手册:

    RTC_C 模块寄存器显示在表29-2中。 该表还显示了哪些寄存器受密钥保护、哪些寄存器在 LPM3.5期间被保留。 在 LPM3.5期间被保留并给出复位值的寄存器在 POR 时不会被复位。 在 LPM3.5期间未被保留的寄存器必须在退出 LPM3.5后被恢复。

    正如您所引述的、SVSH 会在 FR5994上引起 BOR。

    下面是 F5338手册:

    如果 DVCC 降至低于 SVSH 电平、则 SVSHIFG (SVSH 中断标志)被置位。 如果 DVCC 保持低于 SVSH 电平并且软件试图清零 SVSHIFG、则硬件会立即再次将其置位。 如果 SVSHPE (SVSH POR 使能)位被置位、当 SVSHIFG 被置位时、就会产生一个 POR。

    在 F5338 SVSH 上导致一个 POR -然后计数器不会被复位。

    实际上、我认为 F5338的工作方式要好得多、因为它允许在最终的 BOR 之前将计数器保存到 FRAM 中。  执行 SVSH BOR 复位会使对象失败。

    我是否可以建议将其作为功能升级包括在内?

    只是为了确认在从 LPM3.5唤醒时使用 SVSH。  手册规定:

    请注意、由于电源故障导致的"唤醒"不会被标记为 LPMx.5唤醒、而是被标记为 SVS 复位事件。

    BOR 是器件复位。 BOR 仅由以下事件生成:

    -

    -从 LPMx.5 (即 LPM3.5或 LPM4.5)模式唤醒事件

    - SVSH 低电平状态、当被使能时(详细信息请见 PMM 和 SVS 一章)

    如果发生 LPM3.5 SVSH 事件、寄存器也会丢失?  请参阅 表29-2。 从 LPM3.5中保留的 RTC_C 寄存器。