/*******************************************************************************
 * main.c
 *
 * 	Created on : April 23, 2012
 * 	      Board: DRV2605EVM-CT REVA
 *
 * Description: This program controls the DRV2605EVK-CT evaluation board.
 * 
 * I/O
 * 		   -------------
 * 		  |			P1.0|--> Red LED
 * 		  |			P1.1|--> Green LED
 * 		  |			P1.2|--> Yellow LED
 *	M0 <--|P3.3		P1.3|--> Blue LED
 * 	M1 <--|P3.4			|
 * 	M2 <--|P3.5		P2.0|<-- B1 Button
 * 	M3 <--|P3.6		P2.1|<-- B2 Button
 * 	M4 <--|P3.7  	P2.2|<-- B3 Button
 * 		  |			P2.3|<-- B4 Button
 * 		  |			P2.4|<-- Minus Button
 * SCL <->|P1.6		P2.5|<-- Plus button
 * SDA <->|P1.7		P2.6|--> Load Switch (ERM or LRA)
 * 		  |			P3.1|--> Enable
 * 		  |			P3.2|--> IN/TRIG
 *		   -------------
 *
 * *****************************************************************************/


#include "msp430g2553.h"
//#include "Timer.h"
//#include "I2C.h"
//#include "Haptics.h"
//#include "DRV2605.h"

#define LED0 BIT0
#define LED1 BIT6
#define BUTTON BIT3

unsigned int i;
static unsigned int buttonState = 1;

// Main Function
void main(void)
{ 
  WDTCTL = WDTPW + WDTHOLD;             // Stop watchdog timer
  
  // Initialize MSP430 Clocks
  //BCSCTL1 = CALBC1_8MHZ;                // Set DCO to 1, 8, 12 or 16MHz
  //DCOCTL = CALDCO_8MHZ;					// Set MODx to 3
  //BCSCTL1 |= DIVA_0;                    // ACLK/(0:1,1:2,2:4,3:8)
  //BCSCTL2 |= DIVS_0;					// SMCLK/(0=1,1=2,2=4,3=8)
  BCSCTL3 |= LFXT1S_2;                  // LFXT1 = VLO

  P1DIR |= (LED0 + LED1); 	// Set P1.0 to output direction
  P1OUT &= ~(LED0 + LED1);	// set P1.0 to 0 (LED OFF)

  P1DIR &= ~BUTTON;
  P1IFG &= ~BUTTON;			// P1.3 IFG cleared
  P1IE |= BUTTON; 			// P1.3 interrupt enable

  __enable_interrupt(); // enable all interrupts

  while(1)
  {




  }



} 	// End Main

// Port 1 interrupt service routine
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{
	P1IE &= ~BUTTON;	// disable interrupts for the button to handle bounce
	P1IFG &= ~BUTTON; 	// P1.3 IFG cleared

	/* set watchdog timer to trigger every 16*32.768k/12k = 44 ms */
	WDTCTL = WDT_ADLY_16;
	/* clear watchdog timer interrupt flag */
	IFG1 &= ~WDTIFG;
    /* enable watchdog timer interrupts; in 44 ms the button*/
	IE1 |= WDTIE;

	//P1OUT ^= (LED0 + LED1); // P1.0 = toggle
	if(buttonState < 5)
		buttonState++;
	else
		buttonState = 1;

	switch(buttonState)
	{
		case 1:		//Read Mode
		{
			P1OUT &= ~(LED0 +LED1);
			break;
		}
		case 2:		//Write 1
		{
			P1OUT |= LED1;
			P1OUT &= ~LED0;
			break;
		}
		case 3:		//Write 2
		{
			P1OUT |= LED0;
			P1OUT &= ~LED1;
			break;
		}
		case 4:		//Write 3
		{
			P1OUT |= (LED0 + LED1);
			break;
		}
		default:
		{
			break;
		}
	}

}

#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer(void)
{
    /* Disable interrupts on the watchdog timer */
    IE1 &= ~WDTIE;
    /* clear the interrupt flag for watchdog timer */
    IFG1 &= ~WDTIFG;
    /* resume holding the watchdog timer so it doesn't reset the chip */
    WDTCTL = WDTPW + WDTHOLD;

    /* and re-enable interrupts for the button */
    P1IE |= BUTTON;
}


/******************************************************************************/
// Timer0_A0 Interrupt Service Routine:       
/******************************************************************************/
//#pragma vector=TIMER0_A0_VECTOR
//__interrupt void ISR_Timer0_A0(void)
//{
//  TA0CTL &= ~(MC_1);
//  TA0CCTL0 &= ~(CCIE);
//
//  CapTouch_RandomNumber++;
//
//  __bic_SR_register_on_exit(LPM0_bits+GIE);
//}
//
//
//#pragma vector=TIMER1_A1_VECTOR
//__interrupt void Timer_A1_ISR (void)
//{
//  TA1CCTL1 &= ~CCIFG;   //Clear Interrupt Flag
//}
//
