/* * 函数:user_spi_write_byte * 说明:SPI写一个字节 */ void ICACHE_FLASH_ATTR user_spi_write_byte(u8 data) { #if defined(HARD_SPI) u32 send_data[1] = {data}; SpiData spiData; spiData.cmd = MASTER_WRITE_DATA_TO_SLAVE_CMD; spiData.cmdLen = 0; spiData.addr = NULL; spiData.addrLen = 0; spiData.data = send_data; spiData.dataLen = 1; SPIMasterSendData(SpiNum_HSPI, &spiData); #elif defined(SOFT_SPI) u8 i; CS_0(); for(i = 0; i < 8; i++){ if (data & 0x80){ MOSI_1(); }else{ MOSI_0(); } SCK_0(); data <<= 1; //user_spi_delay_us(50); SCK_1(); } CS_1(); #endif }
/* ********************************************************************************************************* * 函 数 名: TM7705_Send8Bit * 功能说明: 向SPI总线发送8个bit数据。 不带CS控制。 * 形 参: _data : 数据 * 返 回 值: 无 ********************************************************************************************************* */ static void ICACHE_FLASH_ATTR TM7705_Send8Bit(u8 data) { //user_spi_write_byte(data); #if defined(SOFT_SPI) u8 i; CS_0(); for(i = 0; i < 8; i++){ if (data & 0x80){ MOSI_1(); }else{ MOSI_0(); } TM7705_Delay_us(50); SCK_0(); data <<= 1; TM7705_Delay_us(50); SCK_1(); } CS_1(); #endif }
/* ********************************************************************************************************* * 函 数 名: bsp_spiWrite0 * 功能说明: 向SPI总线发送一个字节。SCK上升沿采集数据, SCK空闲时为低电平。 * 形 参: 无 * 返 回 值: 无 ********************************************************************************************************* */ void bsp_spiWrite0(uint8_t _ucByte) { #ifdef SOFT_SPI /* 软件SPI */ uint8_t i; for(i = 0; i < 8; i++) { if (_ucByte & 0x80) { MOSI_1(); } else { MOSI_0(); } bsp_spiDelay(); SCK_1(); _ucByte <<= 1; bsp_spiDelay(); SCK_0(); } bsp_spiDelay(); #endif #ifdef HARD_SPI /* 硬件SPI */ /* 等待发送缓冲区空 */ while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET); /* 发送一个字节 */ SPI_I2S_SendData(SPI1, _ucByte); /* 等待数据接收完毕 */ while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET); /* 读取接收到的数据 */ SPI_I2S_ReceiveData(SPI1); #endif }