/* * Bit-Banged SPI routines */ #include "spi.h" void spiInit(void) { MI_dir; MO_dir; SCK_dir; CS_dir; GDO_dir; SCK_off; MO_off; CS_on; } void spiWrite(uint8_t command) { SCK_off; MO_off; uint8_t n = 8; while (n--) { if (command & 0x80) { MO_on; } else { MO_off; } SCK_on; NOP(); SCK_off; command = command << 1; } MO_on; } uint8_t spiRead(void) { uint8_t result = 0; for (uint8_t i = 0; i < 8; i++) { if (MI_1) { result = (result << 1) | 0x01; } else { result = result << 1; } SCK_on; NOP(); SCK_off; NOP(); } return result; }