<?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: Frequency counter</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/Frequency-counter/m-p/523645#M6281</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by larento on Sat Dec 27 09:23:44 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks everyone for the advises. Finally i got it working. Had modified the library to include Chip_TIMER_WriteCount(...) so that i can reuse for future project. &lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 18:02:29 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T18:02:29Z</dc:date>
    <item>
      <title>Frequency counter</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Frequency-counter/m-p/523642#M6278</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by larento on Sat Dec 27 00:26:53 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi all,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm trying to implement a frequency counter on lpc1769 mcu on LPCXpresso LPC1769. Timer 2 is used as a counter while timer 1 is used as a 1 sec timer interrupt. So far i manage to get counts on P0.4(CAP2.[0]). However the counts are not the&amp;nbsp; same value value that i have input. I.e a 200Hz PWM signal was input to P0.4(CAP2.[0]) however only approximately 183-190Hz(counts) was returned. I have managed to trace down to the Chip_TIMER_Reset(LPC_TIMER2). By disabling this line i'm able to get near to input counts of 200Hz. How can i reset the count timer while counting accurately?&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;
/*
===============================================================================
 Name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : PulseCount.c
 Author&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : $(author)
 Version&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :
 Copyright&amp;nbsp;&amp;nbsp; : $(copyright)
 Description : main definition
===============================================================================
*/

#if defined (__USE_LPCOPEN)
#if defined(NO_BOARD_LIB)
#include "chip.h"
#else
#include "board.h"
#endif
#endif

#include &amp;lt;cr_section_macros.h&amp;gt;

// TODO: insert other include files here

// TODO: insert other definitions and declarations here
uint32_t timerFreq;
uint32_t timer2count;
bool flag;

//function to initialize LED2
void LED2_init()
{
Chip_GPIO_Init(LPC_GPIO);
Chip_GPIO_SetPinDIR(LPC_GPIO,0,22,true);
Chip_GPIO_WritePortBit(LPC_GPIO,0,22,false);
}

//toggle change of LED2 status
void LED2_Toggle()
{
if (Chip_GPIO_GetPinState(LPC_GPIO,0,22)==1)
{
Chip_GPIO_WritePortBit(LPC_GPIO,0,22,false);
}
else
{
Chip_GPIO_WritePortBit(LPC_GPIO,0,22,true);
}

}

//initialise input pin to cap2.0
void timer2_Pin_init()
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
Chip_IOCON_Init(LPC_IOCON);
Chip_IOCON_PinMux(LPC_IOCON, 0, 4 ,IOCON_MODE_INACT, IOCON_FUNC3);
}

//Timer 1 interrupt
void TIMER1_IRQHandler(void)
{
if (Chip_TIMER_MatchPending(LPC_TIMER1, 1)) {
Chip_TIMER_ClearMatch(LPC_TIMER1, 1);
&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; //toggle LED2
LED2_Toggle();
//assign counts to timer count
timer2count = Chip_TIMER_ReadCount(LPC_TIMER2);
flag=true;

}
}


int main(void) {

#if defined (__USE_LPCOPEN)
#if !defined(NO_BOARD_LIB)
&amp;nbsp;&amp;nbsp;&amp;nbsp; // Read clock settings and update SystemCoreClock variable
&amp;nbsp;&amp;nbsp;&amp;nbsp; SystemCoreClockUpdate();
&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set up and initialize all required blocks and
&amp;nbsp;&amp;nbsp;&amp;nbsp; // functions related to the board hardware
&amp;nbsp;&amp;nbsp;&amp;nbsp; Board_Init();
&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set the LED to the state of "On"
&amp;nbsp;&amp;nbsp;&amp;nbsp; Board_LED_Set(0, true);
#endif
#endif

&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Initialize LED2*/
&amp;nbsp;&amp;nbsp;&amp;nbsp; LED2_init();
&amp;nbsp;&amp;nbsp;&amp;nbsp; timer2_Pin_init();
&amp;nbsp;&amp;nbsp;&amp;nbsp; timer2count = 0;

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Enable timer 2 clock */
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_TIMER_Init(LPC_TIMER2);
&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Reset Timer2*/
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_TIMER_Reset(LPC_TIMER2);
&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Capture on rising edge timer*/
&amp;nbsp;&amp;nbsp;&amp;nbsp; //Chip_TIMER_CaptureRisingEdgeEnable(LPC_TIMER2,0);
&amp;nbsp;&amp;nbsp;&amp;nbsp; //LPC_TIMER2-&amp;gt;CCR=1;
&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Set clock source to Rising edge --Count control register*/
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_TIMER_TIMER_SetCountClockSrc(LPC_TIMER2,TIMER_CAPSRC_RISING_CAPN ,1);


&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Enable timer 1 clock*/
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_TIMER_Init(LPC_TIMER1);
&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Timer rate is system clock rate */
&amp;nbsp;&amp;nbsp;&amp;nbsp; timerFreq = Chip_Clock_GetSystemClockRate();
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_TIMER_Reset(LPC_TIMER1);
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_TIMER_MatchEnableInt(LPC_TIMER1, 1);
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_TIMER_SetMatch(LPC_TIMER1, 1, (timerFreq/4-1));
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_TIMER_ResetOnMatchEnable(LPC_TIMER1, 1);


&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Enable Timer 1 &amp;amp; 2*/
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_TIMER_Enable(LPC_TIMER1);
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_TIMER_Enable(LPC_TIMER2);

&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Enable timer 1 interrupt */
&amp;nbsp;&amp;nbsp;&amp;nbsp; NVIC_ClearPendingIRQ(TIMER1_IRQn);
&amp;nbsp;&amp;nbsp;&amp;nbsp; NVIC_EnableIRQ(TIMER1_IRQn);




&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (flag==true)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; //prints the timer2count to debug screen
&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; printf("%u\n",timer2count);
&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; //by disabling this reset line , able to get close to 200Hz(counts)
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_TIMER_Reset(LPC_TIMER2);
&amp;nbsp;&amp;nbsp;&amp;nbsp; flag=false;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0 ;
}
&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 18:02:24 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Frequency-counter/m-p/523642#M6278</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:02:24Z</dc:date>
    </item>
    <item>
      <title>Re: Frequency counter</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Frequency-counter/m-p/523643#M6279</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 Sat Dec 27 01:14:47 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: larento&lt;/STRONG&gt;&lt;BR /&gt;I have managed to trace down to the Chip_TIMER_Reset(LPC_TIMER2). By disabling this line i'm able to get near to input counts of 200Hz. How can i reset the count timer while counting accurately?&lt;BR /&gt;&lt;/SPAN&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Of course it's nonsense to reset Timer2&amp;nbsp;&amp;nbsp; :) &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;You should reset TC after reading it with Chip_TIMER_ReadCount in ISR. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;A Chip_TIMER_WriteCount function should do that, but this function has been forgotten&amp;nbsp; :(( &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:02:27 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Frequency-counter/m-p/523643#M6279</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:02:27Z</dc:date>
    </item>
    <item>
      <title>Re: Frequency counter</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Frequency-counter/m-p/523644#M6280</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by 1234567890 on Sat Dec 27 03:24:28 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: &lt;/STRONG&gt;&lt;BR /&gt;A Chip_TIMER_WriteCount function should do that, but this function has been forgotten Crying&lt;/SPAN&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;That's right, so in this case something like LPC_TIMER2-&amp;gt;TC=0 would be the easiest solution.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;A good example that LPCOpen isn't the best solution for all cases because of it's 'allways save' philosophy. One have to look allways behind the functions what's really done.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;It's better to read timer2 at the very first chance in your timer1 ISR and instantly set TC to zero. A printf and function call (LED) between that results definately in a wrong value.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:02:28 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Frequency-counter/m-p/523644#M6280</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:02:28Z</dc:date>
    </item>
    <item>
      <title>Re: Frequency counter</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Frequency-counter/m-p/523645#M6281</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by larento on Sat Dec 27 09:23:44 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks everyone for the advises. Finally i got it working. Had modified the library to include Chip_TIMER_WriteCount(...) so that i can reuse for future project. &lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:02:29 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Frequency-counter/m-p/523645#M6281</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:02:29Z</dc:date>
    </item>
  </channel>
</rss>

