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

Question about ppi: get a state

static void setup_mux_input_channel_selection(void)
{
	ret_code_t err_code;

	uint32_t compare_evt_addr_0, compare_evt_addr_1, compare_evt_addr_2, compare_evt_addr_3;
	uint32_t compare_evt_addr_4, compare_evt_addr_5;
	uint32_t gpiote_task_addr_0, gpiote_task_addr_1, gpiote_task_addr_2, gpiote_task_addr_3, gpiote_task_addr_4;

	/* setup timer compare events and gpiote task */
	compare_evt_addr_0 = nrf_drv_timer_event_address_get(&m_timer_1, NRF_TIMER_EVENT_COMPARE0);
	gpiote_task_addr_0 = nrf_drv_gpiote_out_task_addr_get(MUX_INPUT_2); //12us: M2 high

	compare_evt_addr_1 = nrf_drv_timer_event_address_get(&m_timer_1, NRF_TIMER_EVENT_COMPARE1);
	gpiote_task_addr_1 = nrf_drv_gpiote_out_task_addr_get(MUX_INPUT_3); //24us: M3 high

	compare_evt_addr_2 = nrf_drv_timer_event_address_get(&m_timer_1, NRF_TIMER_EVENT_COMPARE2);
	gpiote_task_addr_2 = nrf_drv_gpiote_out_task_addr_get(MUX_INPUT_2); //36us: M2 low

	compare_evt_addr_3 = nrf_drv_timer_event_address_get(&m_timer_1, NRF_TIMER_EVENT_COMPARE3);
	gpiote_task_addr_4 = nrf_drv_gpiote_out_task_addr_get(MUX_INPUT_3); //48us: M3 low 
        

	/* link task and event via ppi channels */
	err_code = nrf_drv_ppi_channel_assign(ppi_channel_0, compare_evt_addr_0, gpiote_task_addr_0);
	APP_ERROR_CHECK(err_code);

	err_code = nrf_drv_ppi_channel_assign(ppi_channel_1, compare_evt_addr_1, gpiote_task_addr_1);
	APP_ERROR_CHECK(err_code);

	err_code = nrf_drv_ppi_channel_assign(ppi_channel_2, compare_evt_addr_2, gpiote_task_addr_2);
	APP_ERROR_CHECK(err_code);

	err_code = nrf_drv_ppi_channel_assign(ppi_channel_4, compare_evt_addr_3, gpiote_task_addr_4);
	APP_ERROR_CHECK(err_code);
        

	/* enable ppi channels */
	err_code = nrf_drv_ppi_channel_enable(ppi_channel_0);
	APP_ERROR_CHECK(err_code);

	err_code = nrf_drv_ppi_channel_enable(ppi_channel_1);
	APP_ERROR_CHECK(err_code);

	err_code = nrf_drv_ppi_channel_enable(ppi_channel_2);
	APP_ERROR_CHECK(err_code);

	err_code = nrf_drv_ppi_channel_enable(ppi_channel_3);
	APP_ERROR_CHECK(err_code);

	err_code = nrf_drv_ppi_channel_enable(ppi_channel_4);
	APP_ERROR_CHECK(err_code);     
}

Hello all, I have question about ppi.

Like code shown above, I'm using ppi.

Here, MUX_INPUT_2  and MUX_INPUT_3 are name of pin.

I'm changing their state: from low to high, or high to low by ppi, automatically.

What I want to ask here is, is there any solution that I can read the state?

For example, after gpiote_task_addr_0, int state = 0 and after gpiote_task_addr_1, int state = 1, ... etc.

I want to read a state by number and read it.

If it is not possible, can you recommend other way for state recognition?

Thanks!

Related