int spi_transfer_byte(spi_t dev, char out, char *in) { if (in != NULL) { (*in) = USART_SpiTransfer(spi_config[dev].dev, out); } else { USART_SpiTransfer(spi_config[dev].dev, out); } return 0; }
/**************************************************************************//** * @brief * Do one SPI transfer. * * @param data * Byte to transmit. * * @return * Byte received. *****************************************************************************/ uint8_t MICROSD_XferSpi(uint8_t data) { if ( timeOut ) timeOut--; return USART_SpiTransfer(MICROSD_USART, data); }
/*============================================================================== hal_spiRead() =============================================================================*/ uint8_t hal_spiRead(uint8_t * p_reg, uint16_t i_length) { //SPIDRV_MReceiveB( s_hal_spi.pHndl, p_reg, i_length ); for( int i = 0; i < i_length; i++ ) p_reg[i] = USART_SpiTransfer( s_hal_spi.pHndl->initData.port, 0 ); return *p_reg; } /* hal_spiRead() */
// ***************************************************************************** // @fn spi_byte // @brief Write a byte through SPI // @param unsigned char data Byte to send // @return unsigned char Recieved byte // ***************************************************************************** unsigned char spi_byte(unsigned char data) { #ifdef SPI_USE_DMA unsigned char receive = NULL; spiDmaTransfer( (uint8_t*) &data, (uint8_t*) &receive, 1 ); sleepUntilDmaDone(); return receive; #else return USART_SpiTransfer( SPI_CHANNEL, data ); #endif }
byte SPIClass::transfer(byte _pin, uint8_t _data, SPITransferMode _mode) { //SERIAL.print(":w:"); //DEBUGPRINTLN(_data); /*while (!(spi->STATUS & USART_STATUS_TXBL)); spi->TXDATA = (uint32_t)_data; while (!((spi->STATUS & USART_STATUS_RXDATAV) == USART_STATUS_RXDATAV)); uint32_t d = spi->RXDATA; */ uint8_t out =0; out = USART_SpiTransfer(spi, _data); /*SERIAL.print("data:"); DEBUGPRINTLN(_data);*/ /*uint8_t out = 0; for(int i = 0; i < 8; i++) { digitalWrite(PIN_SPI_MOSI, ((_data >> (7-i)) & 0x01)); //delayMicroseconds(1); digitalWrite(PIN_SPI_SCK, HIGH); //delayMicroseconds(1); digitalWrite(PIN_SPI_SCK, LOW); out = (digitalRead(PIN_SPI_MISO) << (7-i)) | out; }*/ /*SERIAL.print("read:"); DEBUGPRINTLN(out);*/ return out & 0xFF; }
/*============================================================================== hal_spiWrite() =============================================================================*/ void hal_spiWrite(uint8_t * c_value, uint16_t i_length) { //SPIDRV_MTransmitB( s_hal_spi.pHndl, c_value, i_length ); for( int i = 0; i < i_length; i++ ) USART_SpiTransfer( s_hal_spi.pHndl->initData.port, c_value[i] ); } /* hal_spiWrite() */
/*---------------------------------------------------------------------------*/ uint8_t spi2_readwrite(uint8_t data) { return USART_SpiTransfer(USART2, data); }