/* =============================================================================== Name : PulseCount.c Author : $(author) Version : Copyright : $(copyright) Description : main definition =============================================================================== */ #if defined (__USE_LPCOPEN) #if defined(NO_BOARD_LIB) #include "chip.h" #else #include "board.h" #endif #endif #include <cr_section_macros.h> // 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() { 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); //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) // Read clock settings and update SystemCoreClock variable SystemCoreClockUpdate(); // Set up and initialize all required blocks and // functions related to the board hardware Board_Init(); // Set the LED to the state of "On" Board_LED_Set(0, true); #endif #endif /*Initialize LED2*/ LED2_init(); timer2_Pin_init(); timer2count = 0; /* Enable timer 2 clock */ Chip_TIMER_Init(LPC_TIMER2); /*Reset Timer2*/ Chip_TIMER_Reset(LPC_TIMER2); /*Capture on rising edge timer*/ //Chip_TIMER_CaptureRisingEdgeEnable(LPC_TIMER2,0); //LPC_TIMER2->CCR=1; /*Set clock source to Rising edge --Count control register*/ Chip_TIMER_TIMER_SetCountClockSrc(LPC_TIMER2,TIMER_CAPSRC_RISING_CAPN ,1); /*Enable timer 1 clock*/ Chip_TIMER_Init(LPC_TIMER1); /* Timer rate is system clock rate */ timerFreq = Chip_Clock_GetSystemClockRate(); Chip_TIMER_Reset(LPC_TIMER1); Chip_TIMER_MatchEnableInt(LPC_TIMER1, 1); Chip_TIMER_SetMatch(LPC_TIMER1, 1, (timerFreq/4-1)); Chip_TIMER_ResetOnMatchEnable(LPC_TIMER1, 1); /*Enable Timer 1 & 2*/ Chip_TIMER_Enable(LPC_TIMER1); Chip_TIMER_Enable(LPC_TIMER2); /* Enable timer 1 interrupt */ NVIC_ClearPendingIRQ(TIMER1_IRQn); NVIC_EnableIRQ(TIMER1_IRQn); while(1) { if (flag==true) { //prints the timer2count to debug screen printf("%u\n",timer2count); //by disabling this reset line , able to get close to 200Hz(counts) Chip_TIMER_Reset(LPC_TIMER2); flag=false; } } return 0 ; } |