<?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>How to generate two complimentary 300KHz signals with specific timing</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/56883/how-to-generate-two-complimentary-300khz-signals-with-specific-timing</link><description>How can I generate two complimentary signals using PWM with a period of 3.33us (300khz) with ability to control number of pulses to generate. 
 
 1: With current api PWM takes period is integer values of microseconds so I can set either 3us or 4us, but</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Fri, 24 Jan 2020 21:39:16 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/56883/how-to-generate-two-complimentary-300khz-signals-with-specific-timing" /><item><title>RE: How to generate two complimentary 300KHz signals with specific timing</title><link>https://devzone.nordicsemi.com/thread/230950?ContentTypeID=1</link><pubDate>Fri, 24 Jan 2020 21:39:16 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:5f303900-a6b5-4058-a002-b47a8d7f9911</guid><dc:creator>Karthikbss</dc:creator><description>&lt;p&gt;Thank you, that helped&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to generate two complimentary 300KHz signals with specific timing</title><link>https://devzone.nordicsemi.com/thread/230805?ContentTypeID=1</link><pubDate>Fri, 24 Jan 2020 09:53:46 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:0e90cadc-f16e-4580-97f0-994b22f042c6</guid><dc:creator>Dmitry</dc:creator><description>&lt;p&gt;You can look at&amp;nbsp;&lt;a href="https://github.com/NordicPlayground/nrf51-TIMER-examples/blob/master/timer_example_timer_mode/main.c"&gt;this&lt;/a&gt;&amp;nbsp;example (it should compile also for nRF52)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to generate two complimentary 300KHz signals with specific timing</title><link>https://devzone.nordicsemi.com/thread/230736?ContentTypeID=1</link><pubDate>Thu, 23 Jan 2020 19:06:03 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:64d252a5-19f1-4676-8f3e-d57859297400</guid><dc:creator>Karthikbss</dc:creator><description>&lt;p&gt;How do I register an interrupt handler on compare event&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to generate two complimentary 300KHz signals with specific timing</title><link>https://devzone.nordicsemi.com/thread/230455?ContentTypeID=1</link><pubDate>Thu, 23 Jan 2020 01:19:10 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:ff50c8b6-f2ff-4bd9-99ed-977eb809a87b</guid><dc:creator>Karthikbss</dc:creator><description>&lt;p&gt;Thank you, it works. 301.8khz will work for me.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to generate two complimentary 300KHz signals with specific timing</title><link>https://devzone.nordicsemi.com/thread/230447?ContentTypeID=1</link><pubDate>Wed, 22 Jan 2020 22:14:51 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:25bc55ec-4cc1-4310-bbfb-123ecb0fc6d6</guid><dc:creator>Dmitry</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;it would be too complex configuration for PWM, though maybe it&amp;#39;s possible...&amp;nbsp; I would recommend you to use TIMER and GPIOTE for this task. Note that you cannot achieve an exact 300khz signal, either with TIMER or PWM, the closest value is 16000000/53=301.8kHz (if it matters to you). A number of pulses can be counted by an interrupt handler triggered with COMPARE[3] event.&lt;/p&gt;
&lt;p&gt;Here is a code that uses TIMER1:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;nrf_gpiote_task_configure(0, DRVA_PIN_NUMBER, NRF_GPIOTE_POLARITY_TOGGLE, NRF_GPIOTE_INITIAL_VALUE_LOW);
nrf_gpiote_task_configure(1, DRVB_PIN_NUMBER, NRF_GPIOTE_POLARITY_TOGGLE, NRF_GPIOTE_INITIAL_VALUE_LOW);

NRF_TIMER1-&amp;gt;MODE        = TIMER_MODE_MODE_Timer;
NRF_TIMER1-&amp;gt;BITMODE     = (TIMER_BITMODE_BITMODE_32Bit &amp;lt;&amp;lt; TIMER_BITMODE_BITMODE_Pos);
NRF_TIMER1-&amp;gt;PRESCALER   = 0; // 16MHz
NRF_TIMER1-&amp;gt;SHORTS      = (TIMER_SHORTS_COMPARE3_CLEAR_Enabled &amp;lt;&amp;lt; TIMER_SHORTS_COMPARE3_CLEAR_Pos);

int period = 16000000/300000;

NRF_TIMER1-&amp;gt;CC[0] = 2; // ensure 124ns delay
NRF_PPI-&amp;gt;CH[0].EEP = (uint32_t) &amp;amp;NRF_TIMER1-&amp;gt;EVENTS_COMPARE[0];
NRF_PPI-&amp;gt;CH[0].TEP = (uint32_t) &amp;amp;NRF_GPIOTE-&amp;gt;TASKS_SET[0];

NRF_TIMER1-&amp;gt;CC[1] = period/2;
NRF_PPI-&amp;gt;CH[1].EEP = (uint32_t) &amp;amp;NRF_TIMER1-&amp;gt;EVENTS_COMPARE[1];
NRF_PPI-&amp;gt;CH[1].TEP = (uint32_t) &amp;amp;NRF_GPIOTE-&amp;gt;TASKS_CLR[0];

NRF_TIMER1-&amp;gt;CC[2] = period/2 + 2; // ensure 124ns delay
NRF_PPI-&amp;gt;CH[2].EEP = (uint32_t) &amp;amp;NRF_TIMER1-&amp;gt;EVENTS_COMPARE[2];
NRF_PPI-&amp;gt;CH[2].TEP = (uint32_t) &amp;amp;NRF_GPIOTE-&amp;gt;TASKS_SET[1];

NRF_TIMER1-&amp;gt;CC[3] = period;
NRF_PPI-&amp;gt;CH[3].EEP = (uint32_t) &amp;amp;NRF_TIMER1-&amp;gt;EVENTS_COMPARE[3];
NRF_PPI-&amp;gt;CH[3].TEP = (uint32_t) &amp;amp;NRF_GPIOTE-&amp;gt;TASKS_CLR[1];

NRF_PPI-&amp;gt;CHENSET = PPI_CHENSET_CH0_Enabled &amp;lt;&amp;lt; PPI_CHENSET_CH0_Pos | 
                   PPI_CHENSET_CH1_Enabled &amp;lt;&amp;lt; PPI_CHENSET_CH1_Pos |
                   PPI_CHENSET_CH2_Enabled &amp;lt;&amp;lt; PPI_CHENSET_CH2_Pos |
                   PPI_CHENSET_CH3_Enabled &amp;lt;&amp;lt; PPI_CHENSET_CH3_Pos; 

NRF_TIMER1-&amp;gt;TASKS_CLEAR = 1;
NRF_TIMER1-&amp;gt;TASKS_START = 1;
&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>