今天出现这样的问题:
将这个中断函数注释掉:
#pragma vector=USCI_B2_VECTOR
__interrupt void USCI_B2_ISR(void)
{
// __bis_SR_register(0x0000);
switch(__even_in_range(UCB2IV,4))
{
case 0: break; // Vector 0 - no interrupt
case 2:
// Vector 2 - RXIFG
dat=UCB2RXBUF; // Test for correct character RX'd
// __bis_SR_register(GIE);
break;
case 4: break; // Vector 4 - TXIFG
default: break;
}
}
程序就会在红字处跑飞:
void Fram_WR_ready()
{
P2OUT |=BIT3;
__delay_cycles(2000);
//铁电寄存器操作(datasheet。Figure5)
FM_CS_0; //选中铁电
UCB2TXBUF = 0x06;//铁电寄存器写使能op-code
while (!(UCB2IFG&UCTXIFG)); __delay_cycles(40000);
FM_CS_1;//不选中铁电;
__delay_cycles(2000);
}
相关的初始化:
void Fram_Init(void)
{
P2DIR |= BIT3; // Set P10.3.6.7 to output direction
P2OUT|=BIT3;
P9SEL |= 0x0E; // P9.1.2.3 option select
UCB2CTL1 |= UCSWRST; // **Put state machine in reset**
UCB2CTL0 = UCMST+UCSYNC+UCMSB+UCCKPH; // 3-pin, 8-bit SPI master +UCCKPL
// Clock polarity high, MSB
UCB2CTL1 |= UCSSEL_1; //时钟选择
UCB2BR0 = 0x58; //设置波特率
UCB2BR1 = 0x14;
UCB2CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCB2IE |= UCRXIE; // Enable USCI_A0 RX interrupt
}
------解决方案--------------------
看看看门狗什么的
------解决方案--------------------
因为你使能收中断了,而又没有指定收中断函数,收中断对应的向量没准是什么,可能是因为你一发对方回了数据,一执行中断向量处的东西就跑飞了。