#include <msp430.h>
int Rx_Data;
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; //stop watch-dog timer
//--Setup A0 SPI
UCB0CTLW0 |= UCSWRST; //Put B0 into software reset
UCB0CTLW0 |= UCSSEL__SMCLK; //choose SMCLK ~= 16MHz
UCB0BRW = 160; //pre-scale=10 to set SCLK=100kHz
UCB0CTLW0 |= UCSYNC; //put into SPI mode
UCB0CTLW0 |= UCMST; //set as a master
//-- Configure Ports
P1DIR |= BIT5; //Sets P1.5 to output to power MFRC522
P1OUT |= BIT5;
P1DIR |= BIT0; //set P1.0 (red LED) to output
P1OUT &= ~BIT0; //LED1=OFF initially
P4DIR |= BIT0; //set P4.0 (green LED) to output
P4OUT &= ~BIT0; //LED2=OFF initially
P1DIR &= ~BIT2; //set P1.2 (SW1) to input
P1REN |= BIT2; //turn on resistor
P1OUT |= BIT2; //makes resistor pull-up-resistor
P1IES |= BIT2; //make sensitive to high-to-low
P2DIR &= ~BIT6; //set P2.6 (SW2) to input
P2REN |= BIT6; //turn on resistor
P2OUT |= BIT6; //makes resistor pull-up-resistor
P2IES |= BIT6; //make sensitive to high-to-low
//P5SEL1 &= ~ BIT1; //P5.1=SCLK (P1SEL1:P1SEL0 = 01)
P5SEL0 |= BIT1;
//P5SEL1 &= ~ BIT2; //P5.2=SIMO (P5SEL1:P5SEL0 = 01)
P5SEL0 |= BIT2;
//P5SEL1 &= ~ BIT3; //P5.3=SOMI (P5SEL1:P5SEL0 = 01)
P5SEL0 |= BIT3;
PM5CTL0 &= ~LOCKLPM5; //turn on i/o
UCB0CTLW0 &= ~UCSWRST; //take B0 out of software reset
//--Setup Interrupts
P1IE |= BIT2; //enable P1.2 IRQ (SW1)
P1IFG &= ~BIT2; //clear flag
P2IE |= BIT6; //enable P2.6 IRQ (SW1)
P2IFG &= ~BIT6; //clear flag
UCB0IE |= UCRXIE; //enable SPI Rx interrupt
UCB0IFG &= ~UCRXIFG; //clear flag
__enable_interrupt(); //enable maskable interrupts
while(1){} //do nothing
return 0;
}
//-------------------------------------------
//--Interrupts
#pragma vector = PORT1_VECTOR //ISR for SW1
__interrupt void ISR_Port1_S1(void)
{
UCB0TXBUF = 0x10; //Tx 0x10 out over SPI
P1IFG &= ~BIT2; //clear flag
}
#pragma vector = PORT2_VECTOR //ISR for SW2
__interrupt void ISR_Port1_S2(void)
{
UCB0TXBUF = 0x66; //Tx 0x66 out over SPI
P2IFG &= ~BIT6; //clear flag
}
#pragma vector = USCI_B0_VECTOR //DATA is in B0 SPI buffer
__interrupt void ISR_EUSCI_B0(void)
{
Rx_Data = UCB0RXBUF; //read Rx buffer
if(Rx_Data == 0x10){
P1OUT^= BIT0; //Toggle LED 1
}
else if(Rx_Data == 0x66){
P4OUT ^= BIT0; //Toggle LED 2
}
}
