|
- #include "sms_spi.h"
-
- void spi_init(SPI *spi, Tristate *TH, Tristate *TR, EXCH spixfn)
- {
- spi->TH = TH;
- spi->TR = TR;
- spi->lastTH = *TH;
- spi->bitcnt = 0;
- spi->bit = false;
- spi->rx = 0;
- spi->tx = 0xff;
- spi->spixfn = spixfn;
- }
-
- byte spi_rd(SPI *spi)
- {
-
- return (byte)spi->bit; // return in bit 0
- }
-
- void spi_pulse(SPI *spi)
- {
- if (*spi->TH != spi->lastTH) {
- spi->lastTH = *spi->TH;
- if (spi->lastTH == TRI_HIGH) {
- spi->rx <<= 1;
- if (*spi->TR == TRI_HIGH) {
- spi->rx++;
- }
- spi->bit = spi->tx >> 7;
- spi->tx <<= 1;
- spi->bitcnt++;
- if (spi->bitcnt == 8) {
- spi->tx = spi->spixfn(spi->rx);
- spi->bitcnt = 0;
- }
- }
- }
- }
|