uint8_t spiRead() { while ((SPI_S_REG(SPI1) & SPI_S_SPTEF_MASK) == 0) ; SPI_DL_REG(SPI1) = 0; while ((SPI_S_REG(SPI1) & SPI_S_SPRF_MASK) == 0) ; return SPI_DL_REG(SPI1); }
void spiWrite(uint8_t byte) { while (!(SPI_S_REG(SPI1) & SPI_S_SPTEF_MASK)) ; SPI_DL_REG(SPI1) = byte; while ((SPI_S_REG(SPI1) & SPI_S_SPRF_MASK) == 0) ; SPI_DL_REG(SPI1); }
//============================================================================== //函数名称:SPI_sendonebyte. //功能说明:SPI发送一字节数据。 //函数参数:SPI_No:串口号。 // :ch:需要发送的一字节数据。 //函数返回:0:发送失败;1:发送成功。 //============================================================================== uint_8 SPI_sendonebyte(uint_8 SPI_No,uint_8 ch) { uint_32 i; SPI_MemMapPtr baseadd=SPI_baseadd(SPI_No); while(!SPI_S_REG(baseadd)&SPI_S_SPTEF_MASK); SPI_D_REG(baseadd)=ch; for(i=0;i<0xFFF0;i++) //在一定时间内发送不能完成,则认为发送失败。 { if(SPI_S_REG(baseadd)&SPI_S_SPTEF_MASK) { return(1); } } return(0); }
//============================================================================== //函数名称:SPI_sendstring. //功能说明:SPI发送数据。 //函数参数:SPI_No:串口号。 // :*p:所发数据的首地址。 //函数返回:无。 //============================================================================== void SPI_sendstring(uint_8 SPI_No,uint_8 *p) { SPI_MemMapPtr baseadd=SPI_baseadd(SPI_No); uint_32 k; for(k=0;p[k]!='\0';k++) { while(!SPI_S_REG(baseadd)&SPI_S_SPTEF_MASK); SPI_D_REG(baseadd)=p[k]; } }
//============================================================================== //函数名称:SPI_receiveN. //功能说明:SPI接收数据。当n=1时,就是接受一个字节的数据…… //函数参数:SPI_No:SPI口号。 // : n:要接收的字节个数。 // :data[]:接收到的数据。 // 函数返回:1:接收成功,其他情况:失败。 //============================================================================== uint_8 SPI_receiveN(uint_8 SPI_No,uint_32 n,uint_8 data[]) { SPI_MemMapPtr baseadd=SPI_baseadd(SPI_No); uint_32 m=0; while(m<n) { if(SPI_S_REG(baseadd)&SPI_S_SPRF_MASK) { data[m]=SPI_D_REG(baseadd); m++; } } return(1); }
//============================================================================== //函数名称:SPI_reonebyte. //功能说明:SPI接收一个字节的数据 //函数参数:SPI_No:SPI口号。 //函数返回:接收到的数据。 //============================================================================== uint_8 SPI_reonebyte(uint_8 SPI_No) { SPI_MemMapPtr baseadd=SPI_baseadd(SPI_No); while(!(SPI_S_REG(baseadd)& SPI_S_SPRF_MASK)); //检测SPI1是否收到了数据。 return SPI_D_REG(baseadd); }