您好,
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.
您好,
以下是我们正在工作但未获得预期结果的代码。请检查并告知我是否缺少任何内容。要监控 DVCC、不需要向右添加外部电路?
WDT_hold(WDT_BASE); // Setup the LED GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN4); GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN4); // Setup the voltage monitor to compare VMONIN to 1160mV PMM_setupVoltageMonitor(PMM_DVCC_2850MV); // When started up, VMON requires a settling time of 0.5us // MCLK = ~16MHz; 1 cycle = ~0.0625us __delay_cycles(10); // Setup VMONIN Pin GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P2,GPIO_PIN3,GPIO_TERNARY_MODULE_FUNCTION); // Enable the voltage monitor interrupt PMM_enableInterrupt(PMM_VMON_INTERRUPT); while(1) { // If we are not in ISR then VMONIN > 1160mV GPIO_setOutputHighOnPin(GPIO_PORT_P1, GPIO_PIN4); } __attribute__((interrupt(VMON_VECTOR))) void VMON_ISR(void) { // VMONIN < 1160mV, LED Off GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN4); }
结果是什么意思? DVCC 降至定义的水平以下时是否调用 VMON ISR?
[引用 userid="472268" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1021622/msp430i2041-how-to-monitor-dvcc-for-power-failure/3780583 #3780583"]因为我们希望在发生电源故障时将数据保存到闪存中。这是一个不同的主题、可以在 VMON ISR 正常工作后在后面进行介绍。 现在让我们重点讨论一下这个问题。
因此 VMON 功能正常工作。 这很好、应该解决这个线程的主要问题。
[引用 userid="472268" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1021622/msp430i2041-how-to-monitor-dvcc-for-power-failure/3781923 #3781923"]当我们尝试使用硬编码值时,每当调用 VMON ISR 时,它们都会保存在内存中。
但是、当我们尝试保存实时数据时、它无法正常工作。
[/报价]与原始问题相比、这有点偏离主题。 我不明白为什么虚拟数据会被写入、而实时数据不会被写入。 它们应具有相同的类型并且工作方式相同。 您的意思是"它不起作用"? 这是否意味着实时数据不会被写入闪存、而虚拟(硬编码)值被写入闪存?
其他意见:
下面是一些用于在 VMON ISR 中将 RAM 中的值写入闪存的伪代码:
/* Check for Flash Access */ while (FCTL3 & BUSY); /* Write Energy Values in RAM to Backup Memory Segment in Flash */ FCTL3 = FWKEY; // Clear LOCK bit FCTL1 = FWKEY | WRT; // Set WRT bit for write *ACTIVE_POWER_BACKUP_ptr = active_power_working; // 32-bit value *REACTIVE_POWER_BACKUP_ptr = reactive_power_working; // 32-bit value *APPARENT_POWER_BACKUP_ptr = apparent_power_working; // 32-bit value *ENERGY_RESIDUAL_BACKUP_ptr = energy_residual_working; // 32-bit value /* Trap for Power Loss */ while(1) { __no_operation(); }
您好!
实际上,我们观察到 ISR 在上电条件下被调用,预计在断电条件下被调用。
~、我们已将此延迟周期增加到1000000、即 Δ t。5sec、现在当存在断电情况但 ISR 未被调用时。
即//启动时,VMON 需要0.5us 的稳定时间
// MCLK =~16MHz;1个周期=~0.0625us
_DELAY_CYCLES (1000000);
因此、请指导我们这可能是什么问题。
请记住、在加电期间通过 BORH 和 SVSL 释放欠压复位(BOR)后、器件将开始执行代码(请参阅用户指南中的图3-2)。 当 VCC 至少为2.2V 时、该器件可安全执行代码。 因此、如果在电源电压达到大于为 VMON 定义的限值(例如3.0V)之前启用 VMON (例如2.8V)、则将触发 VMON ISR。 如果您使用的是定制板、并且遵循 CVCC 与 CVCORE 的建议电容器比率10、则可以测量电源电压达到高于 VCC 的 VMON 电平的阈值所需的时间、并等待该时间、然后在代码中启用 VMON。
此外、请确保在 MSP430i2041的 CCS 项目中包含'low_level_init.c'文件。 如果您从 Resource Explorer 导入代码示例、它也应自动导入该文件。
器件型号:MSP430I2041
您好!
我们使用了示例代码 PMM_ex2_vmon1160mV。
针对2.850V 电平的 DVCC 进行了编辑、如下所示:
原始代码---
PMM_setupVoltageMonitor (PMM_VMONIN_1160MV);
_DELAY_CYCLES (10);
GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P2、GPIO_PIN3、GPIO_ternary_MODULE_Function);
PMM_enableInterrupt (PMM_VMON_INTERRUPT);
编辑了一个---
PMM_setupVoltageMonitor (PMM_DVCC_2850MV);
_DELAY_CYCLES (10);
//GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P2、GPIO_PIN3、GPIO_ternary_MODULE_Function);//不使用为不使用外部电压
PMM_enableInterrupt (PMM_VMON_INTERRUPT);
P2.3引脚为 NC。
将数据保存到闪存的中断例程中。
但该代码不起作用。 不在 ISR 中将数据保存到闪存。(闪存保存功能单独测试、其工作)不进入 ISR。
我在代码中错过了什么吗?
Anuradha。
尊敬的 James:
我们都在同一个项目上工作,而且从很久以前就面临这个问题。
我已经检查了您的所有建议。
请检查上述代码中的 DVCC 是否启用 VMONIN、并在需要时建议纠正措施。
或者、请建议 DVCC 模式的示例代码。
我们的基本查询是、如果我们使用 DVCC、则无需为参考 VTG 连接外部电路。 对吧? (Ashwini 之前问过、但没有回答)
请帮助我们成功运行此功能。
谢谢、
Anuradha。
Anuradha、您好!
[引用 userid="419231" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1021622/msp430i2041-how-to-monitor-dvcc-for-power-failure/3789651 #3789651"]我们都在同一个项目上工作,并且从很久以前就面临这个问题。在此主题前面、Ashwini 确认、当 DVCC 降至所选阈值以下时、VMON ISR 正被正确触发。 此问题应该已经得到解决。 您是否曾一起讨论过这个问题?
[引用 userid="419231" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1021622/msp430i2041-how-to-monitor-dvcc-for-power-failure/3789651 #3789651"]请检查上述代码中的 DVCC 是否启用 VMONIN、并在需要时建议纠正措施。
或者、请建议 DVCC 模式的示例代码。
[/报价]您已经在使用唯一的 DriverLib VMON 代码示例"pMM_ex2_vmon1160mV.c"。 要使用 DVCC 模式、请更改 VMONCTL 寄存器中的 VMONLVLx 位并删除 P2.3作为 VMONIN 引脚的配置。 这些变化相当简单、示例并不复杂。 使用代码示例和可调电源、您应该能够轻松地对其进行测试。 LED 提供有关 VMON 状态的简单视觉反馈。
您可以利用其他非 DriverLib 寄存器级 VMON 代码示例、例如'msp430i20xx_PMM_03.c'。
[引用 userid="419231" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1021622/msp430i2041-how-to-monitor-dvcc-for-power-failure/3789651 #3789651"]我们的基本查询是、如果我们使用 DVCC、则无需为参考 VTG 连接外部电路。 对吧? (Ashwini 之前问过、但没有回答)
请帮助我们成功运行此功能。
[/报价]Ashwini 提到了用户指南的详细介绍、并且很清楚这一功能。 它描述了 VMON 如何监控"片上 DVCC 到一个指定的限值"。 "片上"意味着无需外部电路。
--不是, 当 DVCC 降至所选阈值以下时,VMON ISR 没有被正确触发。 实际上、在上电期间、VMON ISR 正在触发、她假设它是在断电期间触发的。 (用于在断电期间在闪存中保存值)
加电时,我们有了更大的延迟,现在加电时不会触发,而是在断电时也不会触发。 (我们将在 ISR 中写入闪存数据、下次从闪存读取相同数据时再加电、但没有预期结果)
-是的,代码很简单,但在断电情况下似乎不起作用。 我们选择了 DVCC 模式、并将 VCC 电源 VTG 从3.3变为2.5V、从而保持 VMON 触发 VTG 2.85V。 它的工作原理是、通过改变电位器可以轻松地演示。 但我们的实际应用是在断电期间保存数据。 在突然断电情况下(在微秒内发生)、不是通过逐渐改变电源 VTG。 在这里、我们没有获得预期的结果。
请建议可能的解决方案。
谢谢
Anuradha。
听起来 VMON 功能正常、但在断电期间、您没有足够的时间在掉电时写入闪存。 我建议通过打开 LED 或在 VMON ISR 开始时将 GPIO 驱动为高电平来确认 VMON 功能。 然后,您可以禁用中断并进入无限 while ()循环,直到断电。
在下一个调试步骤中、我将通过切换 GPIO 并使用逻辑分析仪捕获时间来测量您的代码写入闪存所需的时间。 然后、测量 GPIO 在 VMON ISR 中保持高电平的时间。 如果您需要更多时间、请考虑增大 DVCC 上的电容以降低功率损耗率。
尝试这些建议、并尝试缩小具体可行和无效的范围。