<?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: An interruption with KL25Z in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/An-interruption-with-KL25Z/m-p/521097#M32744</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you very much, your codes are very clear. &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 17 Jun 2016 08:12:06 GMT</pubDate>
    <dc:creator>calli</dc:creator>
    <dc:date>2016-06-17T08:12:06Z</dc:date>
    <item>
      <title>An interruption with KL25Z</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/An-interruption-with-KL25Z/m-p/521095#M32742</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi everyone !&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I try to do an example of an interrupt without PE. I use a KL25Z.&lt;/P&gt;&lt;P&gt;The program has to do a timer which count to 5seconds, then the interruption turn on the blue LED and the timer restart. The second time, the blue led turn off, and the timer restart and again and again ...&lt;/P&gt;&lt;P&gt;I got some difficult to do this program as a beginner.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Could you help me to do it, this is what i did for the moment.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#include "MKL25Z4.h"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;static int i = 0;&lt;/P&gt;&lt;P&gt;void delay(void);&lt;/P&gt;&lt;P&gt;void TPM_Init(void);&lt;/P&gt;&lt;P&gt;void GPIOBlue_Init(void);&lt;/P&gt;&lt;P&gt;uint16_t getTPMCounter(void);&lt;/P&gt;&lt;P&gt;void ResetTPM(void);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;int main(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint16_t delayTimerTick;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Write your code here */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* This for loop should be replaced. By default this loop allows a single stepping. */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TPM_Init();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ResetTPM();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; delay();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; delayTimerTick=getTPMCounter();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __asm("nop"); //set a break point here&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (;;) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Never leave main */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void GPIOBlue_Init(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SIM_SCGC5 = 0b01011110000000;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Active l'horloge pour driver les ports A,B et D&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTD_PCR1 = 0b00100000000;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GPIOD_PDDR = 0b10;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GPIOD_PDOR = 0b10;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void TPM_Init(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SIM_SCGC6|=0x03000000; //enable FTM0 and FTM0 module clock&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SIM_SCGC5|=0x3E00;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SIM_SOPT2|=0x1000000; //select TPMSRC clock source as MCGIRCLK clock&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TPM0_CONF=0x00; //set up BDM in 11&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TPM0_MOD=0xFFFF;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TPM0_C0SC=0x14; //FTM output signal toggle when the FTM counter matches with //C0V registrer&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TPM0_C0V=500;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TPM0_SC=0x08; // system clock driving, dividing by 1&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void ResetTPM(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TPM0_CNT=0x00;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;uint16_t getTPMCounter(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint16_t temp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp=TPM0_CNT;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return temp;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void delay(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint16_t delayCounter;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(delayCounter=0; delayCounter&amp;lt;1000; delayCounter++)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __asm("nop");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __asm("nop");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//void PORTD_IRQHandler(void)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //DelayFunction();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //GPIOD_PDOR = 0b10;&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; /*Turn Off Blue Led*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //GPIOD_PDOR = 0b00;&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; /*Turn On Blue Led*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //DelayFunction();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //GPIOD_PDOR = 0b10;&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; /*Turn Off Blue Led*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //DelayFunction();&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //PORTD_ISFR = PORT_ISFR_ISF(0x40);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Clear interrupt status flag */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //void DelayFunction(void)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //int cnt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //for(cnt=0; cnt&amp;lt;1000000; cnt++)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //{&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //}&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 07:10:04 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/An-interruption-with-KL25Z/m-p/521095#M32742</guid>
      <dc:creator>calli</dc:creator>
      <dc:date>2016-06-15T07:10:04Z</dc:date>
    </item>
    <item>
      <title>Re: An interruption with KL25Z</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/An-interruption-with-KL25Z/m-p/521096#M32743</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Max, &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I did not analyse your code but the first thing I can figure out is you should use more &lt;EM&gt;MKL25Z4.h &lt;/EM&gt;macro&lt;EM&gt;. &lt;/EM&gt;It will help the reader (and you) to make your code more self explain.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I attached some old code I wrote years ago. It work without PEx. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The first one manage the GPIO external Interrupt&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_1466068813061191 jive_text_macro" data-renderedposition="190_8_1192_912" jivemacro_uid="_1466068813061191" modifiedtitle="true"&gt;&lt;P&gt;#include "MKL25Z4.h"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#define PTA1&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x02&lt;/P&gt;&lt;P&gt;#define PTA2&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x04&lt;/P&gt;&lt;P&gt;#define PTD1&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x01&lt;/P&gt;&lt;P&gt;#define PTD4&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x10&lt;/P&gt;&lt;P&gt;#define PTB18&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x40000&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;static int i = 0;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void PORTD_IRQHandler()&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GPIOB-&amp;gt;PTOR |= PTB18;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTD-&amp;gt;ISFR |= PTD4;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //NVIC_ClearPendingIRQ(PORTD_IRQn);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void PORTA_IRQHandler()&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GPIOB-&amp;gt;PTOR |= PTB18;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTA-&amp;gt;ISFR |= PTA1|PTA2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //NVIC_ClearPendingIRQ(PORTA_IRQn);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;int main(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Write your code here */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCG-&amp;gt;C2 |= MCG_C2_IRCS_MASK;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Fast internal reference clock (4MHz)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCG-&amp;gt;SC &amp;amp;= !(MCG_SC_FCRDIV(0x01));&amp;nbsp;&amp;nbsp;&amp;nbsp; //Diviseur fast internal reference clock /1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SIM-&amp;gt;SCGC5 |= SIM_SCGC5_PORTA_MASK | SIM_SCGC5_PORTB_MASK | SIM_SCGC5_PORTD_MASK;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Set up peripheral clock for GPIO A,B,D&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTA-&amp;gt;PCR[1] |= PORT_PCR_MUX(1) | PORT_PCR_PE(1) | PORT_PCR_PS(1) | PORT_PCR_IRQC(0x0A);//PTA1 as GPIO, Pull Up, interrupt on falling edge&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTA-&amp;gt;PCR[2] |= PORT_PCR_MUX(1) | PORT_PCR_PE(1) | PORT_PCR_PS(1) | PORT_PCR_IRQC(0x0A);//PTA2 as GPIO, Pull up, interrupt on falling edge&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTD-&amp;gt;PCR[4] |= PORT_PCR_MUX(1) | PORT_PCR_PE(1) | PORT_PCR_PS(1) | PORT_PCR_IRQC(0x0A);//PTD4 as GPIO, Pull up, interrupt on falling edge&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTD-&amp;gt;PCR[1] |= PORT_PCR_MUX(1);//PTD1 as GPIO&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTB-&amp;gt;PCR[18]|= PORT_PCR_MUX(1);//PTB18 as GPIO&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //PTA1 &amp;amp; PTA2 as Input&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GPIOA-&amp;gt;PDDR &amp;amp;= ~(PTA1 | PTA2);//GPIO_PDDR_PDD(1)|GPIO_PDDR_PDD(2);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GPIOD-&amp;gt;PDDR &amp;amp;= ~PTD4;//PTD4 as Input&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Set GPIO external Interrupt pin&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GPIOD-&amp;gt;PDDR |= PTD1;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Set PTD1 port direction as input&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GPIOD-&amp;gt;PCOR |= PTD1;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Clear PTD1&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GPIOB-&amp;gt;PDDR |= PTB18;&amp;nbsp;&amp;nbsp;&amp;nbsp; //SetPTB18 port direction as input&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GPIOB-&amp;gt;PCOR |= PTB18;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Clear PTB18&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Enable External Interupt&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NVIC_EnableIRQ(PORTA_IRQn);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NVIC_EnableIRQ(PORTD_IRQn);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Down here is TPM functions with initialization and delay for &lt;EM&gt;µs&lt;/EM&gt; and &lt;EM&gt;ms &lt;/EM&gt;purpose. Maximum dealy time is limited to 65535 &lt;EM&gt;µs&lt;/EM&gt; ou &lt;EM&gt;ms. &lt;/EM&gt;TPM increment every 1µs if source clock is MCGIRCLK = 4MHz.&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14660690979745518 jive_text_macro" data-renderedposition="1206_8_1192_816" jivemacro_uid="_14660690979745518" modifiedtitle="true"&gt;&lt;P&gt;/*&lt;/P&gt;&lt;P&gt; * TMP.c&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; *&amp;nbsp; Created on: 4 mai 2015&lt;/P&gt;&lt;P&gt; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Author: maximedo&lt;/P&gt;&lt;P&gt; */&lt;/P&gt;&lt;P&gt;//TPM.c v1&lt;/P&gt;&lt;P&gt;//Programmeur : Dolberg Maxime&lt;/P&gt;&lt;P&gt;//Date : 22 juillet 2014&lt;/P&gt;&lt;P&gt;//Librairie timer 0 de KL25&lt;/P&gt;&lt;P&gt;//Config par dÈfaut&lt;/P&gt;&lt;P&gt;//Source clock : MCGIRCLK @4MHz&lt;/P&gt;&lt;P&gt;//LPTM freq : 1MHz&lt;/P&gt;&lt;P&gt;//&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#include "MKL25Z4.h"&lt;/P&gt;&lt;P&gt;#include "TPM.h"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void TPM_init(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SIM-&amp;gt;SCGC6 |= SIM_SCGC6_TPM0_MASK;//TPM0 clock&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SIM-&amp;gt;SOPT2 |= SIM_SOPT2_TPMSRC(0x01);//TPM clock source -&amp;gt; MCGIRCLK&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; TPM0-&amp;gt;SC = TPM_SC_CMOD(0x00);//LPTPM&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; TPM0-&amp;gt;SC |= TPM_SC_PS(0x02);//&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void TPM0_delai_us(int t)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TPM0-&amp;gt;MOD = TPM_MOD_MOD(t);//&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TPM0-&amp;gt;SC |= TPM_SC_TOF_MASK;//Reset TOF bit&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TPM0-&amp;gt;SC |= TPM_SC_CMOD(0x01);//LPTPM&amp;nbsp; compteur interne&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while((TPM0-&amp;gt;SC &amp;amp; TPM_SC_TOF_MASK)!=TPM_SC_TOF_MASK);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TPM0-&amp;gt;SC |= TPM_SC_TOF_MASK;//clear TOF bit&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void TPM0_delai_ms(int t)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int i;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TPM0-&amp;gt;MOD = TPM_MOD_MOD(1000);//&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TPM0-&amp;gt;SC |= TPM_SC_TOF_MASK;//Reset TOF bit&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TPM0-&amp;gt;SC |= TPM_SC_CMOD(0x01);//LPTPM compteur interne&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=0;i&amp;lt;=t;i++)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while((TPM0-&amp;gt;SC &amp;amp; TPM_SC_TOF_MASK)!=TPM_SC_TOF_MASK);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TPM0-&amp;gt;SC |= TPM_SC_TOF_MASK;//clear TOF bit&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I attached the code with this post, so you can download it and use it as you want.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hope it help you.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Maxmbedded.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 09:33:21 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/An-interruption-with-KL25Z/m-p/521096#M32743</guid>
      <dc:creator>mr_max</dc:creator>
      <dc:date>2016-06-16T09:33:21Z</dc:date>
    </item>
    <item>
      <title>Re: An interruption with KL25Z</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/An-interruption-with-KL25Z/m-p/521097#M32744</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you very much, your codes are very clear. &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 17 Jun 2016 08:12:06 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/An-interruption-with-KL25Z/m-p/521097#M32744</guid>
      <dc:creator>calli</dc:creator>
      <dc:date>2016-06-17T08:12:06Z</dc:date>
    </item>
  </channel>
</rss>

