/* software spi routine */ uint8_t spi_transfer(uint8_t tx) { uint8_t i = 0; uint8_t rx = 0; nrf24_sck_digitalWrite(LOW); for(i=0;i<8;i++) { if(tx & (1<<(7-i))) { nrf24_mosi_digitalWrite(HIGH); } else { nrf24_mosi_digitalWrite(LOW); } nrf24_sck_digitalWrite(HIGH); rx = rx << 1; if(nrf24_miso_digitalRead()) { rx |= 0x01; } nrf24_sck_digitalWrite(LOW); } return rx; }
/* software spi routine */ uint8_t spi_transfer(uint8_t tx) { #if defined(__AVR_ATtiny84__) USIDR = tx; USISR = _BV(USIOIF); // clear flag while ( (USISR & _BV(USIOIF)) == 0 ) { USICR = (1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC); } return USIDR; #elif defined (__AVR_ATmega328P__) uint8_t reply; SPDR = tx; while(!(SPSR & (1<<SPIF))); reply = SPDR; return reply; #else uint8_t i = 0; uint8_t rx = 0; nrf24_sck_digitalWrite(LOW); for(i=0;i<8;i++) { if(tx & (1<<(7-i))) { nrf24_mosi_digitalWrite(HIGH); } else { nrf24_mosi_digitalWrite(LOW); } nrf24_sck_digitalWrite(HIGH); rx = rx << 1; if(nrf24_miso_digitalRead()) { rx |= 0x01; } nrf24_sck_digitalWrite(LOW); } return rx; #endif }
uint8_t spi_transfer( uint8_t tx ) { //uint8_t i = 0; uint8_t rx = 0; nrf24_sck_digitalWrite(LOW); /*for(i=0;i<8;i++) { if(tx & (1<<(7-i))) nrf24_mosi_digitalWrite(HIGH); else nrf24_mosi_digitalWrite(LOW); nrf24_sck_digitalWrite(HIGH); rx = rx << 1; if(nrf24_miso_digitalRead()) rx |= 0x01; nrf24_sck_digitalWrite(LOW); }*/ nrf24_mosi_digitalWrite(tx & (1 << 7)); rx |= nrf24_miso_digitalRead() << 7; nrf24_mosi_digitalWrite(tx & (1 << 6)); rx |= nrf24_miso_digitalRead() << 6; nrf24_mosi_digitalWrite(tx & (1 << 5)); rx |= nrf24_miso_digitalRead() << 5; nrf24_mosi_digitalWrite(tx & (1 << 4)); rx |= nrf24_miso_digitalRead() << 4; nrf24_mosi_digitalWrite(tx & (1 << 3)); rx |= nrf24_miso_digitalRead() << 3; nrf24_mosi_digitalWrite(tx & (1 << 2)); rx |= nrf24_miso_digitalRead() << 2; nrf24_mosi_digitalWrite(tx & (1 << 1)); rx |= nrf24_miso_digitalRead() << 1; nrf24_mosi_digitalWrite(tx & 1); rx |= nrf24_miso_digitalRead(); return rx; }