void SCA_Init( void ) { SPI_Reset(); SPI_Start(); SPI_WriteByte( MEAS ); SPI_Stop(); }
PUBLIC void SER_SPI_Close(void) { t_uint8 idx; for(idx = NULL; idx < SER_NUM_SPI_INSTANCES; idx++) { g_ser_spi_context[idx].rcv_flag = FALSE; g_ser_spi_context[idx].trans_flag = FALSE; g_ser_spi_context[idx].rcv_timeout = FALSE; g_ser_spi_context[idx].rcv_overrun = FALSE; g_ser_spi_context[idx].receive_it_mode = FALSE; g_ser_spi_context[idx].transmit_it_mode = FALSE; g_ser_spi_context[idx].rx_index = 0; g_ser_spi_context[idx].tx_index = 0; g_ser_spi_context[idx].rx_trig_level = 1; g_ser_spi_context[idx].tx_trig_level = 1; g_ser_spi_context[idx].transmit_size = 1; g_ser_spi_context[idx].receive_size = 1; } SPI_Reset(SPI_DEVICE_ID_0); SPI_Reset(SPI_DEVICE_ID_1); SPI_Reset(SPI_DEVICE_ID_2); SPI_Reset(SPI_DEVICE_ID_3); }
static rt_err_t configure(struct rt_spi_device *device, struct rt_spi_configuration *configuration) { struct rt_spi_bus *spi_bus = (struct rt_spi_bus *)device->bus; struct tina_spi_cs *tina_spi_cs = device->parent.user_data; struct tina_spi *_spi_info = (struct tina_spi *)spi_bus->parent.user_data; SPI_T *spi = _spi_info->spi; DEBUG_PRINTF("%s -> %d\n", __FUNCTION__, __LINE__); RT_ASSERT(device != RT_NULL); RT_ASSERT(configuration != RT_NULL); DEBUG_PRINTF("%s -> %d\n", __FUNCTION__, __LINE__); DEBUG_PRINTF("spi address: %08X\n", (rt_uint32_t)spi); SPI_Disable(spi); SPI_Reset(spi); SPI_ResetRxFifo(spi); SPI_ResetTxFifo(spi); DEBUG_PRINTF("%s -> %d\n", __FUNCTION__, __LINE__); /* data_width */ if (configuration->data_width != 8) { DEBUG_PRINTF("error: data_width is %d\n", configuration->data_width); return RT_EIO; } DEBUG_PRINTF("%s -> %d\n", __FUNCTION__, __LINE__); SPI_SetDuplex(spi, SPI_TCTRL_DHB_FULL_DUPLEX); SPI_SetMode(spi, SPI_CTRL_MODE_MASTER); /* MSB or LSB */ if (configuration->mode & RT_SPI_MSB) { SPI_SetFirstTransmitBit(spi, SPI_TCTRL_FBS_MSB); } else { SPI_SetFirstTransmitBit(spi, SPI_TCTRL_FBS_LSB); } switch (configuration->mode) { case RT_SPI_MODE_0: SPI_SetSclkMode(spi, SPI_SCLK_Mode0); break; case RT_SPI_MODE_1: SPI_SetSclkMode(spi, SPI_SCLK_Mode1); break; case RT_SPI_MODE_2: SPI_SetSclkMode(spi, SPI_SCLK_Mode2); break; case RT_SPI_MODE_3: SPI_SetSclkMode(spi, SPI_SCLK_Mode3); break; } /* baudrate */ { unsigned int spi_clock = 0; rt_uint32_t max_hz; rt_uint32_t div; DEBUG_PRINTF("%s -> %d\n", __FUNCTION__, __LINE__); max_hz = configuration->max_hz; if (max_hz > SPI_BUS_MAX_CLK) { max_hz = SPI_BUS_MAX_CLK; } spi_clock = ahb_get_clk(); DEBUG_PRINTF("%s -> %d\n", __FUNCTION__, __LINE__); div = (spi_clock + max_hz - 1) / max_hz; dbg_log(DBG_LOG, "configuration->max_hz: %d\n", configuration->max_hz); dbg_log(DBG_LOG, "max freq: %d\n", max_hz); dbg_log(DBG_LOG, "spi_clock: %d\n", spi_clock); dbg_log(DBG_LOG, "div: %d\n", div); SPI_SetClkDiv(spi, div / 2); } /* baudrate */ SPI_ManualChipSelect(spi, tina_spi_cs->cs); SPI_SetDataSize(spi, 0, 0); SPI_Enable(spi); DEBUG_PRINTF("%s -> %d\n", __FUNCTION__, __LINE__); return RT_EOK; };