<?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>Soft device intro</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/16492/soft-device-intro</link><description>Hello, 
 I am looking to get started with NRF52. I am very familiar with TI BLE so not a beginner. 
 I am looking for a high level introduction to the nordic soft devices. 
 I have been looking at code examples e.g. the ble_app_hrs. 
 I am confused</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Sun, 18 Sep 2016 01:06:38 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/16492/soft-device-intro" /><item><title>RE: Soft device intro</title><link>https://devzone.nordicsemi.com/thread/63119?ContentTypeID=1</link><pubDate>Sun, 18 Sep 2016 01:06:38 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:edba83d6-28dd-4f5c-b808-7341f2f5d53a</guid><dc:creator>RK</dc:creator><description>&lt;p&gt;Yes all the softdevice operations are executed in interrupt context. In fact you can consider the softdevice an entirely separate process running on the device, separate from your application code. When the app wants to perform a softdevice function it calls one of the API methods and that just executes an interrupt-type instruction which passes control to the softdevice. Similarly when the softdevice has events for the app to process, it triggers a software interrupt which your app code processes. The Nordic SDK has a standard module which most people use for capturing BLE events, but you can write your own if you like, it&amp;#39;s just an interrupt handler in the end.&lt;/p&gt;
&lt;p&gt;Internally the softdevice runs a number of peripherals, radio, a timer or two + more and those interrupts trigger it to do things, the critical softdevice operations run at a higher priority than anything else, to ensure that BLE timing is maintained.&lt;/p&gt;
&lt;p&gt;That do-nothing power_manage() loop is again a standard in the Nordic examples because most events are triggered asynchronously by interrupts of one sort or another, so there&amp;#39;s really nothing for the main context to do. You will find some which do work there however, for instance there&amp;#39;s a simple event dispatch module where you enqueue events as responses to interrupts, but actually process them later in the main loop, in a case like that the main loop would feed the event system each time it wakes up.&lt;/p&gt;
&lt;p&gt;There are other options too, there&amp;#39;s several RTOS supported if you like using those, look over on the right-hand column of this page for the Blog entries, someone just wrote a nice one about available RTOSes.&lt;/p&gt;
&lt;p&gt;I&amp;#39;m sure you&amp;#39;ll like the Nordic stuff as much as, or more than, the TI BLE when you get to know your way around, I always found the TI stuff rather opaque, the Nordic SDK is a bit more verbose, but you can always drill down and figure out what it&amp;#39;s doing.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>