46 #include "esos_stm32l4_edub.h"
82 void __esos_spi_hw_config( uint32_t u32_spibps ) {
85 rcc_periph_clock_enable(RCC_SPI1);
89 gpio_mode_setup(EDUB_SPICLK_PORT, GPIO_MODE_AF, GPIO_PUPD_NONE, EDUB_SPICLK_PIN);
91 gpio_mode_setup(EDUB_SPIMOSI_PORT, GPIO_MODE_AF, GPIO_PUPD_NONE, EDUB_SPIMOSI_PIN);
94 gpio_mode_setup(EDUB_SPIMISO_PORT, GPIO_MODE_AF, GPIO_PUPD_NONE, EDUB_SPIMISO_PIN);
98 gpio_set_af(EDUB_SPICLK_PORT, GPIO_AF5, EDUB_SPICLK_PIN);
99 gpio_set_af(EDUB_SPIMOSI_PORT, GPIO_AF5, EDUB_SPIMOSI_PIN);
100 gpio_set_af(EDUB_SPIMISO_PORT, GPIO_AF5, EDUB_SPIMISO_PIN);
111 spi_set_master_mode( SPI1 );
115 spi_set_baudrate_prescaler( SPI1, SPI_CR1_BR_FPCLK_DIV_8);
116 spi_set_standard_mode( SPI1, 0 );
117 spi_set_full_duplex_mode( SPI1 );
118 spi_disable_crc( SPI1 );
119 spi_set_data_size ( SPI1, SPI_CR2_DS_8BIT);
120 spi_send_msb_first( SPI1 );
130 spi_enable_software_slave_management(SPI1);
131 spi_set_nss_high(SPI1);
150 ESOS_CHILD_TASK( __esos_spi_hw_xferNSPI1, uint16_t* pu16_out, uint16_t* pu16_in, uint16_t u16_cnt) {
151 static uint16_t* pu16_tempPtrIn;
152 static uint16_t* pu16_tempPtrOut;
153 static uint16_t u16_tempCnt, u16_i;
154 static uint8_t u8_isReading, u8_isWriting;
155 uint16_t u16_scratch;
159 pu16_tempPtrOut=pu16_out;
160 pu16_tempPtrIn=pu16_in;
162 if (pu16_tempPtrOut ==
NULLPTR)
163 u8_isWriting =
FALSE;
168 u8_isReading =
FALSE;
178 if ( __ESOS_SPI_STM32L4_IS_OVR() ) {
179 u16_scratch = SPI_SR(SPI1);
180 u16_scratch = SPI_DR(SPI1);
183 for (u16_i=0; u16_i < u16_tempCnt; u16_i++) {
185 SPI_DR8(SPI1) = (uint8_t) (*pu16_tempPtrOut & 0x0FF);
199 u16_scratch = SPI_DR(SPI1);
201 *pu16_tempPtrIn = u16_scratch;