<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Interrupts for MKE02 (Cortex M0+) in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Interrupts-for-MKE02-Cortex-M0/m-p/687213#M42310</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Yes, BASEPRI is VERY handy in M4 for this exact reason:&lt;/P&gt;&lt;P&gt;extern u32_t Port_IntsDisableCount; // count of performed disables&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#define DISABLE_PORT_INT()&amp;nbsp;&amp;nbsp;&amp;nbsp; Port_IntsDisableCount++;\&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __set_BASEPRI( 1 &amp;lt;&amp;lt; (8-ARM_INTERRUPT_LEVEL_BITS) ); //All SPI-device interrupts on Level 1, disable them (and lower)&lt;BR /&gt;#define ENABLE_PORT_INT()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(--Port_IntsDisableCount==0) \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __set_BASEPRI( 0 );&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //If we get back to 'base level', enable all interrupts&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You can get a similar effect using the Interrupt Enable Register of NVIC, which is to say something like this (I don't have a KE04 header file, so names are guesses, plus of course you need your actual interrupt group):&lt;BR /&gt;extern u32_t Port_IntsDisableCount; // count of performed disables&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#define DISABLE_PORT_INT()&amp;nbsp;&amp;nbsp;&amp;nbsp; Port_IntsDisableCount++;\&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NVICICER = (1&amp;lt;&amp;lt;(INT_PORTC-16)) | (1&amp;lt;&amp;lt;(INT_UART0_RX_TX - 16)); //disable these&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;#define ENABLE_PORT_INT()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(--Port_IntsDisableCount==0) \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NVICISER = (1&amp;lt;&amp;lt;(INT_PORTC-16)) | (1&amp;lt;&amp;lt;(INT_UART0_RX_TX - 16)); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //If we get back to 'base level', enable all interrupts&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Not as 'clean', but functional...if a 'disabled' interrupt occurs, it will merely set the 'pending' bit, awaiting a new 'enable' operation 'later'...&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 28 Jul 2017 12:47:58 GMT</pubDate>
    <dc:creator>egoodii</dc:creator>
    <dc:date>2017-07-28T12:47:58Z</dc:date>
    <item>
      <title>Interrupts for MKE02 (Cortex M0+)</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Interrupts-for-MKE02-Cortex-M0/m-p/687212#M42309</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi All,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am using Freescale MKE02Z32 (Cortex M0+) micro-controller in one of application. Application is running with 3 interrupts enabled. One of these interrupts handles a very critical task and I don't want it to be disabled at any point of time.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Although as my main loop is running some segments (safety checks) of code that disable all interrupts causing problem to this task/ interrupt. Is there a solution or work around for this? i.e. I want my this one interrupt to remain enabled at all times (even if disable system interrupts for specific segment in periodic loop).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Note: Cortex M3/M4 have basepri registers on them. Is it possible to implement something like this on CM0+ also ?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 28 Jul 2017 11:55:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Interrupts-for-MKE02-Cortex-M0/m-p/687212#M42309</guid>
      <dc:creator>ankurmittal</dc:creator>
      <dc:date>2017-07-28T11:55:18Z</dc:date>
    </item>
    <item>
      <title>Re: Interrupts for MKE02 (Cortex M0+)</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Interrupts-for-MKE02-Cortex-M0/m-p/687213#M42310</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Yes, BASEPRI is VERY handy in M4 for this exact reason:&lt;/P&gt;&lt;P&gt;extern u32_t Port_IntsDisableCount; // count of performed disables&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#define DISABLE_PORT_INT()&amp;nbsp;&amp;nbsp;&amp;nbsp; Port_IntsDisableCount++;\&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __set_BASEPRI( 1 &amp;lt;&amp;lt; (8-ARM_INTERRUPT_LEVEL_BITS) ); //All SPI-device interrupts on Level 1, disable them (and lower)&lt;BR /&gt;#define ENABLE_PORT_INT()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(--Port_IntsDisableCount==0) \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __set_BASEPRI( 0 );&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //If we get back to 'base level', enable all interrupts&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You can get a similar effect using the Interrupt Enable Register of NVIC, which is to say something like this (I don't have a KE04 header file, so names are guesses, plus of course you need your actual interrupt group):&lt;BR /&gt;extern u32_t Port_IntsDisableCount; // count of performed disables&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#define DISABLE_PORT_INT()&amp;nbsp;&amp;nbsp;&amp;nbsp; Port_IntsDisableCount++;\&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NVICICER = (1&amp;lt;&amp;lt;(INT_PORTC-16)) | (1&amp;lt;&amp;lt;(INT_UART0_RX_TX - 16)); //disable these&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;#define ENABLE_PORT_INT()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(--Port_IntsDisableCount==0) \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NVICISER = (1&amp;lt;&amp;lt;(INT_PORTC-16)) | (1&amp;lt;&amp;lt;(INT_UART0_RX_TX - 16)); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //If we get back to 'base level', enable all interrupts&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Not as 'clean', but functional...if a 'disabled' interrupt occurs, it will merely set the 'pending' bit, awaiting a new 'enable' operation 'later'...&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 28 Jul 2017 12:47:58 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Interrupts-for-MKE02-Cortex-M0/m-p/687213#M42310</guid>
      <dc:creator>egoodii</dc:creator>
      <dc:date>2017-07-28T12:47:58Z</dc:date>
    </item>
    <item>
      <title>Re: Interrupts for MKE02 (Cortex M0+)</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Interrupts-for-MKE02-Cortex-M0/m-p/687214#M42311</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P style="color: #51626f; background-color: #ffffff; border: 0px;"&gt;Thanks for your reply/ suggestion.&amp;nbsp;&lt;/P&gt;&lt;P style="color: #51626f; background-color: #ffffff; border: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P style="color: #51626f; background-color: #ffffff; border: 0px;"&gt;If my understanding is correct you are suggesting to disable and enable all other interrupts individually using NVIC (except the one that I want enabled at all times). Is this correct ?&lt;/P&gt;&lt;P style="color: #51626f; background-color: #ffffff; border: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P style="color: #51626f; background-color: #ffffff; border: 0px;"&gt;Also you said:&lt;/P&gt;&lt;P style="color: #51626f; background-color: #ffffff; border: 0px;"&gt;"&lt;SPAN style="color: #51626f; background-color: #ffffff; border: 0px; font-weight: inherit;"&gt;Not as 'clean', but functional...if a 'disabled' interrupt occurs, it will merely set the 'pending' bit, awaiting a new 'enable' operation 'later'..."&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="color: #51626f; background-color: #ffffff; border: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P style="color: #51626f; background-color: #ffffff; border: 0px;"&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff; border: 0px; font-weight: inherit;"&gt;Although I am not clear on how pending bit will be set for a disabled interrupt ? Can you please elaborate further.&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="color: #51626f; background-color: #ffffff; border: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P style="color: #51626f; background-color: #ffffff; border: 0px;"&gt;P.S. Also this was the last/ only way around I had in my mind&lt;SPAN&gt;&amp;nbsp;:smileyhappy:&lt;/SPAN&gt;&lt;SPAN class=""&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 29 Jul 2017 04:43:52 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Interrupts-for-MKE02-Cortex-M0/m-p/687214#M42311</guid>
      <dc:creator>ankurmittal</dc:creator>
      <dc:date>2017-07-29T04:43:52Z</dc:date>
    </item>
    <item>
      <title>Re: Interrupts for MKE02 (Cortex M0+)</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Interrupts-for-MKE02-Cortex-M0/m-p/687215#M42312</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Yes, disable and enable 'all other interrupts' at the NVIC, although not exactly individually, but rather all 'in one go'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;'Disable', at this level, merely means the NVIC will NOT proceed with interrupt functions for that interrupt.&amp;nbsp; The 'pending' bit (in the Interrupt-Pending Register) WILL get set by an interrupt-signal, and in this way the NVIC remembers the 'need', and when 'all your interrupts' are re-enabled (in a block with one write to the NVIC Interrupt Set Enable Register)&amp;nbsp; later, all those pending will be evaluated in the normal priority to pick 'which'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I say this is 'less clean' because the 'block disable' circumvents any normal 'priority hardware', AND because these macros 'assume' they know exactly which set of interrupts to disable then re-enable, 'at all times'.&amp;nbsp; I think you can organize your thoughts and processes to make these limitations 'very tolerable'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It is 'unfortunate' that all documentation at this level of 'core operations' for ARM licensees must defer to arm.com, but there you can find the basic 'design guide/users guide' for Cortex M0, and that is where this functionality is described.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 29 Jul 2017 13:05:28 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Interrupts-for-MKE02-Cortex-M0/m-p/687215#M42312</guid>
      <dc:creator>egoodii</dc:creator>
      <dc:date>2017-07-29T13:05:28Z</dc:date>
    </item>
    <item>
      <title>Re: Interrupts for MKE02 (Cortex M0+)</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Interrupts-for-MKE02-Cortex-M0/m-p/687216#M42313</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks for clarification. But I guess this would work only for non-core (IRQ No. &amp;gt;= 0) interrupts.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If the system is running core interrupts (i.e systick) that also need to be disabled. Then what would you suggest. (Additionally adding instruction to disabling/ enabling the systick)&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 30 Jul 2017 06:13:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Interrupts-for-MKE02-Cortex-M0/m-p/687216#M42313</guid>
      <dc:creator>ankurmittal</dc:creator>
      <dc:date>2017-07-30T06:13:50Z</dc:date>
    </item>
    <item>
      <title>Re: Interrupts for MKE02 (Cortex M0+)</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Interrupts-for-MKE02-Cortex-M0/m-p/687217#M42314</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Try with something like this:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;static unsigned long _SYSTICK_CSR = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;static unsigned long NVICIntSet[NVIC_SET_REGISTERS] = {0};&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;#define DISABLEMASK_0_31&amp;nbsp;&amp;nbsp; 0xffffffff&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // all to be disabled&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;#define DISABLEMASK_32_63&amp;nbsp; 0xfffffff&lt;SPAN style="color: #ff0000;"&gt;e&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // all to be disabled &lt;SPAN style="color: #ff0000;"&gt;apart from IRQ32&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;#define DISABLEMASK_64_95&amp;nbsp; 0xffffffff&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // all to be disabled&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;#define DISABLEMASK_96_127 0xffffffff&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // all to be disabled&lt;BR /&gt;//etc.&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;extern void &lt;STRONG&gt;fnDisableOtherInterrupts&lt;/STRONG&gt;(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _SYSTICK_CSR = (SYSTICK_CSR &amp;amp; SYSTICK_TICKINT); // save original systick interrupt mask&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SYSTICK_CSR &amp;amp;= ~(SYSTICK_TICKINT);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // disable systick interrupt&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NVICIntSet[0] = IRQ0_31_SER;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // save original NVIC interrupt flags&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IRQ0_31_CER = DISABLEMASK_0_31;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // disable interrupts&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NVICIntSet[1] = IRQ32_63_SER;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IRQ32_63_CER = DISABLEMASK_32_63;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #if NVIC_SET_REGISTERS &amp;gt; 2&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NVICIntSet[2] = IRQ64_95_SER;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IRQ64_95_CER = DISABLEMASK_64_95;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #if NVIC_SET_REGISTERS &amp;gt; 3&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NVICIntSet[3] = IRQ96_127_SER&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IRQ96_127_CER = DISABLEMASK_96_127;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // etc.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;extern void &lt;STRONG&gt;fnReenableInterrupts&lt;/STRONG&gt;(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SYSTICK_CSR |= _SYSTICK_CSR;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // re-enable systick interrupt if it was previously enabled&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IRQ0_31_SER = NVICIntSet[0];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // re-enable previously enabled interrupts&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IRQ32_63_SER = NVICIntSet[1];&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #if NVIC_SET_REGISTERS &amp;gt; 2&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IRQ64_95_SER = NVICIntSet[2];&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #if NVIC_SET_REGISTERS &amp;gt; 3&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IRQ96_127_SER = NVICIntSet[3];&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // etc.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier,monospace; font-size: 13px;"&gt;NVIC_SET_REGISTERS&lt;/SPAN&gt; can be set to match the number of NVIC registers that need to be controlled for the specific processor. The example retains IRQ32, which can be adjusted to match the one that should never be disabled.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 30 Jul 2017 18:13:38 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Interrupts-for-MKE02-Cortex-M0/m-p/687217#M42314</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2017-07-30T18:13:38Z</dc:date>
    </item>
    <item>
      <title>Re: Interrupts for MKE02 (Cortex M0+)</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Interrupts-for-MKE02-Cortex-M0/m-p/687218#M42315</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;If the 'block of interrupts' to be enabled at the NVIC level is 'changeable', then Mark's addition of 'saving the incoming state' is a cool addition (for a few more instructions), but note of course that M0+ only has ONE set of 32 interrupts, so there is only one 'wordful' to read or write at any time.&amp;nbsp; Personally, however, I would want to keep the 'enable/disable process overhead' to a minimum and use macros rather than the cost of a full procedure:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;extern uint32_t Port_IntsDisableCount; // count of performed disables&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;extern uint32_t SavedNVICints;&lt;/P&gt;&lt;P&gt;#define DISABLE_PORT_INT()&amp;nbsp;&amp;nbsp; { Port_IntsDisableCount++;\&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SavedNVICints = NVICICER;\ &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NVICICER = (1&amp;lt;&amp;lt;(INT_PORTC-16)) | (1&amp;lt;&amp;lt;(INT_UART0_RX_TX - 16));} //disable these&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;#define ENABLE_PORT_INT()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(--Port_IntsDisableCount==0) \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NVICISER = SavedNVICints ; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //If we get back to 'base level', enable all interrupts we had before&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Bringing in SysTick adds a new wrinkle.&amp;nbsp; This is another case where M0+ is 'less clean' than M4, since we can set SCB_SHPR3_PRI_15 to match our lower 'maskable interrupt' group, and thus BASEPRI in M4 will affect it as well.&amp;nbsp; But that does beg the question --- can you just 'work' with this lowered SysTick priority, and simply structure your code so that the SysTick handler interrupt is safe?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I fear that clearing 'TICKINT' does an 'actual' DISABLE, which means, like disabling any interrupt 'at the source' opens a window whereby the event will get 'missed entirely'.&amp;nbsp; The ICSR register mentions 'SysTick Pending', but I see no indication of how &lt;STRONG&gt;that&lt;/STRONG&gt; might work.&amp;nbsp; I suppose you could also DISABLE and ENABLE the SyTick-counter operation at the same time as the TICKINT bit, BUT what consequence either possibility (rollover loss or count-clock-delay) has on your 'timekeeping' functions is 'up to you'.&amp;nbsp; Personally, I would eschew SYSTICK in this environment in favor of either RTC or FTM timekeeping, so that you can stick with NVIC-processed interrupts to get the proper 'pending' hardware to implement 'hold' on exceptions, and with that you can GUARANTEE a max interrupt-response-time for your 'critical' function to be the 'best hardware can do' (longest uninterruptable instruction, stacking process, plus.... which ARM lists at 15 clocks for zero-wait-state stack-RAM in M0+, 12 clocks in M4)&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 31 Jul 2017 13:55:43 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Interrupts-for-MKE02-Cortex-M0/m-p/687218#M42315</guid>
      <dc:creator>egoodii</dc:creator>
      <dc:date>2017-07-31T13:55:43Z</dc:date>
    </item>
  </channel>
</rss>

