GPIOTE input event is not called

Hello Nordic.

I'm now using nRF5 sdk and nrf52480 to develop custom device and firmware.

My goal is doing SPI transmission when input signal is detected.

This is SPI standard for my project.

As you can see, I have to start SPI transmission when DRDY pins are set as low from high.

So I connect start pin to P0.20 of nRF52840 for using gpiote function.

This is function for setting of PPI.

void spi_event_init(void)
{
    ret_code_t err_code;

    /* gpiote initiation, setup */
    nrf_drv_gpiote_in_config_t gpiote_cfg = NRFX_GPIOTE_CONFIG_IN_SENSE_HITOLO(1);

    err_code = nrf_drv_gpiote_init();
    APP_ERROR_CHECK(err_code);
    
    err_code = nrf_drv_gpiote_in_init(20 , &gpiote_cfg, gpio_event_handler); // cs pin
    APP_ERROR_CHECK(err_code);
    nrf_drv_gpiote_in_event_enable(20, true);

         
    uint32_t gpio_event_addr = nrf_drv_gpiote_in_event_addr_get(20);

    /* setup spi again */
        nrf_drv_spi_uninit(&m_spi_master);

        nrf_drv_spi_config_t const spi_cfg = {

        .sck_pin  = 22,
        .mosi_pin = 23,
        .miso_pin = 21,
        .ss_pin   = 24, // NRF_DRV_SPI_PIN_NOT_USED , SPI_CONFIG_CS_PIN

        
        .irq_priority = 6, // HIGH(6)
        .orc          = 0xff,
        .frequency    = NRF_DRV_SPI_FREQ_500K,
        .mode         = NRF_DRV_SPI_MODE_1,
        .bit_order    = NRF_DRV_SPI_BIT_ORDER_MSB_FIRST,
        
    };

    err_code = nrf_drv_spi_init(&m_spi_master, &spi_cfg, spi_event_ppi_handler, NULL);
    APP_ERROR_CHECK(err_code);

    nrf_drv_spi_xfer_desc_t xfer = NRF_DRV_SPI_XFER_TRX(m_tx_data, 10, m_rx_data, 10);
    uint32_t flags = NRF_DRV_SPI_FLAG_HOLD_XFER; // | NRF_DRV_SPI_FLAG_REPEATED_XFER
    err_code = nrf_drv_spi_xfer(&m_spi_master, &xfer, flags);
    //err_code = nrf_drv_spi_xfer(&m_spi_master, &xfer, NRF_DRV_SPI_FLAG_HOLD_XFER);
    // SPIM is now configured and ready to be started.


    /* ppi setup */
    err_code = nrf_drv_ppi_init();
    APP_ERROR_CHECK(err_code);

    /* event and task setup */

    uint32_t spi_sample_task_addr = nrf_drv_spi_start_task_get(&m_spi_master);
    
    // ppi 1 setup : timer2 start by timer 1 & timer 1 clear
    err_code = nrf_drv_ppi_channel_alloc(&m_ppi_channel_1);
    APP_ERROR_CHECK(err_code);

    err_code = nrf_drv_ppi_channel_assign(m_ppi_channel_1,
                                          gpio_event_addr,
                                          spi_sample_task_addr);
    APP_ERROR_CHECK(err_code);



    
    /* ppi & timer 1 enable */
    err_code = nrf_drv_ppi_channel_enable(m_ppi_channel_1);
    APP_ERROR_CHECK(err_code);


}

However, gpiote event handler are not called when start pins toggled from high to low.

void gpio_event_handler(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action)
{
  NRF_LOG_ERROR("Event!");
}

Did I make mistake something?

Best regards,

Seunghun.

Related