Quantcast
Channel: MSP 低功耗微控制器论坛 - 最近的话题
Viewing all articles
Browse latest Browse all 3634

MSP430G2553串口中断的问题

$
0
0

程序的目的是从A0口接收异步串口数据,目前是和电脑的串口调试助手连接,然后接收的数据由B口的SPI将数据发送出去。

遇到的问题是,当串口A接收数据进入中断后,给串口B的缓冲区赋值数据后,就会重复进入中断。

如果不检测B口接收中断,没有此问题。如果没有对B的发送缓冲区发送,没有此问题。

不是硬件的问题,换了几块相同的板子。不是SPI从设备问题,已经把1.5 1.6 1.7的杜邦线拔掉。

int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

P1DIR |= BIT0;
P1OUT &= ~BIT0;

BCSCTL1 = CALBC1_1MHZ; // Set DCO
DCOCTL = CALDCO_1MHZ;

UCA0CTL1 |= UCSWRST;
UCA0CTL1 |= UCSSEL_2; // SMCLK

P1SEL = BIT1 + BIT2; // P1.1为 RXD, P1.2为TXD
P1SEL2 = BIT1 + BIT2; // P1.1为 RXD, P1.2为TXD

UCA0BR0 = 104; // 1MHz 9600
UCA0BR1 = 0; // 1MHz 9600
// UCA0MCTL = UCBRS2 + UCBRS0; // 波特率=BRCLK/(UBR+(M7+...0)/8)
UCA0MCTL = UCBRS0; // 波特率=BRCLK/(UBR+(M7+...0)/8)
UCA0CTL1 &= ~UCSWRST; 

UCB0CTL1 |= UCSWRST;
UCB0CTL1 |= UCSSEL_2; // SMCLK


P1SEL |= BIT5 + BIT6 + BIT7;
P1SEL2 |= BIT5 + BIT6 + BIT7;

UCB0CTL0 |= UCCKPL + UCMSB + UCMST + UCSYNC; // 3-pin, 8-bit SPI master

UCB0BR0 |= 0x02; // /2
UCB0BR1 = 0; //
// UCB0MCTL = 0; // No modulation

UCB0CTL1 &= ~UCSWRST;


//IE2 |= UCA0RXIE + UCB0RXIE; // 使能接收中断

IE2 |= UCA0RXIE;
IE2 |= UCB0RXIE;

__bis_SR_register(LPM0_bits + GIE);
return 0;
}


#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{

UCA0TXBUF = UCA0RXBUF;

UCB0TXBUF = UCA0RXBUF;
}


Viewing all articles
Browse latest Browse all 3634

Trending Articles