Witam,
mam problem z uruchomieniem modułu do kontroli napięcia zasilającego układ MSP430F5438. Po przeczytaniu noty aplikacyjnej chciałem wykożystać w tym celu programowe przerwanie od modułu SVM. Kod który używam (kompilator IAR) :
int initalize_PPM(char svm_level)
{
if ( svm_level > 0x07 )
{
return ERROR_WRONG_PPM_LEVEL;
}
PMMCTL0_H = 0xA5;
SVSMHCTL = SVMHE + SVSMHRRL0 * svm_level + SVSHMD;
PMMIFG &= ~SVMHIFG;
PMMRIE = SVMHIE;
PMMCTL0_H = 0x00;
return STATUS_SUCCESSFUL;
}
///////////////////////////////////////////////////////////////////////////////
#pragma vector=SYSNMI_VECTOR
__interrupt void SYSNMI_ISR(void)
{
switch(__even_in_range(SYSSNIV,0x12))
{
case SYSSNIV_NONE: break;
case SYSSNIV_SVMHIFG:
P1OUT = 0x001; // led on
uart.put_string("\nLOW POWER\n");
PMMIFG &= ~SVMHIFG;
break;
default: break;
}
}
///////////////////////////////////////////////////////////////////////////////
Z tego zrozumiałem czytając notę kiedy używam SVM (nie SVS) układ po wykryciu spadku napięcia poniżej zadanego poziomu wchodzi do przerwania. Jeżeli po wyjściu z przerwania napięcie jest ciągle niskie powinien do niego natychmiastowo wejść jeszcze raz. W związku z tym gdy obniżę napięcie i będę je 'trzymać' nisko, dioda powinna się świecić cały czas, a terminal powinien zostać zalany napisem "LOW POWER".
Tym czasem obniżenie napięcia powoduje mrugnięcie diody i ciągły restart programu (nawet dla poziomu wyzwalania 3 V) - na terminalu pojawia mi się w kółko napis "hello world", który uruchamiam przy starcie programu (przed główną pętlą while) i ani śladu po "LOW POWER'.
Jeśli ktoś już kiedyś używał tego modułu i wie jak mi pomóc to proszę o odpowiedź lub inny kontakt.
mam problem z uruchomieniem modułu do kontroli napięcia zasilającego układ MSP430F5438. Po przeczytaniu noty aplikacyjnej chciałem wykożystać w tym celu programowe przerwanie od modułu SVM. Kod który używam (kompilator IAR) :
int initalize_PPM(char svm_level)
{
if ( svm_level > 0x07 )
{
return ERROR_WRONG_PPM_LEVEL;
}
PMMCTL0_H = 0xA5;
SVSMHCTL = SVMHE + SVSMHRRL0 * svm_level + SVSHMD;
PMMIFG &= ~SVMHIFG;
PMMRIE = SVMHIE;
PMMCTL0_H = 0x00;
return STATUS_SUCCESSFUL;
}
///////////////////////////////////////////////////////////////////////////////
#pragma vector=SYSNMI_VECTOR
__interrupt void SYSNMI_ISR(void)
{
switch(__even_in_range(SYSSNIV,0x12))
{
case SYSSNIV_NONE: break;
case SYSSNIV_SVMHIFG:
P1OUT = 0x001; // led on
uart.put_string("\nLOW POWER\n");
PMMIFG &= ~SVMHIFG;
break;
default: break;
}
}
///////////////////////////////////////////////////////////////////////////////
Z tego zrozumiałem czytając notę kiedy używam SVM (nie SVS) układ po wykryciu spadku napięcia poniżej zadanego poziomu wchodzi do przerwania. Jeżeli po wyjściu z przerwania napięcie jest ciągle niskie powinien do niego natychmiastowo wejść jeszcze raz. W związku z tym gdy obniżę napięcie i będę je 'trzymać' nisko, dioda powinna się świecić cały czas, a terminal powinien zostać zalany napisem "LOW POWER".
Tym czasem obniżenie napięcia powoduje mrugnięcie diody i ciągły restart programu (nawet dla poziomu wyzwalania 3 V) - na terminalu pojawia mi się w kółko napis "hello world", który uruchamiam przy starcie programu (przed główną pętlą while) i ani śladu po "LOW POWER'.
Jeśli ktoś już kiedyś używał tego modułu i wie jak mi pomóc to proszę o odpowiedź lub inny kontakt.
