/*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->PCLKSEL1 >> 12) & 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->PINSEL0 |= (0x1<<12)|(0x1<<13); //P0.6 as MAT2.0 LPC_PINCON->PINSEL0 |= (0x1<<14)|(0x1<<15); //P0.7 as MAT2.1 LPC_TIM2->TCR = 2;//Reset counter LPC_TIM2->IR = 0x0F; /* Clear MATx interrupt include DMA request */ LPC_TIM2->EMR |= (1<<0)|(1<<4)|(1<<5); //MAT2.0, toogle on reset LPC_TIM2->EMR |= (1<<1)|(1<<6)|(1<<7); //MAT2.1, toogle on reset LPC_TIM2->PR = pclk/1000000; /* set prescaler to get 1 M counts/sec */ LPC_TIM2->MR0 = 5000; /* Set up interval */ LPC_TIM2->MR1 = 3000; /* Set up interval */ LPC_TIM2->MR2 = 10000; /* Set up interval */ LPC_TIM2->MCR = (0x1<<7);/* Reset on MR2 */ LPC_TIM2->TCR = 1; //Start Timer } |
void Init_Timer(void) { uint32_t pclkdiv, pclk; //TIMER2 LPC_SC->PCONP |= (0x01<<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->PCLKSEL1 >> 12) & 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 & P4.29 as Timer 2 MATCH output LPC_PINCON->PINSEL9 |= (0x2<<24)|(0x2<<26); LPC_TIM2->TCR = 2; //Reset counter LPC_TIM2->IR = 0x0F; /* Clear MATx interrupt include DMA request */ LPC_TIM2->EMR = (1<<4)|(1<<6); LPC_TIM2->PR = pclk/10000000; /* set prescaler to get 100K counts/sec */ LPC_TIM2->MR0 = 0; /* Set up interval */ LPC_TIM2->MR1 = 0; /* Set up interval */ LPC_TIM2->MR2 = TIME_INTERVALmS * 0.05F; /* Set up 50us interval */ LPC_TIM2->MCR = 0x1<<6 | 0x1<<7;/* IT 2, Reset on MR2 */ LPC_TIM2->TCR = 1; NVIC_EnableIRQ(TIMER2_IRQn); } void TIMER2_IRQHandler (void) { LPC_TIM2->EMR |= (1<<0)|(1<<1); LPC_TIM2->IR |= 0x1<<2;/* clear interrupt flag */ } |