<?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: Real time counter for KL25z in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Real-time-counter-for-KL25z/m-p/494220#M30628</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you for the example codes, I have a question thats confusing me:&lt;/P&gt;&lt;P&gt;Are those ReadAccRegs and WriteAccRegs functions only specific to the MMA845xQ or are they universal? I mean can I use the same functions to read and write from the MED-EKG board for example?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="_jivemacro_uid_14604415963011909 jive_macro_code jive_text_macro" data-renderedposition="138_8_1192_624" jivemacro_uid="_14604415963011909"&gt;&lt;P&gt;bool ReadAccRegs(LDD_TDeviceData *I2CPtr,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TDataState *DataState, uint8_t Address, uint8_t RegCount, uint8_t *Buffer)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; LDD_I2C_TBusState BusState;&lt;/P&gt;&lt;P&gt;&amp;nbsp; DataState-&amp;gt;Sent = FALSE;&lt;/P&gt;&lt;P&gt;&amp;nbsp; I2C_MasterSendBlock(I2CPtr, &amp;amp;Address, sizeof(Address), LDD_I2C_NO_SEND_STOP);&lt;/P&gt;&lt;P&gt;&amp;nbsp; while (!DataState-&amp;gt;Sent) {}&lt;/P&gt;&lt;P&gt;&amp;nbsp; if (!DataState-&amp;gt;Sent) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return FALSE;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; DataState-&amp;gt;Received = FALSE;&lt;/P&gt;&lt;P&gt;&amp;nbsp; I2C_MasterReceiveBlock(I2CPtr, Buffer, RegCount, LDD_I2C_SEND_STOP);&lt;/P&gt;&lt;P&gt;&amp;nbsp; while (!DataState-&amp;gt;Received) {}&lt;/P&gt;&lt;P&gt;&amp;nbsp; do {I2C_CheckBus(I2CPtr, &amp;amp;BusState);}&lt;/P&gt;&lt;P&gt;&amp;nbsp; while (BusState != LDD_I2C_IDLE);&lt;/P&gt;&lt;P&gt;&amp;nbsp; if (!DataState-&amp;gt;Received) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return FALSE;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; return TRUE;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;bool WriteAccRegs(LDD_TDeviceData *I2CPtr,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TDataState *DataState, uint8_t Address, uint8_t RegCount, uint8_t *Data)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; LDD_I2C_TBusState BusState;&lt;/P&gt;&lt;P&gt;&amp;nbsp; const uint8_t MAX_REG_COUNT = 16;&lt;/P&gt;&lt;P&gt;&amp;nbsp; uint8_t SendBuffer[MAX_REG_COUNT];&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; SendBuffer[0] = Address;&lt;/P&gt;&lt;P&gt;&amp;nbsp; memcpy(&amp;amp;SendBuffer[1], Data, RegCount);&lt;/P&gt;&lt;P&gt;&amp;nbsp; DataState-&amp;gt;Sent = FALSE;&lt;/P&gt;&lt;P&gt;&amp;nbsp; I2C_MasterSendBlock(I2CPtr, &amp;amp;SendBuffer, RegCount + 1, LDD_I2C_SEND_STOP);&lt;/P&gt;&lt;P&gt;&amp;nbsp; while (!DataState-&amp;gt;Sent) {}&lt;/P&gt;&lt;P&gt;&amp;nbsp; do {I2C_CheckBus(I2CPtr, &amp;amp;BusState);}&lt;/P&gt;&lt;P&gt;&amp;nbsp; while(BusState != LDD_I2C_IDLE); &lt;/P&gt;&lt;P&gt;&amp;nbsp; if (!DataState-&amp;gt;Sent) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return FALSE;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; return TRUE;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/PRE&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14604415353485784" data-renderedposition="762_8_1192_0" jivemacro_uid="_14604415353485784" modifiedtitle="true"&gt;&lt;P&gt;&lt;/P&gt;&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 12 Apr 2016 06:13:16 GMT</pubDate>
    <dc:creator>pacoshnaidler</dc:creator>
    <dc:date>2016-04-12T06:13:16Z</dc:date>
    <item>
      <title>Real time counter for KL25z</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Real-time-counter-for-KL25z/m-p/494216#M30624</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I was using lab1 of the medical tower board mcf51, and I'm trying to port the following real time counter driver to the KL25z.&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="_jivemacro_uid_1460322642291626 jive_macro_code jive_text_macro" data-renderedposition="82_50_798_4272" jivemacro_uid="_1460322642291626"&gt;&lt;P&gt;/******************************************************************************&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; * Freescale Semiconductor Inc.&lt;/P&gt;&lt;P&gt; * (c) Copyright 2004-2010 Freescale Semiconductor, Inc.&lt;/P&gt;&lt;P&gt; * ALL RIGHTS RESERVED.&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; ******************************************************************************&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; * THIS SOFTWARE IS PROVIDED BY FREESCALE "AS IS" AND ANY EXPRESSED OR &lt;/P&gt;&lt;P&gt; * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES &lt;/P&gt;&lt;P&gt; * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.&amp;nbsp; &lt;/P&gt;&lt;P&gt; * IN NO EVENT SHALL FREESCALE OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, &lt;/P&gt;&lt;P&gt; * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES &lt;/P&gt;&lt;P&gt; * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR &lt;/P&gt;&lt;P&gt; * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) &lt;/P&gt;&lt;P&gt; * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, &lt;/P&gt;&lt;P&gt; * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING &lt;/P&gt;&lt;P&gt; * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF &lt;/P&gt;&lt;P&gt; * THE POSSIBILITY OF SUCH DAMAGE.&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; **************************************************************************//*!&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; * @file TPM.c&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; * @author&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; * @version&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; * @date&amp;nbsp;&amp;nbsp;&amp;nbsp; June-17-2009&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; * @brief&amp;nbsp;&amp;nbsp; This file configures Real Time Counter (RTC) for Timer &lt;/P&gt;&lt;P&gt; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Implementation&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; * Includes&lt;/P&gt;&lt;P&gt; *****************************************************************************/&lt;/P&gt;&lt;P&gt;#include &amp;lt;string.h&amp;gt;&lt;/P&gt;&lt;P&gt;#include "derivative.h"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* include peripheral declarations */&lt;/P&gt;&lt;P&gt;#include "types.h"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Contains User Defined Data Types */&lt;/P&gt;&lt;P&gt;#include "RealTimerCounter.h"&lt;/P&gt;&lt;P&gt;#if MAX_TIMER_OBJECTS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*****************************************************************************&lt;/P&gt;&lt;P&gt; * Local Functions Prototypes&lt;/P&gt;&lt;P&gt; *****************************************************************************/&lt;/P&gt;&lt;P&gt;static uint_8 TimerInit(void);&lt;/P&gt;&lt;P&gt;static void EnableTimerInterrupt(void);&lt;/P&gt;&lt;P&gt;static void DisableTimerInterrupt(void);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/****************************************************************************&lt;/P&gt;&lt;P&gt; * Global Variables&lt;/P&gt;&lt;P&gt; ****************************************************************************/&lt;/P&gt;&lt;P&gt;/* Array of Timer Objects */&lt;/P&gt;&lt;P&gt;TIMER_OBJECT g_TimerObjectArray[MAX_TIMER_OBJECTS];&lt;/P&gt;&lt;P&gt;/*****************************************************************************&lt;/P&gt;&lt;P&gt; * Global Functions Prototypes&lt;/P&gt;&lt;P&gt; *****************************************************************************/&lt;/P&gt;&lt;P&gt;uint_8 TimerQInitialize(uint_8 controller_ID);&lt;/P&gt;&lt;P&gt;uint_8 AddTimerQ(PTIMER_OBJECT pTimerObject);&lt;/P&gt;&lt;P&gt;uint_8 RemoveTimerQ(uint_8 index);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*****************************************************************************&lt;/P&gt;&lt;P&gt; * Global Functions&lt;/P&gt;&lt;P&gt; *****************************************************************************/&lt;/P&gt;&lt;P&gt;#if (defined(_MC9S08MM128_H) || defined(_MC9S08JE128_H))&lt;/P&gt;&lt;P&gt;#pragma CODE_SEG DEFAULT&lt;/P&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;P&gt;/******************************************************************************&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; *&amp;nbsp;&amp;nbsp; @name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TimerQInitialize&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; *&amp;nbsp;&amp;nbsp; @brief&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Initializes RTC, Timer Object Queue and System Clock Counter&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; * @param&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; controller_ID&amp;nbsp;&amp;nbsp;&amp;nbsp; : Controller ID&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; *&amp;nbsp;&amp;nbsp; @return&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; None&lt;/P&gt;&lt;P&gt; *****************************************************************************&lt;/P&gt;&lt;P&gt; * This function initializes System Clock Counter, Timer Queue and Initializes&lt;/P&gt;&lt;P&gt; * System Timer&lt;/P&gt;&lt;P&gt; *****************************************************************************/&lt;/P&gt;&lt;P&gt;uint_8 TimerQInitialize(uint_8 controller_ID)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UNUSED (controller_ID)&lt;/P&gt;&lt;P&gt;&amp;nbsp; (void)memset(g_TimerObjectArray, (int)NULL, sizeof(g_TimerObjectArray));&lt;/P&gt;&lt;P&gt;&amp;nbsp; return TimerInit();&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; *&amp;nbsp;&amp;nbsp; @name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AddTimerQ&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; *&amp;nbsp;&amp;nbsp; @brief&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Adds Timer Object to Timer Queue&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; * @param&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pTimerObject : Pointer to Timer Object&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; *&amp;nbsp;&amp;nbsp; @return&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; None&lt;/P&gt;&lt;P&gt; *****************************************************************************&lt;/P&gt;&lt;P&gt; * Adds Timer Object to Timer Queue&lt;/P&gt;&lt;P&gt; *****************************************************************************/&lt;/P&gt;&lt;P&gt;uint_8 AddTimerQ(PTIMER_OBJECT pTimerObject)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; uint_8 index;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if(pTimerObject == NULL)&lt;/P&gt;&lt;P&gt;&amp;nbsp; return (uint_8)ERR_INVALID_PARAM;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if(pTimerObject-&amp;gt;msCount == (unsigned int)INVALID_TIME_COUNT)&lt;/P&gt;&lt;P&gt;&amp;nbsp; return (uint_8)ERR_INVALID_PARAM;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; for(index = 0; index &amp;lt; MAX_TIMER_OBJECTS; index++)&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* Disable Timer Interrupts */&lt;/P&gt;&lt;P&gt;&amp;nbsp; DisableTimerInterrupt();&lt;/P&gt;&lt;P&gt;&amp;nbsp; if(g_TimerObjectArray[index].pfnTimerCallback == NULL)&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp; (void)memcpy(&amp;amp;g_TimerObjectArray[index], pTimerObject, sizeof(TIMER_OBJECT)); &lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Enable Timer Interrupts */&lt;/P&gt;&lt;P&gt;&amp;nbsp; EnableTimerInterrupt();&lt;/P&gt;&lt;P&gt;&amp;nbsp; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Enable Timer Interrupts */&lt;/P&gt;&lt;P&gt;&amp;nbsp; EnableTimerInterrupt();&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; if(index == MAX_TIMER_OBJECTS)&lt;/P&gt;&lt;P&gt;&amp;nbsp; return (uint_8)ERR_TIMER_QUEUE_FULL;&lt;/P&gt;&lt;P&gt;&amp;nbsp; return index;&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; *&amp;nbsp;&amp;nbsp; @name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RemoveTimerQ&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; *&amp;nbsp;&amp;nbsp; @brief&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Removes Timer Object from Timer Queue&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; * @param&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; index : Index of Timer Object&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; *&amp;nbsp;&amp;nbsp; @return&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; None&lt;/P&gt;&lt;P&gt; *****************************************************************************&lt;/P&gt;&lt;P&gt; * Removes Timer Object from Timer Queue&lt;/P&gt;&lt;P&gt; *****************************************************************************/&lt;/P&gt;&lt;P&gt;uint_8 RemoveTimerQ(uint_8 index)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; if(index &amp;gt;= MAX_TIMER_OBJECTS)&lt;/P&gt;&lt;P&gt;&amp;nbsp; return (uint_8)ERR_INVALID_PARAM;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Disable Timer Interrupts */&lt;/P&gt;&lt;P&gt;&amp;nbsp; DisableTimerInterrupt();&lt;/P&gt;&lt;P&gt;&amp;nbsp; (void)memset(&amp;amp;g_TimerObjectArray[index], (int)NULL, sizeof(TIMER_OBJECT));&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Enable Timer Interrupts */&lt;/P&gt;&lt;P&gt;&amp;nbsp; EnableTimerInterrupt();&lt;/P&gt;&lt;P&gt;&amp;nbsp; return (uint_8)ERR_SUCCESS;&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; *&amp;nbsp;&amp;nbsp; @name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TimerInit&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; *&amp;nbsp;&amp;nbsp; @brief&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This is RTC initialization function&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; *&amp;nbsp;&amp;nbsp; @return&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; None&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; ******************************************************************************&lt;/P&gt;&lt;P&gt; * Intiializes the RTC module registers&lt;/P&gt;&lt;P&gt; *****************************************************************************/&lt;/P&gt;&lt;P&gt;static uint_8 TimerInit(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTAD_PTAD5 = 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTAD_PTAD6 = 1;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBD_PTBD0 = 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTADD_PTADD5 = 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTADD_PTADD6 = 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTBDD_PTBDD0 = 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TPM2SC = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TPM2MOD = 1500;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TPM2SC_PS = 0x04;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; EnableTimerInterrupt();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TPM2SC_CLKSx = 0x1;&amp;nbsp; /* Select Internal Clock Source */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ERR_SUCCESS;&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; *&amp;nbsp;&amp;nbsp; @name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EnableTimerInterrupt&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; *&amp;nbsp;&amp;nbsp; @brief&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This routine enables Timer Interrupt&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; *&amp;nbsp;&amp;nbsp; @return&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; None&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; ******************************************************************************&lt;/P&gt;&lt;P&gt; * Enables RTC Timer Interrupt&lt;/P&gt;&lt;P&gt; *****************************************************************************/&lt;/P&gt;&lt;P&gt;static void EnableTimerInterrupt(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Enable Timer Interrupt */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TPM2SC_TOIE = 0x1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; return;&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; *&amp;nbsp;&amp;nbsp; @name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DisableTimerInterrupt&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; *&amp;nbsp;&amp;nbsp; @brief&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This routine disables Timer Interrupt&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; *&amp;nbsp;&amp;nbsp; @return&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; None&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; ******************************************************************************&lt;/P&gt;&lt;P&gt; * Disables RTC Timer Interrupt&lt;/P&gt;&lt;P&gt; *****************************************************************************/&lt;/P&gt;&lt;P&gt;static void DisableTimerInterrupt(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Disable Timer Interrupt */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TPM2SC_TOIE = 0x0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; return;&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; *&amp;nbsp;&amp;nbsp; @name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Timer_ISR&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; *&amp;nbsp;&amp;nbsp; @brief&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This routine services RTC Interrupt&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; * @param&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; None&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; *&amp;nbsp;&amp;nbsp; @return&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; None&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; ******************************************************************************&lt;/P&gt;&lt;P&gt; * Services RTC Interrupt. If a Timer Object expires, then removes the object &lt;/P&gt;&lt;P&gt; * from Timer Queue and Calls the callback function (if registered)&lt;/P&gt;&lt;P&gt; *****************************************************************************/&lt;/P&gt;&lt;P&gt;static void TimerHandler(void);&lt;/P&gt;&lt;P&gt;#if (defined(_MC9S08MM128_H) || defined(_MC9S08JE128_H))&lt;/P&gt;&lt;P&gt;#pragma CODE_SEG NON_BANKED&lt;/P&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;interrupt&amp;nbsp;&amp;nbsp; Timer_ISR(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TimerHandler();&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#if (defined(_MC9S08MM128_H) || defined(_MC9S08JE128_H))&lt;/P&gt;&lt;P&gt;#pragma CODE_SEG DEFAULT&lt;/P&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#if (defined(_MC9S08MM128_H) || defined(_MC9S08JE128_H))&lt;/P&gt;&lt;P&gt;#pragma CODE_SEG NON_BANKED&lt;/P&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;P&gt; interrupt&amp;nbsp; Timer1_ISR(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TimerHandler();&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;#if (defined(_MC9S08MM128_H) || defined(_MC9S08JE128_H))&lt;/P&gt;&lt;P&gt;#pragma CODE_SEG DEFAULT&lt;/P&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;static void TimerHandler(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; uint_8 index;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(TPM2SC &amp;amp; TPM1SC_TOF_MASK)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Clear RTC Interrupt */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TPM2SC_TOF = 0x0;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Call Pending Timer CallBacks */&lt;/P&gt;&lt;P&gt;&amp;nbsp; for (index = 0; index &amp;lt; MAX_TIMER_OBJECTS; index++)&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp; PTIMER_OBJECT ptemp = &amp;amp;g_TimerObjectArray[index];&lt;/P&gt;&lt;P&gt;&amp;nbsp; if(ptemp-&amp;gt;pfnTimerCallback == NULL)&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp; continue;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; ptemp-&amp;gt;msCount--;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if (ptemp-&amp;gt;msCount == 0) &lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PFNTIMER_CALLBACK pfnTimerCallback = ptemp-&amp;gt;pfnTimerCallback;&lt;/P&gt;&lt;P&gt;#ifdef TIMER_CALLBACK_ARG&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; void *parg = ptemp-&amp;gt;arg;&lt;/P&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (void)RemoveTimerQ(index);&lt;/P&gt;&lt;P&gt;#ifdef TIMER_CALLBACK_ARG&lt;/P&gt;&lt;P&gt;&amp;nbsp; pfnTimerCallback(parg);&lt;/P&gt;&lt;P&gt;#else&lt;/P&gt;&lt;P&gt;&amp;nbsp; pfnTimerCallback();&lt;/P&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Anyone know if there is a compatible version for the KL25z for the above code? Thank you.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 10 Apr 2016 21:11:53 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Real-time-counter-for-KL25z/m-p/494216#M30624</guid>
      <dc:creator>pacoshnaidler</dc:creator>
      <dc:date>2016-04-10T21:11:53Z</dc:date>
    </item>
    <item>
      <title>Re: Real time counter for KL25z</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Real-time-counter-for-KL25z/m-p/494217#M30625</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Paco shnaidler,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I am not familiar with mcf51, but if you just want the KL25 RTC driver, we have the KSDK1.3.0 code for your reference.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Please download the KSDK1.3.0 code from this link:&lt;A href="http://kex.freescale.com/en/welcome" title="http://kex.freescale.com/en/welcome"&gt;http://kex.freescale.com/en/welcome&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Select the FRDM-KL25 board, then generate the KSDK1.3.0 code and download it.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; You can find the RTC code in folder: C:\Freescale\KSDK_1.3.0\examples\frdmkl25z\driver_examples\rtc&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Wish it helps you!&lt;/P&gt;&lt;P&gt;If you still have question, please contact me!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Have a great day,&lt;BR /&gt;Jingjing&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 12 Apr 2016 05:26:53 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Real-time-counter-for-KL25z/m-p/494217#M30625</guid>
      <dc:creator>kerryzhou</dc:creator>
      <dc:date>2016-04-12T05:26:53Z</dc:date>
    </item>
    <item>
      <title>Re: Real time counter for KL25z</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Real-time-counter-for-KL25z/m-p/494218#M30626</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Jingjing,&lt;/P&gt;&lt;P&gt;I was able to implement a timer with interrupt, and that solved my problem. Thank you.&lt;/P&gt;&lt;P&gt;I'm experiencing a new problem with the kl25z. It is related to I2c. I'm using processor expert code, and I don't have a consistent results.&lt;/P&gt;&lt;P&gt;I converted the following write function from an old i2c driver to processor expert's write method. I did the following:&lt;/P&gt;&lt;P&gt;converted this:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14604395580258940 jive_text_macro" data-renderedposition="138_8_1192_64" jivemacro_uid="_14604395580258940" modifiedtitle="true"&gt;&lt;P&gt; vfnIICV1Write(DSC_SLAVE_ADDRESS, (UINT8 *)&amp;amp;CmdEcgDiagnosticModeStartMeasurement, 1);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 9pt; line-height: 12pt;"&gt;//To this&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 9pt; line-height: 12pt;"&gt;WriteAccRegs(I2C_DeviceData, &amp;amp;DataState, DSC_SLAVE_ADDRESS, 1, (UINT8 *)&amp;amp;CmdEcgDiagnosticModeStartMeasurement);&lt;/SPAN&gt;&lt;/P&gt;&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 12 Apr 2016 05:40:05 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Real-time-counter-for-KL25z/m-p/494218#M30626</guid>
      <dc:creator>pacoshnaidler</dc:creator>
      <dc:date>2016-04-12T05:40:05Z</dc:date>
    </item>
    <item>
      <title>Re: Real time counter for KL25z</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Real-time-counter-for-KL25z/m-p/494219#M30627</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Paco,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; About the PE I2C code, we still have the according project.&lt;/P&gt;&lt;P&gt;&amp;nbsp; Please download the sample code from this link:&lt;/P&gt;&lt;P&gt;&lt;A href="http://cache.nxp.com/files/32bit/software/KL25_SC.exe?fpsp=1&amp;amp;WT_TYPE=Lab%20and%20Test%20Software&amp;amp;WT_VENDOR=FREESCALE&amp;amp;WT_FILE_FORMAT=exe&amp;amp;WT_ASSET=Downloads&amp;amp;fileExt=.exe" title="http://cache.nxp.com/files/32bit/software/KL25_SC.exe?fpsp=1&amp;amp;WT_TYPE=Lab%20and%20Test%20Software&amp;amp;WT_VENDOR=FREESCALE&amp;amp;WT_FILE_FORMAT=exe&amp;amp;WT_ASSET=Downloads&amp;amp;fileExt=.exe"&gt;http://cache.nxp.com/files/32bit/software/KL25_SC.exe?fpsp=1&amp;amp;WT_TYPE=Lab%20and%20Test%20Software&amp;amp;WT_VENDOR=FREESCALE&amp;amp;WT_…&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; After you install it, you can find it from folder:KL25 Sample Code\kl25_sc_rev10\klxx-sc-pex\projects\MQX_Lite_i2c_demo\cw&lt;/P&gt;&lt;P&gt;&amp;nbsp; It is the codewarrior project.&lt;/P&gt;&lt;P&gt;&amp;nbsp; Besides, you also can use the KSDK1.3.0 driver, the I2C project folder:C:\Freescale\KSDK_1.3.0\examples\frdmkl26z\driver_examples\i2c&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;Wish it helps you!&lt;/P&gt;&lt;P&gt;If you still have question, please contact me!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Have a great day,&lt;BR /&gt;Jingjing&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 12 Apr 2016 05:59:40 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Real-time-counter-for-KL25z/m-p/494219#M30627</guid>
      <dc:creator>kerryzhou</dc:creator>
      <dc:date>2016-04-12T05:59:40Z</dc:date>
    </item>
    <item>
      <title>Re: Real time counter for KL25z</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Real-time-counter-for-KL25z/m-p/494220#M30628</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you for the example codes, I have a question thats confusing me:&lt;/P&gt;&lt;P&gt;Are those ReadAccRegs and WriteAccRegs functions only specific to the MMA845xQ or are they universal? I mean can I use the same functions to read and write from the MED-EKG board for example?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="_jivemacro_uid_14604415963011909 jive_macro_code jive_text_macro" data-renderedposition="138_8_1192_624" jivemacro_uid="_14604415963011909"&gt;&lt;P&gt;bool ReadAccRegs(LDD_TDeviceData *I2CPtr,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TDataState *DataState, uint8_t Address, uint8_t RegCount, uint8_t *Buffer)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; LDD_I2C_TBusState BusState;&lt;/P&gt;&lt;P&gt;&amp;nbsp; DataState-&amp;gt;Sent = FALSE;&lt;/P&gt;&lt;P&gt;&amp;nbsp; I2C_MasterSendBlock(I2CPtr, &amp;amp;Address, sizeof(Address), LDD_I2C_NO_SEND_STOP);&lt;/P&gt;&lt;P&gt;&amp;nbsp; while (!DataState-&amp;gt;Sent) {}&lt;/P&gt;&lt;P&gt;&amp;nbsp; if (!DataState-&amp;gt;Sent) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return FALSE;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; DataState-&amp;gt;Received = FALSE;&lt;/P&gt;&lt;P&gt;&amp;nbsp; I2C_MasterReceiveBlock(I2CPtr, Buffer, RegCount, LDD_I2C_SEND_STOP);&lt;/P&gt;&lt;P&gt;&amp;nbsp; while (!DataState-&amp;gt;Received) {}&lt;/P&gt;&lt;P&gt;&amp;nbsp; do {I2C_CheckBus(I2CPtr, &amp;amp;BusState);}&lt;/P&gt;&lt;P&gt;&amp;nbsp; while (BusState != LDD_I2C_IDLE);&lt;/P&gt;&lt;P&gt;&amp;nbsp; if (!DataState-&amp;gt;Received) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return FALSE;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; return TRUE;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;bool WriteAccRegs(LDD_TDeviceData *I2CPtr,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TDataState *DataState, uint8_t Address, uint8_t RegCount, uint8_t *Data)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; LDD_I2C_TBusState BusState;&lt;/P&gt;&lt;P&gt;&amp;nbsp; const uint8_t MAX_REG_COUNT = 16;&lt;/P&gt;&lt;P&gt;&amp;nbsp; uint8_t SendBuffer[MAX_REG_COUNT];&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; SendBuffer[0] = Address;&lt;/P&gt;&lt;P&gt;&amp;nbsp; memcpy(&amp;amp;SendBuffer[1], Data, RegCount);&lt;/P&gt;&lt;P&gt;&amp;nbsp; DataState-&amp;gt;Sent = FALSE;&lt;/P&gt;&lt;P&gt;&amp;nbsp; I2C_MasterSendBlock(I2CPtr, &amp;amp;SendBuffer, RegCount + 1, LDD_I2C_SEND_STOP);&lt;/P&gt;&lt;P&gt;&amp;nbsp; while (!DataState-&amp;gt;Sent) {}&lt;/P&gt;&lt;P&gt;&amp;nbsp; do {I2C_CheckBus(I2CPtr, &amp;amp;BusState);}&lt;/P&gt;&lt;P&gt;&amp;nbsp; while(BusState != LDD_I2C_IDLE); &lt;/P&gt;&lt;P&gt;&amp;nbsp; if (!DataState-&amp;gt;Sent) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return FALSE;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; return TRUE;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/PRE&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14604415353485784" data-renderedposition="762_8_1192_0" jivemacro_uid="_14604415353485784" modifiedtitle="true"&gt;&lt;P&gt;&lt;/P&gt;&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 12 Apr 2016 06:13:16 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Real-time-counter-for-KL25z/m-p/494220#M30628</guid>
      <dc:creator>pacoshnaidler</dc:creator>
      <dc:date>2016-04-12T06:13:16Z</dc:date>
    </item>
    <item>
      <title>Re: Real time counter for KL25z</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Real-time-counter-for-KL25z/m-p/494221#M30629</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi paco,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; The function ReadAccRegs and WriteAccRegs is for MMA845xQ, but don't worry, I2C_MasterSendBlock and I2C_MasterReceiveBlock are all the universal function. actually, you can modify the function ReadAccRegs and WriteAccRegs to fit your slave device, if your device is the same operation procedure, of course, you can these functions.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; About the MED-EKG compatible, you need to check the MED-EKG document. There has an application about KINETIS MED-EKG, but not for I2C:&lt;/P&gt;&lt;P&gt;&lt;A href="http://cache.nxp.com/files/32bit/doc/app_note/AN4644.pdf?fpsp=1&amp;amp;WT_TYPE=Application%20Notes&amp;amp;WT_VENDOR=FREESCALE&amp;amp;WT_FILE_FORMAT=pdf&amp;amp;WT_ASSET=Documentation&amp;amp;fileExt=.pdf" title="http://cache.nxp.com/files/32bit/doc/app_note/AN4644.pdf?fpsp=1&amp;amp;WT_TYPE=Application%20Notes&amp;amp;WT_VENDOR=FREESCALE&amp;amp;WT_FILE_FORMAT=pdf&amp;amp;WT_ASSET=Documentation&amp;amp;fileExt=.pdf"&gt;http://cache.nxp.com/files/32bit/doc/app_note/AN4644.pdf?fpsp=1&amp;amp;WT_TYPE=Application%20Notes&amp;amp;WT_VENDOR=FREESCALE&amp;amp;WT_FILE_…&lt;/A&gt; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Have a great day,&lt;/P&gt;&lt;P&gt;Jingjing&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 12 Apr 2016 09:32:04 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Real-time-counter-for-KL25z/m-p/494221#M30629</guid>
      <dc:creator>kerryzhou</dc:creator>
      <dc:date>2016-04-12T09:32:04Z</dc:date>
    </item>
  </channel>
</rss>

