<?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>LPC MicrocontrollersのトピックRe: Timer as PWM on LPC1769</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/Timer-as-PWM-on-LPC1769/m-p/522213#M4849</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by kabriolin on Fri Dec 06 03:01:57 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi, &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I can get it working when compiling with no optimisation, but when i switch to -O1 or -O2, with the exactly same code, i have the two output always ON.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;My code is&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;
void Init_Timer(void)
{
uint32_t pclkdiv, pclk;

//TIMER2

LPC_SC-&amp;gt;PCONP |= (0x01&amp;lt;&amp;lt;22);

/* By default, the PCLKSELx value is zero, thus, the PCLK for
all the peripherals is 1/4 of the SystemFrequency. */
/* Bit 12~13 is for TIMER2 */
pclkdiv = (LPC_SC-&amp;gt;PCLKSEL1 &amp;gt;&amp;gt; 12) &amp;amp; 0x03;
switch ( pclkdiv )
{
case 0x00:
default:
pclk = SystemCoreClock/4;
break;
case 0x01:
pclk = SystemCoreClock;
break; 
case 0x02:
pclk = SystemCoreClock/2;
break; 
case 0x03:
pclk = SystemCoreClock/8;
break;
}

//P4.28 &amp;amp; P4.29 as Timer 2 MATCH output
LPC_PINCON-&amp;gt;PINSEL9 |= (0x2&amp;lt;&amp;lt;24)|(0x2&amp;lt;&amp;lt;26);

LPC_TIM2-&amp;gt;TCR = 2;&amp;nbsp; //Reset counter

LPC_TIM2-&amp;gt;IR = 0x0F;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Clear MATx interrupt include DMA request */

LPC_TIM2-&amp;gt;EMR = (1&amp;lt;&amp;lt;4)|(1&amp;lt;&amp;lt;6);

LPC_TIM2-&amp;gt;PR&amp;nbsp; = pclk/10000000; /* set prescaler to get 100K counts/sec */

LPC_TIM2-&amp;gt;MR0 = 0; /* Set up interval */
LPC_TIM2-&amp;gt;MR1 = 0; /* Set up interval */

LPC_TIM2-&amp;gt;MR2 = TIME_INTERVALmS * 0.05F; /* Set up 50us interval */

LPC_TIM2-&amp;gt;MCR = 0x1&amp;lt;&amp;lt;6 | 0x1&amp;lt;&amp;lt;7;/* IT 2, Reset on MR2 */

LPC_TIM2-&amp;gt;TCR = 1;

NVIC_EnableIRQ(TIMER2_IRQn);
}

void TIMER2_IRQHandler (void)
{
LPC_TIM2-&amp;gt;EMR |= (1&amp;lt;&amp;lt;0)|(1&amp;lt;&amp;lt;1);
LPC_TIM2-&amp;gt;IR |= 0x1&amp;lt;&amp;lt;2;/* clear interrupt flag */
}

&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Is it any way to disable optimisations only for this code part or file?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thx&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 17:54:39 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T17:54:39Z</dc:date>
    <item>
      <title>Timer as PWM on LPC1769</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Timer-as-PWM-on-LPC1769/m-p/522211#M4847</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by kabriolin on Tue Sep 24 02:13:54 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Currently developping a new release of an existing personnal board, i'm looking for reaplacing the current 3 uC by an LPC1769.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So I need 6 PWM at 50Hz, that's OK with the PWM module.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;But I need 2 more PWM at 10KHz, I was expecting to use one of the Timer module.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Actually I can only create 2 square waves, change the frequency, but not the dutycycle.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I've use TIMER2, with MAT2.0 and MAT2.1 as channels, and MAT2.2 to reset as I did on LPC1347 on the first release.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;But on GPIO0.6 and GPIO0.7, I can only see two beautiful squares, not really PWMs.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Is it any way to use a TIMER as PWM without using interrupts?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This is my Init code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*By default, the PCLKSELx value is zero, thus, the PCLK for
all the peripherals is 1/4 of the SystemFrequency. */
/* Bit 12~13 is for TIMER2 */
pclkdiv = (LPC_SC-&amp;gt;PCLKSEL1 &amp;gt;&amp;gt; 12) &amp;amp; 0x03;
switch ( pclkdiv )
{
case 0x00:
default:
pclk = SystemCoreClock/4;
break;
case 0x01:
pclk = SystemCoreClock;
break; 
case 0x02:
pclk = SystemCoreClock/2;
break; 
case 0x03:
pclk = SystemCoreClock/8;
break;
}

LPC_PINCON-&amp;gt;PINSEL0 |= (0x1&amp;lt;&amp;lt;12)|(0x1&amp;lt;&amp;lt;13); //P0.6 as MAT2.0
LPC_PINCON-&amp;gt;PINSEL0 |= (0x1&amp;lt;&amp;lt;14)|(0x1&amp;lt;&amp;lt;15); //P0.7 as MAT2.1

LPC_TIM2-&amp;gt;TCR = 2;//Reset counter

LPC_TIM2-&amp;gt;IR = 0x0F;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Clear MATx interrupt include DMA request */

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_TIM2-&amp;gt;EMR |= (1&amp;lt;&amp;lt;0)|(1&amp;lt;&amp;lt;4)|(1&amp;lt;&amp;lt;5); //MAT2.0, toogle on reset
LPC_TIM2-&amp;gt;EMR |= (1&amp;lt;&amp;lt;1)|(1&amp;lt;&amp;lt;6)|(1&amp;lt;&amp;lt;7); //MAT2.1, toogle on reset

LPC_TIM2-&amp;gt;PR&amp;nbsp; = pclk/1000000; /* set prescaler to get 1 M counts/sec */

LPC_TIM2-&amp;gt;MR0 = 5000;&amp;nbsp; /* Set up interval */
LPC_TIM2-&amp;gt;MR1 = 3000;&amp;nbsp; /* Set up interval */

LPC_TIM2-&amp;gt;MR2 = 10000; /* Set up interval */

LPC_TIM2-&amp;gt;MCR = (0x1&amp;lt;&amp;lt;7);/* Reset on MR2 */

LPC_TIM2-&amp;gt;TCR = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Start Timer
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thx&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:54:37 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Timer-as-PWM-on-LPC1769/m-p/522211#M4847</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:54:37Z</dc:date>
    </item>
    <item>
      <title>Re: Timer as PWM on LPC1769</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Timer-as-PWM-on-LPC1769/m-p/522212#M4848</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 Wed Sep 25 10:18:56 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I needed a non-50/50 duty cycle as well.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;What I did, was to make an interrupt, which toggled the compare values.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Thus I got a short ON and a very long OFF cycle.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I do not know if there are any better ways than that, but it's definitely possible to keep an accurate timing (you don't need to toggle the pins manually).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;An alternative could be to use two compare registers and then an external XOR gate to combine them into one square-wave. You can get 6-pin (SC70-6), 8-pin (SOT-23) logic gates, or even smaller gate-chips if necessary.&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:54:38 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Timer-as-PWM-on-LPC1769/m-p/522212#M4848</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:54:38Z</dc:date>
    </item>
    <item>
      <title>Re: Timer as PWM on LPC1769</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Timer-as-PWM-on-LPC1769/m-p/522213#M4849</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by kabriolin on Fri Dec 06 03:01:57 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi, &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I can get it working when compiling with no optimisation, but when i switch to -O1 or -O2, with the exactly same code, i have the two output always ON.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;My code is&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;
void Init_Timer(void)
{
uint32_t pclkdiv, pclk;

//TIMER2

LPC_SC-&amp;gt;PCONP |= (0x01&amp;lt;&amp;lt;22);

/* By default, the PCLKSELx value is zero, thus, the PCLK for
all the peripherals is 1/4 of the SystemFrequency. */
/* Bit 12~13 is for TIMER2 */
pclkdiv = (LPC_SC-&amp;gt;PCLKSEL1 &amp;gt;&amp;gt; 12) &amp;amp; 0x03;
switch ( pclkdiv )
{
case 0x00:
default:
pclk = SystemCoreClock/4;
break;
case 0x01:
pclk = SystemCoreClock;
break; 
case 0x02:
pclk = SystemCoreClock/2;
break; 
case 0x03:
pclk = SystemCoreClock/8;
break;
}

//P4.28 &amp;amp; P4.29 as Timer 2 MATCH output
LPC_PINCON-&amp;gt;PINSEL9 |= (0x2&amp;lt;&amp;lt;24)|(0x2&amp;lt;&amp;lt;26);

LPC_TIM2-&amp;gt;TCR = 2;&amp;nbsp; //Reset counter

LPC_TIM2-&amp;gt;IR = 0x0F;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Clear MATx interrupt include DMA request */

LPC_TIM2-&amp;gt;EMR = (1&amp;lt;&amp;lt;4)|(1&amp;lt;&amp;lt;6);

LPC_TIM2-&amp;gt;PR&amp;nbsp; = pclk/10000000; /* set prescaler to get 100K counts/sec */

LPC_TIM2-&amp;gt;MR0 = 0; /* Set up interval */
LPC_TIM2-&amp;gt;MR1 = 0; /* Set up interval */

LPC_TIM2-&amp;gt;MR2 = TIME_INTERVALmS * 0.05F; /* Set up 50us interval */

LPC_TIM2-&amp;gt;MCR = 0x1&amp;lt;&amp;lt;6 | 0x1&amp;lt;&amp;lt;7;/* IT 2, Reset on MR2 */

LPC_TIM2-&amp;gt;TCR = 1;

NVIC_EnableIRQ(TIMER2_IRQn);
}

void TIMER2_IRQHandler (void)
{
LPC_TIM2-&amp;gt;EMR |= (1&amp;lt;&amp;lt;0)|(1&amp;lt;&amp;lt;1);
LPC_TIM2-&amp;gt;IR |= 0x1&amp;lt;&amp;lt;2;/* clear interrupt flag */
}

&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Is it any way to disable optimisations only for this code part or file?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thx&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:54:39 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Timer-as-PWM-on-LPC1769/m-p/522213#M4849</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:54:39Z</dc:date>
    </item>
    <item>
      <title>Re: Timer as PWM on LPC1769</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Timer-as-PWM-on-LPC1769/m-p/522214#M4850</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by R2D2 on Fri Dec 06 04:02:31 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: kabriolin&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Is it any way to disable optimisations only for this code part or file?&lt;BR /&gt;&lt;/SPAN&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;SPAN&gt;See #4 of &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.lpcware.com%2Fcontent%2Fforum%2Flpc1114-32bit-timer-resolution" rel="nofollow" target="_blank"&gt;http://www.lpcware.com/content/forum/lpc1114-32bit-timer-resolution&lt;/A&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:54:39 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Timer-as-PWM-on-LPC1769/m-p/522214#M4850</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:54:39Z</dc:date>
    </item>
  </channel>
</rss>

