目前使用msp430g2313来处理slave spi,遇到问题,使用TI提供的红色调试版,外接SPI信号,发现SPI CLOCK只要有信号就能进入中断,请求帮助,代码如下:
// MSP430G2xx3
// -----------------
// /|\| XIN|-
// | | |
// | | XOUT|-
// Master---+-|RST |
// | P1.2|<- Data Out (UCA0SOMI)
// | |
// | P1.1|-> Data In (UCA0SIMO)
// | |
// | P1.4|<- Serial Clock In (UCA0CLK)
//
// D. Dang
// Texas Instruments Inc.
// February 2011
// Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 5.10
//******************************************************************************
#include <msp430.h>
unsigned char tmp = 0;
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
while (!(P1IN & BIT4)); // If clock sig from mstr stays low,
// it is not yet in SPI mode
P1SEL = BIT1 + BIT2 + BIT4 + BIT0;
P1SEL2 = BIT1 + BIT2 + BIT4;
P1DIR |= BIT0;
UCA0CTL1 = UCSWRST; // **Put state machine in reset**
UCA0CTL0 |= UCCKPL + UCMSB + UCSYNC; // 3-pin, 8-bit SPI master
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCA0RXIE; // Enable USCI0 RX interrupt
_EINT();
//__bis_SR_register(LPM4_bits + GIE); // Enter LPM4, enable interrupts
while(1)
{
}
}
// Echo character
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR (void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(USCIAB0RX_VECTOR))) USCI0RX_ISR (void)
#else
#error Compiler not supported!
#endif
{
while (!(IFG2 & UCA0TXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = UCA0RXBUF;
//tmp++;
if(tmp==1)
{
P1OUT |= BIT0;
tmp = 0;
}
else
{
tmp = 1;
P1OUT &= ~BIT0;
}
}