lpc1343 spi 读写rc531时序问题

2019-03-25 20:45发布

我按照手册的时序来写了2个读写函数。但是读写的数据总是不对。 我网上找了很多相关资料,感觉他们的操作时序跟我一样的呀。 我设置的是8位,CPOL=0,CPHA=0。 下面是操作的函数,望有人帮忙分析下。   /****************************************************************************
* 名    称:WriteIO()
* 功    能:往一个地址写一个数据(EEPROM)。
* 入口参数:Address  地址
   value    数据
* 出口参数:无
****************************************************************************/
void WriteIO(unsigned char Address, unsigned char value)
{
 //选择寄存器页
 RC531NSS_CLR();
 SPI_SendByte(0x00);
 RC531NSS_SET();
 RC531NSS_CLR();
 SPI_SendByte(GetRegPage(Address));
 RC531NSS_SET();  //写入一个字节
 RC531NSS_CLR();
 SPI_SendByte((Address<<1)&0x7f);
 RC531NSS_SET();
 RC531NSS_CLR();
 SPI_SendByte(value);
 RC531NSS_SET();           
}
/****************************************************************************
* 名    称:ReadIO()
* 功    能:从一个地址读出一个数据(EEPROM)。
* 入口参数:Address  地址
* 出口参数:数据
****************************************************************************/
unsigned char ReadIO(unsigned char Address)
{
 unsigned char a;
 RC531NSS_CLR();
 SPI_SendByte(0x00);
 RC531NSS_SET();
 RC531NSS_CLR();
 SPI_SendByte(GetRegPage(Address));
 RC531NSS_SET();  RC531NSS_CLR();
 SPI_SendByte((Address<<1)|0x80);
 RC531NSS_SET();
 RC531NSS_CLR();
 a = SPI_RecByte();
 SPI_SendByte(0x00);  
 RC531NSS_SET();
 return a;            
}   /*******************************************************************
** 函数名称: void SPI_SendByte()    
** 功能描述: 通过SPI接口发送一个字节   
** 输   入: INT8U byte: 发送的字节    
** 输   出: 无         
**********************************************************************/
void SPI_SendByte(unsigned char byte)
{
 LPC_SSP->DR=byte;
 while(LPC_SSP->SR & SSPSR_TFE ==0);  //为0 表示发送fifo 不为空
} /**********************************************************************
** 函数名称: INT8U SPI_RecByte()    
** 功能描述: 从SPI接口接收一个字节    
** 输   入: 无         
** 输   出: 收到的字节       
*************************************************************************/
unsigned char SPI_RecByte(void)
{
 uint8_t temp;
 while(LPC_SSP->SR & SSPSR_RNE==0);  //为0表示接受fifo为空
 temp=LPC_SSP->DR;
 return temp;
}
    此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。