I am building a TWI slave with nRF52832.
I am attaching a part of twis_event_handler.
I can read even a 1-byte register value by executing i2c_read_register(SLAVE_ADDR, 0x11, &data); from the master side, but when I execute i2c_write_register(SLAVE_ADDR, 0x14, 0x05);
I can write the register address 0x14 to a variable, but I cannot write the register address 0x14.
The idea is to write the address with NRFX_TWIS_EVT_WRITE_REQ of twis_event_handler when i2c_write_register(SLAVE_ADDR, 0x14, 0x05); and then write the register with NRFX_TWIS_EVT_WRITE_DONE, but even if I execute err_code = nrf_drv_twis_rx_prepare(&m_twis, &m_twi_register[m_register_address], 1); the value of m_twi_register[0x14] does not change.
Is this the right idea?
void twis_event_handler(nrf_drv_twis_evt_t const * p_event)
{
ret_code_t err_code;
switch (p_event->type)
{
case NRFX_TWIS_EVT_WRITE_REQ:
err_code = nrf_drv_twis_rx_prepare(&m_twis, &m_register_address, 1);
APP_ERROR_CHECK(err_code);
break;
case NRFX_TWIS_EVT_READ_REQ:
if (m_register_address + p_event->data.rx_amount > TWI_BUFFER_SIZE)
{
printf("Error: Attempt to read outside of buffer\n");
return;
}
err_code = nrfx_twis_tx_prepare(&m_twis, &m_twi_register[m_register_address], p_event->data.rx_amount); // 複数バイト送信
APP_ERROR_CHECK(err_code);
m_register_address++;
break;
case NRFX_TWIS_EVT_WRITE_DONE:
if (p_event->data.tx_amount == 1)
{
uint32_t size = p_event->data.tx_amount;
err_code = nrf_drv_twis_rx_prepare(&m_twis, &m_twi_register[m_register_address], 1);
APP_ERROR_CHECK(err_code);
}