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

Two different CC timer for 2 GPIO tasks

Hi Nordic, 

I am interested to use one timer (NRF_TIMER3) and 2 channels of the timer counter CC  to generate  a gpioe task for toggleling a pin. This is the current code that I have. 

    nrf_gpiote_task_configure(3, 12, NRF_GPIOTE_POLARITY_TOGGLE,  NRF_GPIOTE_INITIAL_VALUE_LOW);
    nrf_gpiote_task_enable(3);
    nrf_gpiote_task_configure(4, 24, NRF_GPIOTE_POLARITY_TOGGLE,  NRF_GPIOTE_INITIAL_VALUE_HIGH);
    nrf_gpiote_task_enable(4);
    

    nrf_ppi_channel_endpoint_setup(  NRF_PPI_CHANNEL2,  (uint32_t) nrf_timer_event_address_get(NRF_TIMER3, NRF_TIMER_EVENT_COMPARE3), nrf_gpiote_task_addr_get(NRF_GPIOTE_TASKS_OUT_3));
    nrf_ppi_channel_enable(NRF_PPI_CHANNEL2); 
    
    nrf_ppi_channel_endpoint_setup(   NRF_PPI_CHANNEL3, (uint32_t) nrf_timer_event_address_get(NRF_TIMER3, NRF_TIMER_EVENT_COMPARE0), nrf_gpiote_task_addr_get(NRF_GPIOTE_TASKS_OUT_4));
      nrf_ppi_channel_enable(NRF_PPI_CHANNEL3);        
  
    NRF_TIMER3->TASKS_STOP  = 1;
    NRF_TIMER3->TASKS_CLEAR = 1;
    NRF_TIMER3->PRESCALER   = 0;
    NRF_TIMER3->BITMODE     = TIMER_BITMODE_BITMODE_32Bit << TIMER_BITMODE_BITMODE_Pos;
    NRF_TIMER3->CC[0]       = 4000; //TIME_SYNC_TIMER_MAX_VAL;
    NRF_TIMER3->CC[1]       = 0xFFFFFFFF;
    NRF_TIMER3->CC[2]       = 0xFFFFFFFF;
    NRF_TIMER3->CC[3]       = 2000; //0xFFFFFFFF;
    NRF_TIMER3->CC[4]       = 4000 ; // Only used for debugging purposes such as pin toggling

    NRF_TIMER3->SHORTS     = TIMER_SHORTS_COMPARE3_CLEAR_Msk ;
    NRF_TIMER3->SHORTS     |= TIMER_SHORTS_COMPARE0_CLEAR_Msk;
    
    NRF_TIMER3->TASKS_START = 1;  

It should be able to toggle both pins (12 and 24) but it just toggles one of them. My assumption is that it is related with the NRF_TIMER3->SHORTS that I'm using. 

which are the correct values that I should use here? or there is any other error that I'm missing?  

Related