This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

It looks like "SPI event handler" is not processed when we control slave select pin manually

Hi,

we have interfaced Accelerometer Module with NRF52832 using SPI Communication.
Psuedo code of code snippet is :


<<Place the snippet here>>
Expected:
After nrf_spi_transfer with accelerometer
1. spi event handler is processed
2. SPIXferdone flasg set to true
3. Come out from while loop

Actual:
Struggled in while loop

Observation:
It looks like SPI event handler is not processed.
so SPIXferdone not updated to true and Struggled in while loop

Please guide me what was the cause of issue

Please guide us

Parents
  • SRINI

    Hi,

    we have interfaced Accelerometer Module with NRF52832 using SPI Communication.
    Psuedo code of code snippet is :

    SpiXferDone = true;
    }
    acc_cs_low();
    nrf_drv_spi_transfer()
    while (!SpiXferDone) { printf("spi transfer is in progress"); }
    acc_cs_high();


    Expected:
    After nrf_spi_transfer with accelerometer
    1. spi event handler is processed
    2. SPIXferdone flasg set to true
    3. Come out from while loop

    Actual:
    Struggled in while loop

    Observation:
    It looks like SPI event handler is not processed.
    so SPIXferdone not updated to true and Struggled in while loop

    Please guide me what was the cause of issue

    Please guide us

  • Hi,

    SpiXferDone = true;
    }
    acc_cs_low();
    nrf_drv_spi_transfer()
    while (!SpiXferDone) { printf("spi transfer is in progress"); }
    acc_cs_high();

    I assume that the snippet you shared is what's being done in main(). Is the application actually entering the while loop? As you've shared it will not enter it because SpiXferDone is not false initially, unless you set it to false in acc_cs_low(). It would be much easier to help you if you actually shared your code.

    regards

    Jared 

  • Jared,
    Thanks for the response.
    Sorry for missed portion of code.
    code snippet is:
    SPI Event Handler:
    void spi_event_handler(nrf_drv_spi_evt_t const * p_event, void *p_context)
    {
    SpiXferDone = true;
    }
    Application Code:
    SpiXferDone = false;
    acc_cs_low();
    nrf_drv_spi_transfer();
    while (!SpiXferDone)
    {
    printf("spi transfer is in progress");
    }
    based on above snippet,
    Expected:
    After nrf_spi_transfer with accelerometer
    1. spi event handler is processed
    2. SPIXferdone flag is set to true
    3. Come out from while loop
    Actual:
    Entered into while loop
    but Struggled in while loop
    Observation:
    It looks like spi event handler is not processed.
    so SPIXferdone not updated to true and Struggled in while loop
    Please guide us.
Reply
  • Jared,
    Thanks for the response.
    Sorry for missed portion of code.
    code snippet is:
    SPI Event Handler:
    void spi_event_handler(nrf_drv_spi_evt_t const * p_event, void *p_context)
    {
    SpiXferDone = true;
    }
    Application Code:
    SpiXferDone = false;
    acc_cs_low();
    nrf_drv_spi_transfer();
    while (!SpiXferDone)
    {
    printf("spi transfer is in progress");
    }
    based on above snippet,
    Expected:
    After nrf_spi_transfer with accelerometer
    1. spi event handler is processed
    2. SPIXferdone flag is set to true
    3. Come out from while loop
    Actual:
    Entered into while loop
    but Struggled in while loop
    Observation:
    It looks like spi event handler is not processed.
    so SPIXferdone not updated to true and Struggled in while loop
    Please guide us.
Children
Related