VMAIFG 是否会导致复位?
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.
VMAIFG 是否会导致复位?
不可以、但如果需要、可以手动触发软件复位(如果已设置此 IFG)。
[引用 userid="51142" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1019466/msp430fr2433-which-ifgs-will-cause-a-reset/3767585 #3767585"] JMBINIFG 或 JMBOUTIFG 是否会导致复位?[/quot]否、这些 IFG 的行为与 VMAIFG 相同。
[引用 userid="51142" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1019466/msp430fr2433-which-ifgs-will-cause-a-reset/3767586 #3767586"] CBDIFG 或 UBDIFG 是否会导致复位?CBDIFG 不会导致复位。 仅当启用 UBDRSTEN 时、UBDIFG 才会导致复位。
根据用户指南、空内存是不存在的内存空间。 我假设这意味着地址 超出了为特定器件定义的存储器映射。
空外设空间与 MSP430FR2433器件上从0FFFh 到0000h 的存储器范围有关。 空外设空间的一个示例场景是 中断调用的 ISR、但在矢量表中找不到 ISR (例如 FFFFh)。 Jens-Michael Gross 在以下主题中对其进行了很好的描述。
即使在进入 main 之前、复位中断矢量 SYSRSTIV 也会设置为001Eh (外设/配置区域获取- PERF)。
我希望这有助于澄清差异。
是的。 这包括在不存在 的存储器位置(例如0x3100地址)和现有存储器位置(即使在外设存储器范围(例如0x077C)中访问(例如读取)空(例如0x3FFF 内容)存储器。 请参阅下面随附的代码。
[引用 userid="51142" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1019466/msp430fr2433-which-ifgs-will-cause-a-reset/3767757 #3767757")是否是要设置 VMAIFG 的外设区域获取? 我不知道。可能、但由于 PUC 已生成、VMAIFG 在此时可能无关紧要。
[引用 userid="51142" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1019466/msp430fr2433-which-ifgs-will-cause-a-reset/3767757 #3767757">访问空内存和外设区域获取的内容是否相同? 我认为不是、但我真的不知道。否 这里的最大区别是访问与获取。 访问或读取与读取存储在特定地址 的值相关、而获取与执行存储在特定地址的任何内容相关。
用户指南在第45页对这一点进行了很好的总结:
读取空存储器会产生值3FFFh。 在提取的情况下、这被视为 JMP $。 从空中提取访问
外设空间会导致 PUC。
这更有意义吗?
#include <msp430.h>
volatile unsigned int value;
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
P1OUT &= ~BIT0; // Clear P1.0 output latch for a defined power-on state
P1DIR |= BIT0; // Set P1.0 to output direction
PM5CTL0 &= ~LOCKLPM5; // Disable the GPIO power-on default high-impedance mode
// to activate previously configured port settings
// Activate vacant memory interrupt
SFRIE1 = VMAIE;
while(1)
{
// Read from vacant nonexistent memory between 0xC3FF - 0x3000
// will cause VMAIFG SNMI interrupt
value = *((unsigned int*)0x3100);
__delay_cycles(100000); // Delay for 100000*(1/MCLK)=0.1s
// Read from vacant peripheral memory between 0x0FFF - 0x0000
// will not cause VMAIFG SNMI interrupt
value = *((unsigned int*)0x077C);
__delay_cycles(100000); // Delay for 100000*(1/MCLK)=0.1s
// Read from nonvacant peripheral memory between 0x0FFF - 0x0000
// will not cause VMAIFG SNMI interrupt
value = *((unsigned int*)0x04DA);
__delay_cycles(100000); // Delay for 100000*(1/MCLK)=0.1s
}
}
// SYSNMI interrupt service routine
#pragma vector=SYSNMI_VECTOR
__interrupt void SYSNMI_ISR(void)
{
if(VMAIFG)
{
P1OUT ^= BIT0; // Toggle P1.0 using exclusive-OR
SFRIFG1 &= ~VMAIFG; // Clear VMAIFG
}
}
e2e.ti.com/.../msp430fr243x_5F00_vmaifg_5F00_detection.c.zip