HELLO,
I HAVE A QUERY REGARDING NESTED INTERRUPTS IN MSP430G2553. I HAVE WRITTEN A SIMPLE CODE, AND IT IS NOT WORKING THAT ACCURATELY. SOMETIMES IT PRODUCES WRONG OUTPUT. THE CODE IS AS FOLLOWS:
/*test: HERE WE NEST UP THE INTERRUPTS. THAT IS ONE INTERRUPT WITHIN OTHER.*/
/*LET P1.1 TO P1.4 BE INPUTS, AND P1.0,P1.5 TO P1.7 BE OUTPUTS.*/
#include<msp430g2553.h>
void main(void)
{
WDTCTL= WDTPW+WDTHOLD;
P1DIR&=~(BIT1+BIT2+BIT3+BIT4);
P1SEL&=~(BIT1+BIT2+BIT3+BIT4);
P1IN|=(BIT1+BIT2+BIT3+BIT4);
P1REN|=(BIT1+BIT2+BIT3+BIT4);
P1DIR|=(BIT0+BIT5+BIT6+BIT7);
P1OUT&=~(BIT0+BIT5+BIT6+BIT7);
P1IE|=(BIT1+BIT2+BIT3+BIT4);
P1IFG&=~(BIT1+BIT2+BIT3+BIT4);
_BIS_SR(GIE);
}
#pragma vector=PORT1_VECTOR
__interrupt void port1(void)
{
if((P1IN & BIT1)==0)
{
_BIS_SR(GIE);
P1IFG&=~BIT1;
for(;;){
P1OUT^=BIT0;
__delay_cycles(100000);
}
}
if((P1IN & BIT2)==0)
{
_BIS_SR(GIE);
int i=0;
P1IFG&=~BIT2;
for(i=0;i<=100;i++){
P1OUT^=BIT5;
__delay_cycles(100000);
}
}
if((P1IN & BIT3)==0)
{
_BIS_SR(GIE);
int j=0;
P1IFG&=~BIT3;
for(j=0;j<=50;j++){
P1OUT^=BIT6;
__delay_cycles(100000);
}
}
if((P1IN & BIT4)==0)
{
_BIS_SR(GIE);
int k=0;
P1IFG&=~BIT4;
for(k=0;k<=50;k++){
P1OUT^=BIT7;
__delay_cycles(100000);
}
}
}
PLEASE DISCUSS WHETHER THE CODE IS CORRECT, STACK INFORMATION, STACK SIZE, REASON FOR GARBAGE OUTPUT AT SOMETIME, PRIORITY ASPECTS, PRIORITY OF PINS WITHIN A PORT, HOW TO SET PRIORITY WITHIN SAME PORT FOR DIFFERENT PINS.