#include #include #include "encoding.h" #include "platform.h" #include "eos.h" #include "msgq.h" #include "event.h" #include "board.h" #include "soc/interrupt.h" #include "soc/spi.h" #include "soc/spi_priv.h" #include "net.h" #include "egpio.h" #include "spi.h" #include "spi_cfg.h" #ifdef EOS_DEBUG #include #endif static unsigned char spi_dstack[EOS_SPI_MAX_DSTACK]; static unsigned char spi_dstack_len; static uint16_t spi_div[EOS_SPI_MAX_DEV]; static uint8_t spi_dev(void) { return spi_dstack_len ? spi_dstack[spi_dstack_len - 1] : EOS_SPI_DEV_NET; } static void spi_stop(unsigned char dev) { if (dev == EOS_SPI_DEV_NET) { eos_net_stop(); } else if (spi_cfg[dev].flags & SPI_DEV_FLAG_9BIT) { eos_spi_enable(); } else { eos_spi_stop(); } } static void spi_start(unsigned char dev) { if (dev == EOS_SPI_DEV_NET) { eos_net_start(); } else if (spi_cfg[dev].flags & SPI_DEV_FLAG_9BIT) { eos_spi_configure(spi_div[dev], spi_cfg[dev].csid, spi_cfg[dev].cspin, spi_cfg[dev].evt); eos_spi_disable(); } else { eos_spi_start(spi_div[dev], spi_cfg[dev].csid, spi_cfg[dev].cspin, spi_cfg[dev].evt); } } int eos_spi_dev_init(void) { int i; for (i=0; i