Other Parts Discussed in Thread: MSP430FR4133,
Tool/software: Code Composer Studio
Hi everyone,
I try to connect msp430fr4133 with hdc1080 by I2C.
My Code is shown below.
when I compile this code, gmake error occur.
please let me know how to fix this error.
Regards,
Takuya
/* --COPYRIGHT--,BSD
* Copyright (c) 2014, Texas Instruments Incorporated
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of Texas Instruments Incorporated nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* --/COPYRIGHT--*/
/*******************************************************************************
*
* main.c
*
* Out of Box Demo for the MSP-EXP430FR4133
* Main loop, initialization, and interrupt service routines
*
* September 2014
* E. Chen
*
******************************************************************************/
#include "main.h"
#include "hal_LCD.h"
#define SLAVE_ADDRESS 0x40
#define RXCOUNT 0x04
//unsigned char TXData = 0x38;
volatile float res;//////////////////////////10.26 damien
volatile float abT;//////////////////////////10.26 damien
unsigned char FeedbackValue[8];
uint8_t i=0, j=0;
/* Variables */
static uint8_t RXData[RXCOUNT];
static volatile uint8_t xferIndex;
static volatile uint32_t humidity;
static volatile double temperature;
static volatile double DEWpoint; //////////////////////10.26 damien
static volatile bool stopSent;
volatile unsigned char holdCount = 0;
volatile unsigned char * mode = &BAKMEM4_L; // mode flag
// TimerA0 UpMode Configuration Parameter
Timer_A_initUpModeParam initUpParam_A0 =
{
TIMER_A_CLOCKSOURCE_ACLK, // SMCLK Clock Source
TIMER_A_CLOCKSOURCE_DIVIDER_1, // ACLK/1 = 32kHz
3277, // 100ms debounce period
TIMER_A_TAIE_INTERRUPT_DISABLE, // Disable Timer interrupt
TIMER_A_CCIE_CCR0_INTERRUPT_ENABLE , // Enable CCR0 interrupt
TIMER_A_DO_CLEAR, // Clear value
true // Start Timer
};
/*
* main.c
*/
int main(void) {
//_q test1, test2;
//test1 = _Q(1.2);
//test2 = _Qlog(test1);
// Stop Watchdog timer
WDT_A_hold(__MSP430_BASEADDRESS_WDT_A__); // Stop WDT
_q10 qA, qC;////////////////////////////10.26 damien
// Check if a wakeup from LPMx.5
if (SYSRSTIV == SYSRSTIV_LPM5WU)
{
Init_GPIO();
__enable_interrupt();
}
else
{
// Initializations
Init_GPIO();
Init_I2C();
Init_Clock();
Init_RTC();
Init_LCD();
GPIO_clearInterrupt(GPIO_PORT_P1, GPIO_PIN2);
*mode = 0;
__enable_interrupt();
displayScrollText("HDC1080 DEMO");
FeedbackValue[0] = 0xFA;
FeedbackValue[7] = 0xFB;
}
while(1)
{
LCD_E_selectDisplayMemory(LCD_E_BASE, LCD_E_DISPLAYSOURCE_MEMORY);
/* Making sure the last transaction has been completely sent out */
while (EUSCI_B_I2C_masterIsStopSent(EUSCI_B0_BASE) == EUSCI_B_I2C_SENDING_STOP);
/* Send start and the first byte of the transmit buffer. We have to send
* two bytes to clean out whatever is in the buffer from a previous
* send */
EUSCI_B_I2C_masterSendMultiByteStart(EUSCI_B0_BASE, 0x00);
/* Enabling transfer interrupt after stop has been sent */
EUSCI_B_I2C_enableInterrupt(EUSCI_B0_BASE, EUSCI_B_I2C_TRANSMIT_INTERRUPT0);
while(!stopSent) __bis_SR_register(CPUOFF + GIE);
stopSent = false;
temperature = ((RXData[0]<<8)+RXData[1]); //////10.27 damien top
temperature = (temperature*165/65536-40)*10;
humidity = ((RXData[2]<<8)+RXData[3])&0x0000FFFF;
humidity = humidity*1000/65536;
qA = _Q10((float)humidity/1000);
qC = _Q10log(qA);
res = _Q10toF(qC);
abT = 17.271*(float)temperature/10/(237.7+(float)temperature/10);
DEWpoint = 237.7*(res+abT)/(17.271-res-abT);
FeedbackValue[1] = ((int)temperature & 0xFF00)>>8;
FeedbackValue[2] = (int)temperature & 0xFF;
FeedbackValue[3] = (humidity & 0xFF00)>>8;
FeedbackValue[4] = humidity & 0xFF;
FeedbackValue[5] = ((int)(DEWpoint*10.0) & 0xFF00)>>8;
FeedbackValue[6] = (int)(DEWpoint*10.0) & 0xFF; //////10.27 damien end
clearLCD();
switch(*mode)
{
case TEMPERATURE_MODE: // Temperature mode
//temperature = ((RXData[0]<<8)+RXData[1]);
//temperature = (temperature*165/65536-40)*10;
showChar('T',pos2);
LCDMEM[7] |= 0x04;
LCDBMEM[7] |= 0x04;
// Handles displaying up to 99.9 degrees
if (temperature>=1)
{
if (temperature>=100) showChar(((uint32_t) temperature/100)%10 + '0',pos3);
if (temperature>=10) showChar(((uint32_t) temperature/10)%10 + '0',pos4);
if (temperature>=1) showChar(((uint32_t) temperature/1)%10 + '0',pos5);
}
else
{
LCDMEM[pos1] |= 0x01;
if (temperature<=-100) showChar(((uint32_t) (400-(400+temperature))/100)%10 + '0',pos3);
if (temperature<=-10) showChar(((uint32_t) (400-(400+temperature))/10)%10 + '0',pos4);
if (temperature<1) showChar(((uint32_t) (400-(400+temperature))/1)%10 + '0',pos5);
}
LCDMEM[pos4+1] |= 0x01; // Decimal point
LCDMEM[pos5+1] |= 0x04; // Degree symbol
showChar('C',pos6);
break;
case HUMIDITY_MODE: // Humidity mode
//humidity = ((RXData[2]<<8)+RXData[3])&0x0000FFFF;
//humidity = humidity*1000/65536;
showChar('H',pos2);
LCDMEM[7] |= 0x04;
LCDBMEM[7] |= 0x04;
// Handles humidity up to 99.9 percent
if (humidity>=999) {showChar('9',pos3); showChar('9',pos4); showChar('9',pos5);}
if (humidity>=100) showChar((humidity/100)%10 + '0',pos3);
if (humidity>=10) showChar((humidity/10)%10 + '0',pos4);
if (humidity>=1) showChar((humidity/1)%10 + '0',pos5);
if (humidity==0) {showChar('0', pos4); showChar('0',pos5);}
LCDMEM[pos4+1] |= 0x01; // Decimal point
break;
case Dew_MODE: // Dew_MODE
/*temperature = ((RXData[0]<<8)+RXData[1]);
temperature = (temperature*165/65536-40)*10;
humidity = ((RXData[2]<<8)+RXData[3])&0x0000FFFF;
humidity = humidity*1000/65536;
//qA = _Q(2.71828); qC = _Qlog(qA); res=_QtoF(qC); // 1.0 = ln(e) //////10.26 damien
qA = _Q12((float)humidity/1000);
qC = _Q12log(qA);
res = _Q12toF(qC);
abT = 17.271*(float)temperature/10/(237.7+(float)temperature/10);
DEWpoint = 237.7*(res+abT)/(17.271-res-abT);*/
showChar('D',pos2);
LCDMEM[7] |= 0x04;
LCDBMEM[7] |= 0x04;
// Handles displaying up to 99.9 degrees
if (DEWpoint*10.0>=1)
{
if ((DEWpoint*10.0)>=100) showChar(((uint32_t) (DEWpoint*10.0)/100)%10 + '0',pos3);
if ((DEWpoint*10.0)>=10) showChar(((uint32_t) (DEWpoint*10.0)/10)%10 + '0',pos4);
if ((DEWpoint*10.0)>=1) showChar(((uint32_t) (DEWpoint*10.0)/1)%10 + '0',pos5);
}
else
{
LCDMEM[pos1] |= 0x01;
if ((DEWpoint*10.0)<=-100) showChar(((uint32_t) (400.0-(400.0+(DEWpoint*10.0)))/100)%10 + '0',pos3);
if ((DEWpoint*10.0)<=-10) showChar(((uint32_t) (400.0-(400.0+(DEWpoint*10.0)))/10)%10 + '0',pos4);
if ((DEWpoint*10.0)<1) showChar(((uint32_t) (400.0-(400.0+(DEWpoint*10.0)))/1)%10 + '0',pos5);
}
LCDMEM[pos4+1] |= 0x01; // Decimal point
LCDMEM[pos5+1] |= 0x04; // Degree symbol
showChar('C',pos6);
break;
}
/////////////////////////////////////
//while(!(UCA0IFG & UCTXIFG));
// UCA0TXBUF = TXData; // Load data onto buffer
//////////////////////////////////////////
__bis_SR_register(LPM0_bits | GIE); // enter LPM3
}
}
/*
* GPIO Initialization
*/
void Init_GPIO()
{
// Set all GPIO pins to output low to prevent floating input and reduce power consumption
GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
GPIO_setOutputLowOnPin(GPIO_PORT_P3, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
GPIO_setOutputLowOnPin(GPIO_PORT_P4, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
GPIO_setOutputLowOnPin(GPIO_PORT_P5, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
GPIO_setOutputLowOnPin(GPIO_PORT_P6, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
GPIO_setOutputLowOnPin(GPIO_PORT_P7, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
GPIO_setOutputLowOnPin(GPIO_PORT_P8, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
GPIO_setAsOutputPin(GPIO_PORT_P3, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
GPIO_setAsOutputPin(GPIO_PORT_P4, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
GPIO_setAsOutputPin(GPIO_PORT_P5, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
GPIO_setAsOutputPin(GPIO_PORT_P6, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
GPIO_setAsOutputPin(GPIO_PORT_P7, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
GPIO_setAsOutputPin(GPIO_PORT_P8, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
//GPIO_setAsInputPin(GPIO_PORT_P1, GPIO_PIN1);
// Configure button S1 (P1.2) interrupt
GPIO_selectInterruptEdge(GPIO_PORT_P1, GPIO_PIN2, GPIO_HIGH_TO_LOW_TRANSITION);
GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1, GPIO_PIN2);
GPIO_clearInterrupt(GPIO_PORT_P1, GPIO_PIN2);
GPIO_enableInterrupt(GPIO_PORT_P1, GPIO_PIN2);
// Set P4.1 and P4.2 as Secondary Module Function Input, LFXT.
GPIO_setAsPeripheralModuleFunctionInputPin(
GPIO_PORT_P4,
GPIO_PIN1 + GPIO_PIN2,
GPIO_PRIMARY_MODULE_FUNCTION
);
// Configure Pins for I2C
/*
* Select Port 5
* Set Pin 2, 3 to input with function, (UCB0SIMO/UCB0SDA, UCB0SOMI/UCB0SCL).
*/
GPIO_setAsPeripheralModuleFunctionInputPin(
GPIO_PORT_P5,
GPIO_PIN2 + GPIO_PIN3,
GPIO_PRIMARY_MODULE_FUNCTION
);
///////////////////////////////////////////
// Configure UART pins
P1SEL0 |= BIT0 | BIT1; // set 2-UART pin as second function
// Configure UART
UCA0CTLW0 |= UCSWRST; // Put eUSCI in reset
UCA0CTLW0 |= UCSSEL__SMCLK;
// Baud Rate calculation
UCA0BR0 = 78; // 1000000/9600 = 104.16666
UCA0BR1 = 0;
UCA0CTLW0 &= ~UCSWRST; // Initialize eUSCI
UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt
///////////////////////////////////////////////
// Disable the GPIO power-on default high-impedance mode
// to activate previously configured port settings
PMM_unlockLPM5();
}
/*
* I2C Initialization
*/
void Init_I2C()
{
EUSCI_B_I2C_initMasterParam param = {0};
param.selectClockSource = EUSCI_B_I2C_CLOCKSOURCE_SMCLK;
param.i2cClk = CS_getSMCLK();
param.dataRate = EUSCI_B_I2C_SET_DATA_RATE_100KBPS;
param.byteCounterThreshold = 0;
param.autoSTOPGeneration =
EUSCI_B_I2C_NO_AUTO_STOP;
EUSCI_B_I2C_initMaster(EUSCI_B0_BASE, ¶m);
UCB0BRW = 0x08;
//Specify slave address
EUSCI_B_I2C_setSlaveAddress(EUSCI_B0_BASE,
SLAVE_ADDRESS
);
//Set Master in transmit mode
EUSCI_B_I2C_setMode(EUSCI_B0_BASE,
EUSCI_B_I2C_TRANSMIT_MODE
);
//Enable I2C Module to start operations
EUSCI_B_I2C_enable(EUSCI_B0_BASE);
EUSCI_B_I2C_clearInterrupt(EUSCI_B0_BASE,
EUSCI_B_I2C_TRANSMIT_INTERRUPT0 +
EUSCI_B_I2C_RECEIVE_INTERRUPT0 +
EUSCI_B_I2C_BYTE_COUNTER_INTERRUPT +
EUSCI_B_I2C_NAK_INTERRUPT
);
//Enable master Transmit interrupt
EUSCI_B_I2C_enableInterrupt(EUSCI_B0_BASE,
EUSCI_B_I2C_TRANSMIT_INTERRUPT0
);
}
/*
* Clock System Initialization
*/
void Init_Clock()
{
// Intializes the XT1 crystal oscillator
CS_turnOnXT1(CS_XT1_DRIVE_1);
}
/*
* Real Time Clock counter Initialization
*/
void Init_RTC()
{
// Set RTC modulo to 32768-1 to trigger interrupt every ~250 ms
RTC_setModulo(RTC_BASE, 3277);
RTC_enableInterrupt(RTC_BASE, RTC_OVERFLOW_INTERRUPT);
RTC_start(RTC_BASE, RTC_CLOCKSOURCE_XT1CLK);
}
/*
* PORT1 Interrupt Service Routine
* Handles S1 button press interrupt
*/
#pragma vector = PORT1_VECTOR
__interrupt void PORT1_ISR(void)
{
P4OUT |= BIT0; // Turn LED1 On
switch(__even_in_range(P1IV, P1IV_P1IFG7))
{
case P1IV_NONE : break;
case P1IV_P1IFG0 : break;
case P1IV_P1IFG1 : break;
case P1IV_P1IFG2 :
// Start debounce timer
Timer_A_initUpMode(TIMER_A0_BASE, &initUpParam_A0);
break;
case P1IV_P1IFG3 : break;
case P1IV_P1IFG4 : break;
case P1IV_P1IFG5 : break;
case P1IV_P1IFG6 : break;
case P1IV_P1IFG7 : break;
}
}
/*
* Timer A0 Interrupt Service Routine
* Used as button debounce timer
*/
#pragma vector = TIMER0_A0_VECTOR
__interrupt void TIMER0_A0_ISR (void)
{
// Button S1 held down
if (!(P1IN & BIT2))
{
P4OUT |= ~BIT0;
holdCount++;
if (holdCount == 5)
{
// Change mode
if (*mode == TEMPERATURE_MODE) (*mode) = HUMIDITY_MODE;
else if (*mode == HUMIDITY_MODE) (*mode) = Dew_MODE; //////////////////
else (*mode) = TEMPERATURE_MODE;
}
}
// Button S1 released
else if (P1IN & BIT2)
{
holdCount = 0;
P4OUT &= ~BIT0;
Timer_A_stop(TIMER_A0_BASE);
}
}
/*
* RTC Interrupt Service Routine
* Wakes up every ~10 milliseconds to update stowatch
*/
#pragma vector = RTC_VECTOR
__interrupt void RTC_ISR(void)
{
switch(__even_in_range(RTCIV, RTCIV_RTCIF))
{
case RTCIV_NONE : break;
case RTCIV_RTCIF:
__bic_SR_register_on_exit(LPM3_bits); // exit LPM3
break;
}
}
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=USCI_B0_VECTOR
__interrupt
#elif defined(__GNUC__)
__attribute__((interrupt(USCI_B0_VECTOR)))
#endif
void USCIB0_ISR(void)
{
switch(__even_in_range(UCB0IV,0x1E))
{
case 0x00: break; // Vector 0: No interrupts break;
case 0x02: break; // Vector 2: ALIFG break;
case 0x04:
EUSCI_B_I2C_masterReceiveStart(EUSCI_B0_BASE);
break; // Vector 4: NACKIFG break;
case 0x06: break; // Vector 6: STT IFG break;
case 0x08: break; // Vector 8: STPIFG break;
case 0x0a: break; // Vector 10: RXIFG3 break;
case 0x0c: break; // Vector 14: TXIFG3 break;
case 0x0e: break; // Vector 16: RXIFG2 break;
case 0x10: break; // Vector 18: TXIFG2 break;
case 0x12: break; // Vector 20: RXIFG1 break;
case 0x14: break; // Vector 22: TXIFG1 break;
case 0x16:
if(xferIndex == RXCOUNT - 2)
{
EUSCI_B_I2C_masterReceiveMultiByteStop(EUSCI_B0_BASE);
RXData[xferIndex++] = EUSCI_B_I2C_masterReceiveMultiByteNext(EUSCI_B0_BASE);
}
else if(xferIndex == RXCOUNT - 1)
{
RXData[xferIndex++] = EUSCI_B_I2C_masterReceiveMultiByteNext(EUSCI_B0_BASE);
EUSCI_B_I2C_disableInterrupt(EUSCI_B0_BASE, EUSCI_B_I2C_RECEIVE_INTERRUPT0);
EUSCI_B_I2C_disableInterrupt(EUSCI_B0_BASE, EUSCI_B_I2C_NAK_INTERRUPT);
EUSCI_B_I2C_setMode(EUSCI_B0_BASE, EUSCI_B_I2C_TRANSMIT_MODE);
xferIndex = 0;
stopSent = true;
__bic_SR_register_on_exit(CPUOFF);
}
else
{
RXData[xferIndex++] = EUSCI_B_I2C_masterReceiveMultiByteNext(EUSCI_B0_BASE);
}
break; // Vector 24: RXIFG0 break;
case 0x18:
EUSCI_B_I2C_disableInterrupt(EUSCI_B0_BASE, EUSCI_B_I2C_TRANSMIT_INTERRUPT0);
EUSCI_B_I2C_setMode(EUSCI_B0_BASE, EUSCI_B_I2C_RECEIVE_MODE);
xferIndex = 0;
EUSCI_B_I2C_masterReceiveStart(EUSCI_B0_BASE);
EUSCI_B_I2C_enableInterrupt(EUSCI_B0_BASE, EUSCI_B_I2C_RECEIVE_INTERRUPT0);
EUSCI_B_I2C_enableInterrupt(EUSCI_B0_BASE, EUSCI_B_I2C_NAK_INTERRUPT);
break; // Vector 26: TXIFG0 break;
case 0x1a: break;
case 0x1c: break; // Vector 30: clock low timeout break;
case 0x1e: break; // Vector 32: 9th bit break;
default: break;
}
}
////////////////////////////////////////
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(USCI_A0_VECTOR))) USCI_A0_ISR (void)
#else
#error Compiler not supported!
#endif
{
switch(__even_in_range(UCA0IV,USCI_UART_UCTXCPTIFG))
{
case USCI_NONE: break;
case USCI_UART_UCRXIFG:
UCA0IFG &=~ UCRXIFG; // Clear interrupt
if(UCA0RXBUF == 0xFF)
for(i=0;i<8;i++)
{
while(!(UCA0IFG & UCTXIFG));
UCA0TXBUF = FeedbackValue[i];
}
__bic_SR_register_on_exit(LPM0_bits); // Exit LPM0 on reti
break;
case USCI_UART_UCTXIFG: break;
case USCI_UART_UCSTTIFG: break;
case USCI_UART_UCTXCPTIFG: break;
}
}