lpc1343 spi 读写rc531时序问题
[复制链接]
我按照手册的时序来写了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; }
|