<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>GPIOET interrupt and PPI in S110</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/33185/gpioet-interrupt-and-ppi-in-s110</link><description>Hi， 
 I want to measure the time of two signals to calculate the speed and sent the data with BLE. I find the SD effect the GPIOTE_interrupt sometimes, when I try to use GPIOTE and timer to calcluate the time . So I use the PPI function, connect the NRF_GPIOTE</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Thu, 19 Apr 2018 15:11:21 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/33185/gpioet-interrupt-and-ppi-in-s110" /><item><title>RE: GPIOET interrupt and PPI in S110</title><link>https://devzone.nordicsemi.com/thread/129025?ContentTypeID=1</link><pubDate>Thu, 19 Apr 2018 15:11:21 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:b3740e3f-89c4-4efe-b748-74ab55072fcb</guid><dc:creator>AmbystomaLabs</dc:creator><description>&lt;p&gt;So to be clear, what you are saying is that you are getting the correct timing values now but the SD stops working, correct?&lt;/p&gt;
&lt;p&gt;So I don&amp;#39;t have to read through your code and guess, how many gpiote ISR&amp;#39;s are you generating per second?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: GPIOET interrupt and PPI in S110</title><link>https://devzone.nordicsemi.com/thread/129023?ContentTypeID=1</link><pubDate>Thu, 19 Apr 2018 14:58:02 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:b63cf2d2-35de-4647-b4d1-96742d6d405d</guid><dc:creator>Linlei</dc:creator><description>&lt;p&gt;When I send signals to the pins,&amp;nbsp; I can get the datas that I want. But&amp;nbsp; then the&amp;nbsp;bluetooth&amp;nbsp;will disconnect , if the phone connect the board with BLE. And I cannot connect again. Looks the GPIOTE interrupt that I add in the GPIOTE_IRQHandle in the nrf_drv_gpiote.c&amp;nbsp; cause the SD run out.&amp;nbsp; How should I use the GPIOTE interrupt&amp;nbsp; and does not affect the SD to run??&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;void GPIOTE_IRQHandler(void)
{
    uint32_t status = 0;
    uint32_t input = 0;
//I add the GPIOTE IN[0]and[1]
		if ((NRF_GPIOTE-&amp;gt;EVENTS_IN[0] == 1) &amp;amp;&amp;amp; (NRF_GPIOTE-&amp;gt;INTENSET &amp;amp; GPIOTE_INTENSET_IN0_Msk))
    {
        NRF_GPIOTE-&amp;gt;EVENTS_IN[0] = 0; //&amp;#214;&amp;#208;&amp;#182;&amp;#207;&amp;#202;&amp;#194;&amp;#188;&amp;#254;&amp;#199;&amp;#229;&amp;#193;&amp;#227;.
				if(capture_state==1)
				{
					  NRF_PPI-&amp;gt;CHENCLR = (PPI_CHEN_CH4_Enabled &amp;lt;&amp;lt; PPI_CHEN_CH4_Pos) ;
					capture_state=2; 
					nrf_gpio_pin_clear(20); 
				}		
	   }
		
		 if ((NRF_GPIOTE-&amp;gt;EVENTS_IN[1] == 1) &amp;amp;&amp;amp; (NRF_GPIOTE-&amp;gt;INTENSET &amp;amp; GPIOTE_INTENSET_IN1_Msk))
    {
				
        NRF_GPIOTE-&amp;gt;EVENTS_IN[1] = 0; //&amp;#214;&amp;#208;&amp;#182;&amp;#207;&amp;#202;&amp;#194;&amp;#188;&amp;#254;&amp;#199;&amp;#229;&amp;#193;&amp;#227;.
				if(capture_state==2)
				{	
					 NRF_PPI-&amp;gt;CHENCLR = (PPI_CHEN_CH5_Enabled &amp;lt;&amp;lt; PPI_CHEN_CH5_Pos) ;
					NRF_TIMER2-&amp;gt;TASKS_CAPTURE[0] = 1;
					shoot_flag=1;						
	//				capture_time= NRF_TIMER2-&amp;gt;CC[0];
					nrf_gpio_pin_clear(20);
					lock_time=10; 
					capture_state=3;
					NRF_TIMER2-&amp;gt;TASKS_START = 1;					
				}
	//		  NRF_TIMER2-&amp;gt;TASKS_STOP = 1;		//&amp;#205;&amp;#163;&amp;#214;&amp;#185;&amp;#182;&amp;#168;&amp;#202;&amp;#177;&amp;#198;&amp;#247;
	//		NRF_TIMER2-&amp;gt;TASKS_CAPTURE[0] = 1;		//&amp;#178;&amp;#182;&amp;#215;&amp;#189;&amp;#200;&amp;#206;&amp;#206;&amp;#241;
	//		capture_time= NRF_TIMER2-&amp;gt;CC[0];		//&amp;#187;&amp;#241;&amp;#181;&amp;#195;&amp;#202;&amp;#177;&amp;#188;&amp;#228;		
	    }
			if(capture_state==3) lock_time=10;
//the end of my code

    /* collect status of all GPIOTE pin events. Processing is done once all are collected and cleared.*/
    uint32_t i;
    
    //I modified the events 0-3 to 2-3
   nrf_gpiote_events_t event = NRF_GPIOTE_EVENTS_IN_2;// nrf_gpiote_events_t event = NRF_GPIOTE_EVENTS_IN_0;			//&amp;#180;&amp;#211;&amp;#202;&amp;#194;&amp;#188;&amp;#254;0&amp;#191;&amp;#170;&amp;#202;&amp;#188;
    uint32_t mask = (uint32_t)NRF_GPIOTE_INT_IN2_MASK;//uint32_t mask = (uint32_t)NRF_GPIOTE_INT_IN0_MASK;			//&amp;#214;&amp;#208;&amp;#182;&amp;#207;0&amp;#177;&amp;#234;&amp;#214;&amp;#190;&amp;#206;&amp;#187; mask&amp;#177;&amp;#234;&amp;#214;&amp;#190;&amp;#163;&amp;#172;&amp;#198;&amp;#240;&amp;#202;&amp;#188;&amp;#181;&amp;#196;&amp;#181;&amp;#216;&amp;#214;&amp;#183;
    for (i = 2; i &amp;lt; NUMBER_OF_GPIO_TE; i++)//for (i = 2; i &amp;lt; NUMBER_OF_GPIO_TE; i++)						//0-4
    {
        if (nrf_gpiote_event_is_set(event) &amp;amp;&amp;amp; nrf_gpiote_int_is_enabled(mask))			//&amp;#200;&amp;#231;&amp;#185;&amp;#251;&amp;#202;&amp;#194;&amp;#188;&amp;#254;&amp;#210;&amp;#209;&amp;#190;&amp;#173;&amp;#201;&amp;#232;&amp;#214;&amp;#195;&amp;#163;&amp;#172;&amp;#214;&amp;#208;&amp;#182;&amp;#207;&amp;#202;&amp;#185;&amp;#196;&amp;#220;&amp;#163;&amp;#172;&amp;#199;&amp;#229;&amp;#179;&amp;#253;&amp;#177;&amp;#234;&amp;#214;&amp;#190;&amp;#163;&amp;#172;&amp;#215;&amp;#180;&amp;#204;&amp;#172;&amp;#188;&amp;#199;&amp;#194;&amp;#188;&amp;#196;&amp;#199;&amp;#208;&amp;#169;&amp;#201;&amp;#232;&amp;#182;&amp;#168;&amp;#193;&amp;#203;&amp;#202;&amp;#194;&amp;#188;&amp;#254;
        {
            nrf_gpiote_event_clear(event);
            status |= mask;
        }
        mask &amp;lt;&amp;lt;= 1;
        /* Incrementing to next event, utilizing the fact that events are grouped together
         * in ascending order. */
       event = (nrf_gpiote_events_t)((uint32_t)event + sizeof(uint32_t));		//&amp;#202;&amp;#194;&amp;#188;&amp;#254;&amp;#181;&amp;#216;&amp;#214;&amp;#183;&amp;#210;&amp;#198;&amp;#206;&amp;#187;
    }

    /* collect PORT status event, if event is set read pins state. Processing is postponed to the
     * end of interrupt. */
    if (nrf_gpiote_event_is_set(NRF_GPIOTE_EVENTS_PORT))		//&amp;#200;&amp;#231;&amp;#185;&amp;#251;&amp;#182;&amp;#203;&amp;#191;&amp;#218;&amp;#202;&amp;#194;&amp;#188;&amp;#254;&amp;#201;&amp;#232;&amp;#182;&amp;#168;
    {
        nrf_gpiote_event_clear(NRF_GPIOTE_EVENTS_PORT);			//&amp;#199;&amp;#229;&amp;#179;&amp;#253;
        status |= (uint32_t)NRF_GPIOTE_INT_PORT_MASK;				//&amp;#215;&amp;#180;&amp;#204;&amp;#172;&amp;#188;&amp;#199;&amp;#194;&amp;#188;
        input = nrf_gpio_pins_read();												//&amp;#210;&amp;#253;&amp;#189;&amp;#197;&amp;#182;&amp;#193;&amp;#200;&amp;#161;
    }

    // Process pin events. 
    if (status &amp;amp; NRF_GPIOTE_INT_IN_MASK)										//&amp;#214;&amp;#208;&amp;#182;&amp;#207;&amp;#202;&amp;#228;&amp;#200;&amp;#235;&amp;#177;&amp;#234;&amp;#214;&amp;#190;&amp;#211;&amp;#235;&amp;#214;&amp;#208;&amp;#182;&amp;#207;&amp;#202;&amp;#228;&amp;#200;&amp;#235;&amp;#177;&amp;#234;&amp;#214;&amp;#190;&amp;#189;&amp;#248;&amp;#208;&amp;#208;&amp;#177;&amp;#200;&amp;#189;&amp;#207;&amp;#163;&amp;#172;&amp;#200;&amp;#231;&amp;#185;&amp;#251;&amp;#211;&amp;#208;&amp;#202;&amp;#228;&amp;#200;&amp;#235;&amp;#177;&amp;#234;&amp;#214;&amp;#190;
    {
        mask = (uint32_t)NRF_GPIOTE_INT_IN2_MASK;//mask = (uint32_t)NRF_GPIOTE_INT_IN0_MASK;						//&amp;#180;&amp;#211;IN0&amp;#181;&amp;#196;&amp;#214;&amp;#208;&amp;#182;&amp;#207;&amp;#191;&amp;#170;&amp;#202;&amp;#188;&amp;#163;&amp;#172;&amp;#194;&amp;#214;&amp;#209;&amp;#175;4&amp;#180;&amp;#206;
        for (i = 2; i &amp;lt; NUMBER_OF_GPIO_TE; i++)//for (i = 0; i &amp;lt; NUMBER_OF_GPIO_TE; i++)
        {
            if (mask &amp;amp; status)															//&amp;#200;&amp;#231;&amp;#185;&amp;#251;&amp;#214;&amp;#208;&amp;#182;&amp;#207;&amp;#177;&amp;#234;&amp;#214;&amp;#190;&amp;#186;&amp;#205;&amp;#202;&amp;#185;&amp;#196;&amp;#220;&amp;#215;&amp;#180;&amp;#204;&amp;#172;
            {
                nrf_drv_gpiote_pin_t pin = nrf_gpiote_event_pin_get(i);				//		&amp;#182;&amp;#193;&amp;#200;&amp;#161;GPIOTE[i]&amp;#182;&amp;#212;&amp;#211;&amp;#166;&amp;#181;&amp;#196;&amp;#202;&amp;#199;&amp;#196;&amp;#196;&amp;#184;&amp;#246;&amp;#210;&amp;#253;&amp;#189;&amp;#197;
                nrf_gpiote_polarity_t polarity = nrf_gpiote_event_polarity_get(i);			//  &amp;#182;&amp;#193;&amp;#200;&amp;#161;GPIOTE[i]&amp;#201;&amp;#232;&amp;#214;&amp;#195;&amp;#181;&amp;#196;&amp;#202;&amp;#199;&amp;#202;&amp;#178;&amp;#195;&amp;#180;&amp;#188;&amp;#171;&amp;#208;&amp;#212; 
                nrf_drv_gpiote_evt_handler_t handler = channel_handler_get(i);					//m_cb.handlers[channel]
                handler(pin,polarity);											//&amp;#180;&amp;#166;&amp;#192;&amp;#237;&amp;#210;&amp;#253;&amp;#189;&amp;#197;&amp;#163;&amp;#172;&amp;#188;&amp;#171;&amp;#208;&amp;#212;  
            }
            mask &amp;lt;&amp;lt;= 1;																			//&amp;#210;&amp;#198;&amp;#206;&amp;#187;&amp;#163;&amp;#172;&amp;#180;&amp;#166;&amp;#192;&amp;#237;&amp;#207;&amp;#194;&amp;#210;&amp;#187;&amp;#184;&amp;#246;
        }
    }

    if (status &amp;amp; (uint32_t)NRF_GPIOTE_INT_PORT_MASK)				//&amp;#197;&amp;#208;&amp;#182;&amp;#207;&amp;#182;&amp;#203;&amp;#191;&amp;#218;&amp;#177;&amp;#234;&amp;#214;&amp;#190;&amp;#202;&amp;#199;&amp;#183;&amp;#241;&amp;#202;&amp;#185;&amp;#196;&amp;#220;
    {
        // Process port event. 												//&amp;#180;&amp;#166;&amp;#192;&amp;#237;&amp;#182;&amp;#203;&amp;#191;&amp;#218;&amp;#202;&amp;#194;&amp;#188;&amp;#254;
        for (i = 0; i &amp;lt; GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS; i++)
        {
            if (m_cb.port_handlers_pins[i] != PIN_NOT_USED)
            {
                uint8_t pin_and_sense = m_cb.port_handlers_pins[i];
                nrf_drv_gpiote_pin_t pin = (pin_and_sense &amp;amp; ~SENSE_FIELD_MASK);
                nrf_drv_gpiote_evt_handler_t handler = channel_handler_get(channel_port_get(pin));
                if (handler)
                {
                    nrf_gpiote_polarity_t polarity =
                            (nrf_gpiote_polarity_t)((pin_and_sense &amp;amp; SENSE_FIELD_MASK) &amp;gt;&amp;gt; SENSE_FIELD_POS);
                    mask = 1 &amp;lt;&amp;lt; pin;
                    nrf_gpio_pin_sense_t sense = nrf_gpio_pin_sense_get(pin);
                    if (((mask &amp;amp; input) &amp;amp;&amp;amp; (sense==NRF_GPIO_PIN_SENSE_HIGH)) ||
                       (!(mask &amp;amp; input) &amp;amp;&amp;amp; (sense==NRF_GPIO_PIN_SENSE_LOW))  )
                    {
                        if (polarity == NRF_GPIOTE_POLARITY_TOGGLE)
                        {
                            nrf_gpio_pin_sense_t next_sense = (sense == NRF_GPIO_PIN_SENSE_HIGH) ?
                                    NRF_GPIO_PIN_SENSE_LOW : NRF_GPIO_PIN_SENSE_HIGH;
                            nrf_gpio_cfg_sense_set(pin, next_sense);
                        }
                        handler(pin, polarity);
                    }
                }
            }
        }
    }
}&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: GPIOET interrupt and PPI in S110</title><link>https://devzone.nordicsemi.com/thread/128475?ContentTypeID=1</link><pubDate>Mon, 16 Apr 2018 12:33:13 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:25753d68-57f4-415f-adbb-5e3cdf9d9608</guid><dc:creator>Linlei</dc:creator><description>&lt;p&gt;Ambystomalabs, thank you very much for your answer.&amp;nbsp; Now, I am trying the SD8.0 . I know I use the new SD must match the API. I tested the example program &amp;quot;ble_app_uart&amp;quot;,&amp;nbsp; because it is close to that I want. The example program works well on my board.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The APP is very simple. It get the time of signals on the two pins, calculate and send the datas out by Bluetooth and uart. So I don&amp;#39;t worry about the bluetooth traffic will effect the measurement.&amp;nbsp; Now I can use the PPI,it can work. And I can set the interrupt of GPIOTE. I add my codes in the&amp;nbsp;GPIOTE_IRQHandle()&amp;nbsp; in the nrf_drv_gpiote.c .&amp;nbsp;&amp;nbsp;Looks, it can work well.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;void GPIOTE_IRQHandler(void)
{
    uint32_t status = 0;
    uint32_t input = 0;
    //these are my codes
	if ((NRF_GPIOTE-&amp;gt;EVENTS_IN[0] == 1) &amp;amp;&amp;amp; (NRF_GPIOTE-&amp;gt;INTENSET &amp;amp; GPIOTE_INTENSET_IN0_Msk))
    {
        NRF_GPIOTE-&amp;gt;EVENTS_IN[0] = 0; //&amp;#214;&amp;#208;&amp;#182;&amp;#207;&amp;#202;&amp;#194;&amp;#188;&amp;#254;&amp;#199;&amp;#229;&amp;#193;&amp;#227;.
		if(capture_state==1)
		{
			//	NRF_TIMER2-&amp;gt;TASKS_START = 1; 
			//NRF_TIMER2-&amp;gt;TASKS_CLEAR = 1; 
		    capture_state=2; 
		}		
	}
		
	if ((NRF_GPIOTE-&amp;gt;EVENTS_IN[1] == 1) &amp;amp;&amp;amp; (NRF_GPIOTE-&amp;gt;INTENSET &amp;amp; GPIOTE_INTENSET_IN1_Msk))
    {
				
        NRF_GPIOTE-&amp;gt;EVENTS_IN[1] = 0; //&amp;#214;&amp;#208;&amp;#182;&amp;#207;&amp;#202;&amp;#194;&amp;#188;&amp;#254;&amp;#199;&amp;#229;&amp;#193;&amp;#227;.
				if(capture_state==2)
				{		
					NRF_TIMER2-&amp;gt;TASKS_CAPTURE[0] = 1;
					shoot_flag=1;						
					capture_time= NRF_TIMER2-&amp;gt;CC[0];
					nrf_gpio_pin_clear(20);
					lock_time=10; 
					capture_state=3;
					NRF_TIMER2-&amp;gt;TASKS_START = 1;					
				}
	//		  NRF_TIMER2-&amp;gt;TASKS_STOP = 1;		//&amp;#205;&amp;#163;&amp;#214;&amp;#185;&amp;#182;&amp;#168;&amp;#202;&amp;#177;&amp;#198;&amp;#247;
	//		NRF_TIMER2-&amp;gt;TASKS_CAPTURE[0] = 1;		//&amp;#178;&amp;#182;&amp;#215;&amp;#189;&amp;#200;&amp;#206;&amp;#206;&amp;#241;
	//		capture_time= NRF_TIMER2-&amp;gt;CC[0];		//&amp;#187;&amp;#241;&amp;#181;&amp;#195;&amp;#202;&amp;#177;&amp;#188;&amp;#228;		
	    }
			if(capture_state==3) lock_time=10;
			

    /* collect status of all GPIOTE pin events. Processing is done once all are collected and cleared.*/
    uint32_t i;
   nrf_gpiote_events_t event = NRF_GPIOTE_EVENTS_IN_2;// nrf_gpiote_events_t event = NRF_GPIOTE_EVENTS_IN_0;			//&amp;#180;&amp;#211;&amp;#202;&amp;#194;&amp;#188;&amp;#254;0&amp;#191;&amp;#170;&amp;#202;&amp;#188;
    uint32_t mask = (uint32_t)NRF_GPIOTE_INT_IN2_MASK;//uint32_t mask = (uint32_t)NRF_GPIOTE_INT_IN0_MASK;			//&amp;#214;&amp;#208;&amp;#182;&amp;#207;0&amp;#177;&amp;#234;&amp;#214;&amp;#190;&amp;#206;&amp;#187; mask&amp;#177;&amp;#234;&amp;#214;&amp;#190;&amp;#163;&amp;#172;&amp;#198;&amp;#240;&amp;#202;&amp;#188;&amp;#181;&amp;#196;&amp;#181;&amp;#216;&amp;#214;&amp;#183;
    for (i = 2; i &amp;lt; NUMBER_OF_GPIO_TE; i++)//for (i = 2; i &amp;lt; NUMBER_OF_GPIO_TE; i++)						//0-4
   ...............&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: GPIOET interrupt and PPI in S110</title><link>https://devzone.nordicsemi.com/thread/128360?ContentTypeID=1</link><pubDate>Sun, 15 Apr 2018 15:30:14 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:6ce9f0e2-f467-4158-9734-8fb09ac2093e</guid><dc:creator>AmbystomaLabs</dc:creator><description>&lt;p&gt;I meant this as a general statement, your code shows you capture in gpiote: &amp;quot;For the timings you have specified you can&amp;#39;t possibly do it in handlers.&amp;nbsp; Just pushing the registers to the stack and moving the program counter takes about 12 clocks, then depending on how many other things are queued up ahead of you will cause your ISR to be serviced later.&lt;/p&gt;
&lt;p&gt;APP ISR&amp;#39;s have a much lower priority than the SD.&amp;nbsp; This is required to satisfy BLE radio protocol requirements. Advertisements alone will can cause delays of up to 1msec or more. Heavy BLE traffic will cause more frequent delays.&lt;/p&gt;
&lt;p&gt;The basic timing of the Pclk is 16MHz. Most activities take about 2 clocks so the min resolution of the timers is functionally 0.125usec.&amp;quot;&lt;/p&gt;
&lt;p&gt;In order to achieve this you need to use PPI/GPIOTE to start and stop/capture the timers directly which I see you are doing in your code.&amp;nbsp; You don&amp;#39;t want to have the shorts enabled since you are counting and it appears you have that correct.&lt;/p&gt;
&lt;p&gt;Your prescaler of 4 will give a 1MHz pclk or 1usec resolution.&lt;/p&gt;
&lt;p&gt;You need to make sure that HFCLK is on all the time. Offhand I can&amp;#39;t remember if using a timer forces the HF_EXT to run. You should double check the nrf51 series reference manual on this. If not you can either start it manually whenever you are doing your timing events or you can tell the SD to keep it on all the time.&amp;nbsp; There are plenty of notes in the devzone on doing this just look it up. Otherwise the SD may put it on HFRC instead of HFEXT when your timer is running.&lt;/p&gt;
&lt;p&gt;The problem I see happening in your solution is that your external event happens, the timer starts, event stops timer stops and there is enough delay that your don&amp;#39;t get into the ISR fast enough to get the counter register and instead you get into the isr while the timer is running again. If you don&amp;#39;t mind throwing away some data points just look to see if the timer is running when you are in the handler to prevent this mistake.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: GPIOET interrupt and PPI in S110</title><link>https://devzone.nordicsemi.com/thread/128358?ContentTypeID=1</link><pubDate>Sun, 15 Apr 2018 15:01:47 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:7ceb8afc-fa68-4285-8d75-f59265292ff0</guid><dc:creator>AmbystomaLabs</dc:creator><description>&lt;p&gt;You only use the SD that comes with the SDK. So, not really an issue of using an old one, just using the correct one. SDK&amp;#39;s and SD&amp;#39;s are released in pairs.&amp;nbsp; The SD&amp;#39;s are in the components folder.&amp;nbsp; Only by using the matching SD will the libraries and API calls work out. The API&amp;#39;s are constantly changing and being improved on. Thus each new SD gets a new SDK. When one moves a project from one SDK to a later version (only if required for features, it is not normally necessary to do this) then you need to do some extensive reading of the SD release notes to make sure you are using the correct API&amp;#39;s as they may be different.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: GPIOET interrupt and PPI in S110</title><link>https://devzone.nordicsemi.com/thread/128355?ContentTypeID=1</link><pubDate>Sun, 15 Apr 2018 12:19:43 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:c0c18a06-8211-4c4b-80c9-9ba2f59228b0</guid><dc:creator>Linlei</dc:creator><description>&lt;p&gt;I can use PPI with the SDK 10.0. The errors of&amp;nbsp; the time datas were less than 10us, although they were a bit of volatility. But I can not use GPIOTE interrupt with SD. If I set the interrupt of GPIOTE, it can run at first time. After that, it looks the SD clear the interrupt of GPIOTE, I can see the GPIOTE events be on, but it doesn&amp;#39;t respond to the interrupt of GPIOTE events.&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: GPIOET interrupt and PPI in S110</title><link>https://devzone.nordicsemi.com/thread/128318?ContentTypeID=1</link><pubDate>Sat, 14 Apr 2018 01:10:06 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:bcb1e4be-96f4-4eca-89c6-216a5c23f7f7</guid><dc:creator>Linlei</dc:creator><description>&lt;p&gt;Thank all of you. I find the table 22 and 24 in the&amp;nbsp;S110_SDS_v2.pdf that about PPI and GPIOTE.&amp;nbsp; The SD uses the channel 14-15. The APP can use channel 0-13.&amp;nbsp; I think&amp;nbsp; the SDK I used is too old.&amp;nbsp; Now I am trying the SDK 10. But find I can not use GPIOTE&amp;nbsp; interrupt directly.&amp;nbsp; If I use&amp;nbsp;bsp_event_handler, the delay is about 700us, it is too long.&lt;/p&gt;
&lt;p&gt;I want to measure the time from a signal on one pin to another.&amp;nbsp; About 200us-50ms.&amp;nbsp; Error should less than 5us. How can I do?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: GPIOET interrupt and PPI in S110</title><link>https://devzone.nordicsemi.com/thread/127322?ContentTypeID=1</link><pubDate>Sun, 08 Apr 2018 20:30:37 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:6a80bd72-edab-4673-938b-73cf22f819d5</guid><dc:creator>AmbystomaLabs</dc:creator><description>&lt;p&gt;As Turbo said, you have to use the API&amp;#39;s to assign and enable/disable PPI channels.&amp;nbsp; The SD uses PPI and thus will write over your settings.&amp;nbsp; You can set gpiote directly through the register if you wish.&lt;/p&gt;
&lt;p&gt;These are some of the API&amp;#39;s.&amp;nbsp; You would find them all listed in the SD reference docs.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;sd_ppi_channel_assign&lt;br /&gt;&amp;nbsp;sd_ppi_channel_enable_set&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;You will find the PPI reserved channels on page 169 of the product spec.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: GPIOET interrupt and PPI in S110</title><link>https://devzone.nordicsemi.com/thread/127320?ContentTypeID=1</link><pubDate>Sun, 08 Apr 2018 18:35:02 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:c733bff4-da96-4619-a23d-3abab9e5be85</guid><dc:creator>Turbo J</dc:creator><description>&lt;p&gt;Check the softdevice specifications, some PPI channels are reserved for softdevice usage. Also, direct access to PPI peripherial might be forbidden when softdevice is active.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>