nrf_twi_mngr_transfer_t and const write data

I am trying to populate a nrf_twi_mngr_transfer_t at runtime depending on chunks of an input file that I'm pushing to i2c. 

nrf_twi_mngr_transfer_t const write_cfg_transfers[] = {
   NRF_TWI_MNGR_WRITE(bytes[0] >> 1, &data, i-1, 0),
};
Then I get a build error - 

error: initializer element is not constant

How is this done? 

I've tried using the twi instance from the twi_mngr struct, I can see it on the wire, but I get a hardfault on invoking the callback (likley undefined at this point)

ret_code_t err_code = nrf_drv_twi_tx(&(m_nrf_twi_mngr.twi), bytes[0] >> 1, data, i-1, false);
Parents
  • For more context - I've inherited production code that is using TWI MNGR everywhere. 
    It would take weeks to rewrite this using one of the other API's. 

    Is there a magic combination of SDK_CONFIG options to use the TWIM driver with twi_mngr and nrf_drv_twi ?
    It looks like if I can manage to define TWIM_PRESENT, the const qualifier should be dropped. 


    //If TWIM is present buffers can only be in RAM
    /*lint -save -e491*/

    /**
    * @brief Macro checking if buffers should be stored in RAM.
    */
    #ifndef NRF_TWI_MNGR_BUFFERS_IN_RAM
    #define NRF_TWI_MNGR_BUFFERS_IN_RAM defined(TWIM_PRESENT)
    #endif

    /**
    * @brief Modifier used in array declaration for TWI Manager.
    *
    * @note For TWI peripheral array can be const, for TWIM array has to be located in RAM.
    */
    #if NRF_TWI_MNGR_BUFFERS_IN_RAM
    #define NRF_TWI_MNGR_BUFFER_LOC_IND
    #else
    #define NRF_TWI_MNGR_BUFFER_LOC_IND const
    #endif
Reply
  • For more context - I've inherited production code that is using TWI MNGR everywhere. 
    It would take weeks to rewrite this using one of the other API's. 

    Is there a magic combination of SDK_CONFIG options to use the TWIM driver with twi_mngr and nrf_drv_twi ?
    It looks like if I can manage to define TWIM_PRESENT, the const qualifier should be dropped. 


    //If TWIM is present buffers can only be in RAM
    /*lint -save -e491*/

    /**
    * @brief Macro checking if buffers should be stored in RAM.
    */
    #ifndef NRF_TWI_MNGR_BUFFERS_IN_RAM
    #define NRF_TWI_MNGR_BUFFERS_IN_RAM defined(TWIM_PRESENT)
    #endif

    /**
    * @brief Modifier used in array declaration for TWI Manager.
    *
    * @note For TWI peripheral array can be const, for TWIM array has to be located in RAM.
    */
    #if NRF_TWI_MNGR_BUFFERS_IN_RAM
    #define NRF_TWI_MNGR_BUFFER_LOC_IND
    #else
    #define NRF_TWI_MNGR_BUFFER_LOC_IND const
    #endif
Children
No Data
Related