TWI slave

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);
            }

Parents Reply Children
No Data
Related