Mirror of CollapseOS
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

40 lines
812B

  1. #include "sms_spi.h"
  2. void spi_init(SPI *spi, Tristate *TH, Tristate *TR, EXCH spixfn)
  3. {
  4. spi->TH = TH;
  5. spi->TR = TR;
  6. spi->lastTH = *TH;
  7. spi->bitcnt = 0;
  8. spi->bit = false;
  9. spi->rx = 0;
  10. spi->tx = 0xff;
  11. spi->spixfn = spixfn;
  12. }
  13. byte spi_rd(SPI *spi)
  14. {
  15. return (byte)spi->bit; // return in bit 0
  16. }
  17. void spi_pulse(SPI *spi)
  18. {
  19. if (*spi->TH != spi->lastTH) {
  20. spi->lastTH = *spi->TH;
  21. if (spi->lastTH == TRI_HIGH) {
  22. spi->rx <<= 1;
  23. if (*spi->TR == TRI_HIGH) {
  24. spi->rx++;
  25. }
  26. spi->bit = spi->tx >> 7;
  27. spi->tx <<= 1;
  28. spi->bitcnt++;
  29. if (spi->bitcnt == 8) {
  30. spi->tx = spi->spixfn(spi->rx);
  31. spi->bitcnt = 0;
  32. }
  33. }
  34. }
  35. }