void SPI_init()
{
P5DIR |=BIT3; //P5.3 CE
P5DIR |=BIT2;
P5OUT |=BIT2;//WP引脚
//P5OUT &=~BIT2;//WP引脚
//P5DIR |=BIT0; //P5.0 Hold
//P5OUT |=BIT0;
//P5OUT &=~BIT0;
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; //关复位
//WRSR(0x00); //Flash去保护
}
void SPI_send(unsigned char byte) //发送一个数据
{
while((IFG1 & UTXIFG0) == 0); //等待发送数据缓存是否准备好接收新数据
TXBUF0=byte; //发送一个字节;
}
unsigned char SPI_get() //接收一个数据
{
unsigned char in;
while((IFG1 & URXIFG0)==0); //等待接收完成
in=U0RXBUF;
return in;
}
执行读操作时只能读出一个数据,再然后程序就卡在 while((IFG1 & URXIFG0)==0); //等待接收完成 这一步不走了。
SST25VF016B WP引脚和Hold引脚怎样连接? 芯片怎样去除写保护?
void WRSR(unsigned char byte) //往状态寄存器里写一个字节 系统启动首先写WRSR(0x00)去除写保护
{
CE0;
SPI_send(0x06);
CE1;
CE0;
SPI_send(0x01); //发送写状态寄存器
SPI_send(byte);
CE1;
}
去除写保护 WRSR(0x00);? |