<?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 Timer set-up problem LPC 1769 in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/Timer-set-up-problem-LPC-1769/m-p/517166#M2040</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Fabienvg on Wed Oct 09 08:06:14 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hello,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm really new to microcontrollers. I tried to set up a timer for the LPC 1769 with interrupt, but I think I'm doing something wrong. For example the prescaler. I set it to 1000-1 AND it looks like, when I test my program,&amp;nbsp; it is set to 1 ms, but I can't imagine it works on only 1 Mhz. I think I'm doing things wrong in the basic configuration. Anyone who can help me out setting up a basic configuration for the timer and interrupt would help me a ton.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;SPAN&gt;User manual: &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.nxp.com%2Fdocuments%2Fuser_manual%2FUM10360.pdf" rel="nofollow noopener noreferrer" target="_blank"&gt;http://www.nxp.com/documents/user_manual/UM10360.pdf&lt;/A&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Basic timer configuration starts at page 490.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
#define TMR16B0TC&amp;nbsp; 0x40004008
#define PCLKSEL0&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; 0x400FC1A8
#define TMR16B0IR 0x40004000
#define TMR16B0TCR 0x40004004
#define TMR16B0PR 0x4000400C
#define TMR16B0MR0 0x40004018
#define TMR16B0MCR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x40004014
#define TMR16B0CTCR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x40004070
#define PCONP 0x400FC0C4
#define ISER0 0xE000E100

int* pCLKSEL0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = (int*) PCLKSEL0;
int* tMR16B0TCR = (int*) TMR16B0TCR;
int* tMR16B0PR = (int*) TMR16B0PR;
int* tMR16B0MR0 = (int*) TMR16B0MR0;
int* tMR16B0MCR = (int*) TMR16B0MCR;
int* tMR16B0CTCR = (int*) TMR16B0CTCR;
int* tMR16B0IR = (int*) TMR16B0IR;
int* iSER0 = (int*) ISER1;
int* tMR16B0TC = (int*) TMR16B0TC;
int* pCONP = (int*) PCONP;

void (*timer_tmr_callback)();

void init()
{
*pCONP = 0x2; 
*pCLKSEL0&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0xC;
*tMR16B0TC&amp;nbsp;&amp;nbsp; = 0x0;
*tMR16B0PR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 1000 - 1;
*tMR16B0CTCR&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0;
*tMR16B0MR0 = 1000;
*tMR16B0MCR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0x05;
}

void timer_async_usec( unsigned int msec, void (*callback)())
{
timer_tmr_callback&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = callback;
*tMR16B0MR0&amp;nbsp;&amp;nbsp;&amp;nbsp; = msec;
*tMR16B0MCR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0x07;
*iSER0&amp;nbsp;&amp;nbsp;&amp;nbsp; = (1 &amp;lt;&amp;lt; 1);
*tMR16B0TCR&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0x2;
*tMR16B0TCR&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0x1;
}

void (TIMER0_IRQHandler(void))
{
*tMR16B0IR = 0x1F;
timer_tmr_callback();
}

&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 17:26:29 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T17:26:29Z</dc:date>
    <item>
      <title>Timer set-up problem LPC 1769</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Timer-set-up-problem-LPC-1769/m-p/517166#M2040</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Fabienvg on Wed Oct 09 08:06:14 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hello,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm really new to microcontrollers. I tried to set up a timer for the LPC 1769 with interrupt, but I think I'm doing something wrong. For example the prescaler. I set it to 1000-1 AND it looks like, when I test my program,&amp;nbsp; it is set to 1 ms, but I can't imagine it works on only 1 Mhz. I think I'm doing things wrong in the basic configuration. Anyone who can help me out setting up a basic configuration for the timer and interrupt would help me a ton.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;SPAN&gt;User manual: &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.nxp.com%2Fdocuments%2Fuser_manual%2FUM10360.pdf" rel="nofollow noopener noreferrer" target="_blank"&gt;http://www.nxp.com/documents/user_manual/UM10360.pdf&lt;/A&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Basic timer configuration starts at page 490.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
#define TMR16B0TC&amp;nbsp; 0x40004008
#define PCLKSEL0&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; 0x400FC1A8
#define TMR16B0IR 0x40004000
#define TMR16B0TCR 0x40004004
#define TMR16B0PR 0x4000400C
#define TMR16B0MR0 0x40004018
#define TMR16B0MCR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x40004014
#define TMR16B0CTCR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x40004070
#define PCONP 0x400FC0C4
#define ISER0 0xE000E100

int* pCLKSEL0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = (int*) PCLKSEL0;
int* tMR16B0TCR = (int*) TMR16B0TCR;
int* tMR16B0PR = (int*) TMR16B0PR;
int* tMR16B0MR0 = (int*) TMR16B0MR0;
int* tMR16B0MCR = (int*) TMR16B0MCR;
int* tMR16B0CTCR = (int*) TMR16B0CTCR;
int* tMR16B0IR = (int*) TMR16B0IR;
int* iSER0 = (int*) ISER1;
int* tMR16B0TC = (int*) TMR16B0TC;
int* pCONP = (int*) PCONP;

void (*timer_tmr_callback)();

void init()
{
*pCONP = 0x2; 
*pCLKSEL0&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0xC;
*tMR16B0TC&amp;nbsp;&amp;nbsp; = 0x0;
*tMR16B0PR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 1000 - 1;
*tMR16B0CTCR&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0;
*tMR16B0MR0 = 1000;
*tMR16B0MCR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0x05;
}

void timer_async_usec( unsigned int msec, void (*callback)())
{
timer_tmr_callback&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = callback;
*tMR16B0MR0&amp;nbsp;&amp;nbsp;&amp;nbsp; = msec;
*tMR16B0MCR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0x07;
*iSER0&amp;nbsp;&amp;nbsp;&amp;nbsp; = (1 &amp;lt;&amp;lt; 1);
*tMR16B0TCR&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0x2;
*tMR16B0TCR&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0x1;
}

void (TIMER0_IRQHandler(void))
{
*tMR16B0IR = 0x1F;
timer_tmr_callback();
}

&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:26:29 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Timer-set-up-problem-LPC-1769/m-p/517166#M2040</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:26:29Z</dc:date>
    </item>
    <item>
      <title>Re: Timer set-up problem LPC 1769</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Timer-set-up-problem-LPC-1769/m-p/517167#M2041</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Pacman on Sun Oct 27 21:18:50 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;First off all, download the &lt;/SPAN&gt;&lt;A href="http://http://sw.lpcware.com"&gt;libraries&lt;/A&gt;&lt;SPAN&gt;&lt;SPAN&gt;&amp;nbsp; - or git clone &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fgit.lpcware.com%2F%28libname" rel="nofollow" target="_blank"&gt;http://git.lpcware.com/(libname&lt;/A&gt;&lt;SPAN&gt;).&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The libraries are distributed as source-code, and you can easily find out how to do things by looking in these sources. (Believe me, you will want to use the libraries!)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Second: It's not always a good idea to declare something 'int'.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;An 'int' can be any size. 8, 16, 32 or 64 bit; the compiler may choose whatever it wants.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;You may want to check your CPU clock frequency.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Is it running on the internal clock frequency ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Is it using a PCLK/4 or PCLK/8 ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;-That could make your timer run at something that feels like 1MHz.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Note: If you used the libraries, your code would be much more readable for people in this forum, which means you would probably get a reply faster.&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:26:30 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Timer-set-up-problem-LPC-1769/m-p/517167#M2041</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:26:30Z</dc:date>
    </item>
    <item>
      <title>Re: Timer set-up problem LPC 1769</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Timer-set-up-problem-LPC-1769/m-p/517168#M2042</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by rocketdawg on Mon Oct 28 08:12:31 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: Pacman&lt;/STRONG&gt;&lt;BR /&gt;First off all, download the &lt;A href="http://http://sw.lpcware.com"&gt;libraries&lt;/A&gt;&lt;SPAN&gt;&amp;nbsp; - or git clone &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fgit.lpcware.com%2F%28libname" rel="nofollow" target="_blank"&gt;http://git.lpcware.com/(libname&lt;/A&gt;&lt;SPAN&gt;).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;The libraries are distributed as source-code, and you can easily find out how to do things by looking in these sources. (Believe me, you will want to use the libraries!)&lt;BR /&gt;&lt;/SPAN&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Yes.&amp;nbsp; And the libraries will have useful defined names for all the magic numbers that are in the code.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Try modifying that code a few months from now!&amp;nbsp;&amp;nbsp; Who knows what&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*iSER0 = (1 &amp;lt;&amp;lt; 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;means?&amp;nbsp; Have to look up the hardware reference.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:26:31 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Timer-set-up-problem-LPC-1769/m-p/517168#M2042</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:26:31Z</dc:date>
    </item>
    <item>
      <title>Re: Timer set-up problem LPC 1769</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Timer-set-up-problem-LPC-1769/m-p/517169#M2043</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Pacman on Mon Oct 28 16:03:28 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Now, I changed your code, so it can be used with the header files from NXP (and ARM):&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;#include "lpc175x_6x.h"
#include "lpc17xx_clkpwr.h"

void (*timer_tmr_callback)();

#define CLKPWR_PCLKSEL_CCLK_DIV_8((uint32_t)(3))/* Ahem.. This definition seems to be missing from the include files. */

void init()
{
LPC_SC-&amp;gt;PCONP = CLKPWR_PCONP_PCTIM0;/* NOTE: Turn off EVERYTHING but timer0! */
LPC_SC-&amp;gt;PCLKSEL0 = CLKPWR_PCLKSEL_SET(CLKPWR_PCLKSEL_TIMER0, CLKPWR_PCLKSEL_CCLK_DIV_8);
LPC_TIM0-&amp;gt;TC = 0x0;
LPC_TIM0-&amp;gt;PR = 1000 - 1;
LPC_TIM0-&amp;gt;CTCR = 0;
LPC_TIM0-&amp;gt;MR0 = 1000;
LPC_TIM0-&amp;gt;MCR = TIM_INT_ON_MATCH(0) | TIM_STOP_ON_MATCH(0);
}

void timer_async_usec( unsigned int msec, void (*callback)())
{
timer_tmr_callback = callback;
LPC_TIM0-&amp;gt;MR0 = msec;
LPC_TIM0-&amp;gt;MCR = TIM_INT_ON_MATCH(0) | TIM_RESET_ON_MATCH(0) | TIM_STOP_ON_MATCH(0);
NVIC-&amp;gt;ISER[1] = (1 &amp;lt;&amp;lt; TIMER0_IRQn);/* using NVIC_EnableIRQ(TIMER0_IRQn); won't hurt */
LPC_TIM0-&amp;gt;TCR = TIM_RESET;
LPC_TIM0-&amp;gt;TCR = TIM_ENABLE;
}

void (TIMER0_IRQHandler(void))
{
LPC_TIM0-&amp;gt;IR = 0x1F;/* note: NXP clears all 32 bits; I suggest using LPC_TIM0-&amp;gt;IR = ~0; */
timer_tmr_callback();
}&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;It's not tested. But as I wrote earlier, I think you want to change your peripheral clock divider for the timer.&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:26:31 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Timer-set-up-problem-LPC-1769/m-p/517169#M2043</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:26:31Z</dc:date>
    </item>
  </channel>
</rss>

