现在用MSP430F155连接一个Flash存储器SST25VF016B,通过SPI同步串行通信方式实现通信。但是现在程序不能发送和接收(不能进入中断),各位哥哥给看看有什么问题?
以下是SPI程序:
#define CE0 P5OUT&=~BIT3
#define CE1 P5OUT|=BIT3
unsigned char RxFlag=0;
unsigned char TxFlag=0;
void SPI_init()
{
P5DIR |=BIT3; //P5.3 CE引脚
P5DIR |=BIT2;
P5OUT |=BIT2;//WP引脚
P5DIR |=BIT0; //P5.0 Hold引脚
P5OUT |=BIT0;
P5DIR |=BIT1; //P5.1 Vcc引脚
P5OUT |=BIT1;
P3SEL |=BIT1+BIT2+BIT3; //SIMO SOMI UCLK
U0CTL =CHAR+SYNC+MM+SWRST; //8位SPI,SPI模式,主机模式,保持在复位状态
U0TCTL =SSEL1+STC; //时钟源为SMCLK,3线模式;
U0BR0 =0x002;
U0BR1 =0x000; //波特率设定
U0MCTL =0x000; //调整寄存器没有调整;
ME1 =USPIE0; //打开SPI使能
U0CTL &=~SWRST; //关复位
U0IE |= URXIE0 + UTXIE0;
WRSR(0x00); //Flash去保护
}
void SPI_send(unsigned char byte) //发送一个数据
{
while(TxFlag == 0);
TxFlag=0;
//while((IFG1 & UTXIFG0) == 0); //等待发送数据缓存是否准备好接收新数据
TXBUF0=byte; //发送一个字节;
}
unsigned char SPI_get() //接收一个数据
{
unsigned char in;
while(RxFlag==0); //等待接收完成
RxFlag=0;
in=U0RXBUF;
return in;
}
#pragma vector=USART0RX_VECTOR
__interrupt void UartRx()
{
RxFlag=1;
}
#pragma vector=USART0TX_VECTOR
__interrupt void UartTx ()
{
TxFlag=1;
}
以下是时钟初始程序:
WDTCTL=WDTPW+WDTHOLD; //关闭看门狗
BCSCTL1 |=DIVA_2; //ACLK 4分频 设置时钟
BCSCTL1 &=~XT2OFF; //XT2有效
while((IFG1&OFIFG)==1) //当OFIFG等于0的时候结束,说明晶体振荡器正常工作了
{
IFG1 &=~OFIFG; //清除晶体振荡器失效标志OFIFG标志
delay(); //等待50us
}
BCSCTL2 |=SELM1; //MCLK
BCSCTL2 |=SELS; //SMCLK5
|