#include <stdint.h>
#include "..\inc\msp432p401r.h"

#define OUTER_SPIN 1000
#define INNER_SPIN 1000

volatile uint8_t greenOn = 0x00;     //setting variables
volatile uint8_t redOn = 0x00;

void delay(void) {
	
	uint32_t i,j,k;
	for(i=OUTER_SPIN; i>0; i--)
	    for (j=INNER_SPIN;j>0; j--)                  // Delay
			            k = 5;
}

void PORT5_IRQHandler(void){
	delay();
	if ((P5IFG & 0x02) != 0) {
		P5IFG &= ~0x02;		// clear flag1, acknowledge
		if(greenOn == 0xFF){ 		//turn off green
			P2OUT &= ~BIT4;
			greenOn = 0x00;
		}
		P2OUT ^= BIT6; 		//toggle red
		redOn ^= redOn;
	}
}

void PORT3_IRQHandler(void){
	delay();
	if ((P3IFG & 0x20) != 0) {
		P3IFG &= ~0x20;		// clear flag1, acknowledge
		if(redOn == 0xFF){		//turn off red
			P2OUT &= ~BIT6;
			redOn = 0x00;
		}
		P2OUT ^= BIT4;			//toggle green
		greenOn ^= greenOn;
	}
}

		
void buttonInnit(void){
	__ASM("CPSID I");
	P5SEL1 &= ~BIT1;
	P5SEL0 &= ~BIT1;
	P3SEL1 &= ~BIT5;
	P3SEL0 &= ~BIT5;
	P5DIR &= ~0x02;                  // make p5.1 and p3.5 GPIO in with pull up resistor enabled
  P5REN |= 0x02;                   // 
  P5OUT |= 0x02;                   // 
  P5IES |= 0x02;                   // enable interrupts on p5.1 p3.5
  P5IFG &= ~0x02;                  // 
  P5IE |= 0x02;                    // 
	P3DIR &= ~0x20;                  // 
  P3REN |= 0x20;                   // 
  P3OUT |= 0x20;                   // 
  P3IES |= 0x20;                   // 
  P3IFG &= ~0x20;                  // 
  P3IE |= 0x20;                    // 
	
	NVIC_IPR9 = (NVIC_IPR9&0x00FFFFFF)|0x60000000; // priority 3
  NVIC_ISER1 = 0x00000080;         // enable interrupt 39 in NVIC
	
	NVIC_IPR9 = (NVIC_IPR9&0xFFFF00FF)|0x00006000; // priority 3
  NVIC_ISER1 = 0x00000020;         // enable interrupt 37 in NVIC
	__ASM("CPSIE I");	
}


int main(void) {
	
		WDTCTL = WDTPW | WDTHOLD;
			
	   P2SEL1 &= ~(BIT4 | BIT6);
	   P2SEL0 &= ~(BIT4 | BIT6);
		 P2DIR |= BIT4 | BIT6;
	
		 P5SEL1 &= ~BIT6;
	   P5SEL0 &= ~BIT6;
		 P5DIR |= BIT6;
	
	   P2OUT &= ~(BIT4 | BIT6);
	   P5OUT &= ~BIT6;
	
		 buttonInnit();
	  while(1)
    {
    }

}