#include "spi_sw.h" #include #include SPI_IMPL SpiInit(uint16_t MOSI_pin, uint16_t CLK_pin) { SPI_IMPL outp = { .MOSI_pin = MOSI_pin, .CLK_pin = CLK_pin, .delay = (uint16_t) 1000, }; return outp; } void SpiSend(SPI_IMPL *spi, uint8_t playload) { if (TRAILING_EDGE) { gpio_clear(GPIOA, spi->CLK_pin); } else { gpio_set(GPIOA, spi->CLK_pin); } for (int i = 0; i < 8; i++) { gpio_toggle(GPIOA, spi->CLK_pin); if ((playload >> i) & 1) { gpio_clear(GPIOA, spi->MOSI_pin); } else { gpio_set(GPIOA, spi->MOSI_pin); } delayCycles(spi->delay); gpio_toggle(GPIOA, spi->CLK_pin); delayCycles(spi->delay); } }