nRF52832, SDK17.1, s132
I work with SPI and it works on the this project with SDK15.
But I have transferred this prj to the SDK17.1 and I can't make SPI work.
I don't get
spi_event_handler
where I set
spi_xfer_done
flag.
here are my code with SPI init
#include <lis3dh.h> #include <nrf_gpio.h> #include "nrf_drv_spi.h" #include "app_util_platform.h" #include "nrf_log.h" #include "nrf_delay.h" #include "logic.h" #define CTRL_REG1 0x20 #define CTRL_REG2 0x21 #define CTRL_REG3 0x22 #define CTRL_REG4 0x23 #define CTRL_REG5 0x24 #define CTRL_REG6 0x25 #define INT1_CFG 0x30 #define INT1_SRC 0x31 #define INT1_THS 0x32 #define INT1_DUR 0x33 #define LIS3DH_READ_MSK 128 #define LIS3DH_WRITE_MSK 0 #define SPI_INSTANCE 0 /**< SPI instance index. */ static const nrf_drv_spi_t spi = NRF_DRV_SPI_INSTANCE(SPI_INSTANCE); /**< SPI instance. */ static volatile bool spi_xfer_done; /**< Flag used to indicate that SPI instance completed the transfer. */ static uint8_t m_tx_buf[2]; /**< TX buffer. */ static uint8_t m_rx_buf[2]; /**< RX buffer. */ static const uint8_t m_length = sizeof(m_tx_buf); /**< Transfer length. */ uint8_t lis_spi_error; /** * @brief SPI user event handler. * @param event */ void spi_event_handler(nrf_drv_spi_evt_t const * p_event, void * p_context) { spi_xfer_done = true; // NRF_LOG_INFO("Transfer completed."); if (m_rx_buf[0] != 0) { NRF_LOG_INFO(" Received:"); // NRF_LOG_HEXDUMP_INFO(m_rx_buf, strlen((const char *)m_rx_buf)); } } static __INLINE uint8_t lis3dh_spi_read_write(const uint8_t reg, const uint8_t data) { // uint8_t rx_buffer[2], tx_buffer[] = { reg, data }; m_tx_buf [0] = reg; m_tx_buf [1] = data; spi_xfer_done = false; APP_ERROR_CHECK(nrf_drv_spi_transfer(&spi, m_tx_buf, m_length, m_rx_buf, m_length)); while (!spi_xfer_done) { __WFE(); } return m_rx_buf[1]; } uint8_t lis3dh_read(const uint8_t reg) { return lis3dh_spi_read_write(reg | LIS3DH_READ_MSK, 0xAA); } void lis3dh_write(const uint8_t reg, const uint8_t data) { lis3dh_spi_read_write(reg | LIS3DH_WRITE_MSK, data); } void lis3dh_init(void) { nrf_drv_spi_config_t spi_config = NRF_DRV_SPI_DEFAULT_CONFIG; spi_config.ss_pin = SPI_SS; spi_config.miso_pin = SPI_MISO; spi_config.mosi_pin = SPI_MOSI; spi_config.sck_pin = SPI_SCK; APP_ERROR_CHECK(nrf_drv_spi_init(&spi, &spi_config, spi_event_handler, NULL)); lis3dh_write(CTRL_REG1, 0x2F); // low power mode, 1Hz (0x2F = 10 Hz) lis3dh_write(CTRL_REG2, 0x01); // high pass filter enabled for AOI1 lis3dh_write(CTRL_REG3, 0x40); // AOI1 interrupt on INT1 lis3dh_write(CTRL_REG4, 0x80); // BDU, full scale = +-2g lis3dh_write(CTRL_REG5, 0x00); lis3dh_write(INT1_THS, 2); // threshold * 15.625 (mg) lis3dh_write(INT1_DUR, 1); // duration * 1 (s) lis3dh_write(INT1_CFG, 0x15); // X Or Y Or Z low events if (lis3dh_read(CTRL_REG1) != 0x2F) { lis_spi_error = 10; } // nrf_drv_spi_uninit(&spi); }
And sdk_config.h where I set for SPI

What possible reason?
Thanks.