<?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: problem using two input capture  in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/problem-using-two-input-capture/m-p/522141#M4777</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by MikeSimmonds on Mon Jan 18 04:54:06 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I did not go deep, but ...&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;1) Timer 1 Init does not have an "Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_TIMER1);" maybe this is enabled out of reset,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;but why rely on that?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;2) In Timer 2 IRQ, the first two calls are using the TIMER &lt;/SPAN&gt;&lt;STRONG&gt;ONE&lt;/STRONG&gt;&lt;SPAN&gt; equate!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;HTH, Mike.&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 16:38:16 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T16:38:16Z</dc:date>
    <item>
      <title>problem using two input capture</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/problem-using-two-input-capture/m-p/522140#M4776</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by eplant_lab on Mon Jan 18 04:34:50 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hello, we have an application in which we have to monitor two signals ( square wave ), using a LPC1765&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;If the signal is present we have to detect the frequency.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;we use input capture pin CAP1.0 and CAP1.1. We use TIMER1 for CAP1.0 and TIMER2 for CAP1.1.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;these are the TIMER init functions&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;

void TIMER1_Init(void) {

NVIC_DisableIRQ(TIMER1_IRQn);
NVIC_ClearPendingIRQ(TIMER1_IRQn);

Chip_TIMER_Init(LPC_TIMER1);
Chip_TIMER_Reset(LPC_TIMER1);

Chip_TIMER_PrescaleSet(LPC_TIMER1, (uint32_t) TIMER1_PRESCALE);

Chip_TIMER_CaptureRisingEdgeEnable(LPC_TIMER1, CAP_0);
Input1CaptureEdge = RISING_EDGE;

Chip_TIMER_CaptureEnableInt(LPC_TIMER1, CAP_0);

Chip_TIMER_MatchEnableInt(LPC_TIMER1, 1);
Chip_TIMER_SetMatch(LPC_TIMER1, 1, DETECT_TIME);
Chip_TIMER_ResetOnMatchEnable(LPC_TIMER1, 1);

Chip_TIMER_Enable(LPC_TIMER1);
NVIC_SetPriority(TIMER1_IRQn, 5);
NVIC_EnableIRQ(TIMER1_IRQn);

}


void TIMER2_Init(void) {

NVIC_DisableIRQ(TIMER2_IRQn);
NVIC_ClearPendingIRQ(TIMER2_IRQn);

Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_TIMER2);

Chip_TIMER_Init(LPC_TIMER2);
Chip_TIMER_Reset(LPC_TIMER2);

Chip_TIMER_PrescaleSet(LPC_TIMER2, (uint32_t) TIMER2_PRESCALE);

Chip_TIMER_CaptureRisingEdgeEnable(LPC_TIMER2, CAP_1);
Chip_TIMER_ClearCapture(LPC_TIMER2, CAP_1);

Chip_TIMER_CaptureEnableInt(LPC_TIMER2, CAP_1);

Chip_TIMER_MatchEnableInt(LPC_TIMER2, 2);
Chip_TIMER_SetMatch(LPC_TIMER2, 2, DETECT_TIME);
Chip_TIMER_ResetOnMatchEnable(LPC_TIMER2, 2);

Chip_TIMER_Enable(LPC_TIMER2);
NVIC_SetPriority(TIMER2_IRQn, 5);
NVIC_EnableIRQ(TIMER2_IRQn);
}

&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;BR /&gt;&lt;SPAN&gt;and these the interrupt routines&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;
void TIMER1_IRQHandler(void) {

if (Chip_TIMER_CapturePending(LPC_TIMER1, CAP_0))&amp;nbsp;&amp;nbsp; // if a rising edge on CAP1.0 is detected
{
//do something
Chip_TIMER_ClearCapture(LPC_TIMER1, CAP_0);
}

else if (Chip_TIMER_MatchPending(LPC_TIMER1, 1)) {&amp;nbsp; // if no rising edge is detected for DETECT_TIME
//do something
Chip_TIMER_ClearMatch(LPC_TIMER1, 1);
}
}

void TIMER2_IRQHandler(void)
{
if (Chip_TIMER_CapturePending(LPC_TIMER1, CAP_1))&amp;nbsp;&amp;nbsp; // if a rising edge on CAP1.1 is detected
{
//do something
Chip_TIMER_ClearCapture(LPC_TIMER1, CAP_1;
}

else if (Chip_TIMER_MatchPending(LPC_TIMER2, 2)) {&amp;nbsp; // if no rising edge is detected for DETECT_TIME
//do something
Chip_TIMER_ClearMatch(LPC_TIMER2, 2);
}
}

&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;SPAN&gt;For TIMER1 interrupt we have no problems, in TIMER2 it seems that the input capture doesn't work as the handler is entered only when the macth condition occurs.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;We tried to switch the cap pin, but the problem is still present on the TIMER2 Interrupt handler, so we think the problem is in the init, but we can't find where is the error.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Any suggestions?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 16:38:15 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/problem-using-two-input-capture/m-p/522140#M4776</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T16:38:15Z</dc:date>
    </item>
    <item>
      <title>Re: problem using two input capture</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/problem-using-two-input-capture/m-p/522141#M4777</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by MikeSimmonds on Mon Jan 18 04:54:06 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I did not go deep, but ...&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;1) Timer 1 Init does not have an "Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_TIMER1);" maybe this is enabled out of reset,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;but why rely on that?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;2) In Timer 2 IRQ, the first two calls are using the TIMER &lt;/SPAN&gt;&lt;STRONG&gt;ONE&lt;/STRONG&gt;&lt;SPAN&gt; equate!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;HTH, Mike.&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 16:38:16 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/problem-using-two-input-capture/m-p/522141#M4777</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T16:38:16Z</dc:date>
    </item>
    <item>
      <title>Re: problem using two input capture</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/problem-using-two-input-capture/m-p/522142#M4778</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 Mon Jan 18 05:26:36 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: eplant_lab&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;Any suggestions?&lt;/SPAN&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Yes, post a complete project...&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 16:38:16 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/problem-using-two-input-capture/m-p/522142#M4778</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T16:38:16Z</dc:date>
    </item>
    <item>
      <title>Re: problem using two input capture</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/problem-using-two-input-capture/m-p/522143#M4779</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by eplant_lab on Mon Jan 18 06:18:54 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;thanks for reply!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: MikeSimmonds&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;1) Timer 1 Init does not have an "Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_TIMER1);" maybe this is enabled out of reset,&lt;BR /&gt;but why rely on that?&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;1) Right. I will add this line to the project. (But the problem is not on TIMER1)&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 TIMER1_Init(void) {

NVIC_DisableIRQ(TIMER1_IRQn);
NVIC_ClearPendingIRQ(TIMER1_IRQn);

Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_TIMER1);

Chip_TIMER_Init(LPC_TIMER1);
Chip_TIMER_Reset(LPC_TIMER1);

Chip_TIMER_PrescaleSet(LPC_TIMER1, (uint32_t) TIMER1_PRESCALE);

Chip_TIMER_CaptureRisingEdgeEnable(LPC_TIMER1, CAP_0);

Chip_TIMER_CaptureEnableInt(LPC_TIMER1, CAP_0);

Chip_TIMER_MatchEnableInt(LPC_TIMER1, 1);
Chip_TIMER_SetMatch(LPC_TIMER1, 1, ENGINE_OFF_DETECT_TIME_MS);
Chip_TIMER_ResetOnMatchEnable(LPC_TIMER1, 1);

Chip_TIMER_Enable(LPC_TIMER1);
NVIC_SetPriority(TIMER1_IRQn, 5);
NVIC_EnableIRQ(TIMER1_IRQn);

}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: MikeSimmonds&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;2) In Timer 2 IRQ, the first two calls are using the TIMER ONE equate!&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Ops... this is a error I made in " cut and paste " from code editor&amp;nbsp; :~ , the problem is present with correct equate&lt;/SPAN&gt;&lt;BR /&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 TIMER2_IRQHandler(void) {
if (Chip_TIMER_CapturePending(LPC_TIMER2, 1)) {
//do something
Chip_TIMER_ClearCapture(LPC_TIMER2, CAP_1);
}

else if (Chip_TIMER_MatchPending(LPC_TIMER2, 2))
{
//do something
Chip_TIMER_ClearMatch(LPC_TIMER2, 2);
}
}

&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The TIMER1 and TIMER2 init are called in this SetupHardware func&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;
/* Sets up system hardware */
static void prvSetupHardware(void)
{
// other init

Chip_GPIO_Init(LPC_GPIO);
Chip_IOCON_Init(LPC_IOCON);

Chip_GPIO_WriteDirBit(LPC_GPIO, 1, 18, false); 
Chip_GPIO_WriteDirBit(LPC_GPIO, 1, 19, false); 
Chip_IOCON_PinMux(LPC_IOCON, 1, 18, IOCON_MODE_INACT , IOCON_FUNC3);
Chip_IOCON_PinMux(LPC_IOCON, 1, 19, IOCON_MODE_INACT , IOCON_FUNC3);


TIMER1_Init();
TIMER2_Init();

}

&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;and this is the main&amp;nbsp; ( it's a FreeRTOS tipical main )&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;
int main(void)
{
SystemCoreClockUpdate();
prvSetupHardware();
VariableInit();

xTaskCreate(tMain, (signed char *) "Main",StackMain, NULL, 4, (xTaskHandle *) NULL);
xTaskCreate(tTask1, (signed char *) "Task1",StackTask1, NULL, 2, (xTaskHandle *) NULL);
xTaskCreate(tTask2, (signed char *) "Task2",StackTask2, NULL, 2, (xTaskHandle *) NULL);

/* Start the scheduler */
vTaskStartScheduler();

return 1;
}

&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 16:38:17 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/problem-using-two-input-capture/m-p/522143#M4779</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T16:38:17Z</dc:date>
    </item>
    <item>
      <title>Re: problem using two input capture</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/problem-using-two-input-capture/m-p/522144#M4780</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 Mon Jan 18 07:57:43 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: eplant_lab&lt;/STRONG&gt;&lt;BR /&gt;we use input capture pin CAP1.0 and CAP1.1.[color=#f00] We use TIMER1 for CAP1.0 and TIMER2 for CAP1.1.[/color]&lt;BR /&gt;&lt;/SPAN&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;That's complete nonsense and here your problems are probably starting...&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 16:38:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/problem-using-two-input-capture/m-p/522144#M4780</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T16:38:18Z</dc:date>
    </item>
    <item>
      <title>Re: problem using two input capture</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/problem-using-two-input-capture/m-p/522145#M4781</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by serge on Mon Jan 18 07:58:48 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Does the LPC17xx has Chip_IOCON_PinMux?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 16:38:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/problem-using-two-input-capture/m-p/522145#M4781</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T16:38:18Z</dc:date>
    </item>
    <item>
      <title>Re: problem using two input capture</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/problem-using-two-input-capture/m-p/522146#M4782</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 Mon Jan 18 08:02:06 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: serge&lt;/STRONG&gt;&lt;BR /&gt;Does the LPC17xx has Chip_IOCON_PinMux?&lt;/SPAN&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LPCOpen has a Chip_IOCON_PinMux function&amp;nbsp; &lt;SPAN class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;&lt;LI-EMOJI id="lia_slightly-smiling-face" title=":slightly_smiling_face:"&gt;&lt;/LI-EMOJI&gt;&lt;/SPAN&gt; &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;
/* Setup pin modes and function */
void Chip_IOCON_PinMux(LPC_IOCON_T *pIOCON, uint8_t port, uint8_t pin, uint32_t mode, uint8_t func)
{
uint8_t reg, bitPos;
uint32_t temp;

/* Adjust the mode selection bits from 3:2 to bits 1:0 to write them to PINMODE. */
mode &amp;gt;&amp;gt;= 2;

bitPos =&amp;nbsp; IOCON_BIT_INDEX(pin);
reg = IOCON_REG_INDEX(port,pin);

temp = pIOCON-&amp;gt;PINSEL[reg] &amp;amp; ~(0x03UL &amp;lt;&amp;lt; bitPos);
pIOCON-&amp;gt;PINSEL[reg] = temp | (func &amp;lt;&amp;lt; bitPos);

temp = pIOCON-&amp;gt;PINMODE[reg] &amp;amp; ~(0x03UL &amp;lt;&amp;lt; bitPos);
pIOCON-&amp;gt;PINMODE[reg] = temp | (mode &amp;lt;&amp;lt; bitPos);
}
&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 16:38:19 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/problem-using-two-input-capture/m-p/522146#M4782</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T16:38:19Z</dc:date>
    </item>
  </channel>
</rss>

