#ifdef __USE_CMSIS #include "LPC17xx.h" #endif #include <cr_section_macros.h> #include <NXP/crp.h> __CRP const unsigned int CRP_WORD = CRP_NO_CRP ; enum { PCTIM0 = 1, MR0 = 0, MR1 = 3 }; int main(void) { LPC_SC->PCONP |= (1 << PCTIM0); // turn power for TIMER0 on LPC_TIM0->MR0 = 1000; // match register 0 LPC_TIM0->MCR |= (0x3<< MR0); // Interrupt + reset LPC_TIM0->MR1 = PWM_VALUE; // match register 1 LPC_TIM0->MCR |= (0x1<< MR1); // interrupt if MR1 = TC LPC_TIM0->TCR = 1; // enable Timer0 NVIC_EnableIRQ(TIMER0_IRQn); LPC_GPIO0->FIODIR |= (1 << 22); // LED pin while(1) asm volatile("nop"); return 0 ; } void TIMER0_IRQHandler(void) { if (LPC_TIM0->IR & (0x1 << 0)) //Interrupt flag for match channel 0. { LPC_TIM0->IR = (0x1 << 0); //kill flag LPC_GPIO0->FIOSET |= (1 << 22); } if (LPC_TIM0->IR & (0x1 << 1)) //Interrupt flag for match channel 1. { LPC_TIM0->IR = (0x1 << 1); //kill flag LPC_GPIO0->FIOCLR |= (1 << 22); } } |
LPC_TIM0->PR = 9; //prescaler 10 |
//init PWM LPC_SC->PCONP |= (1 << 6); //PWM on LPC_PINCON->PINSEL4 &=~3; //reset LPC_PINCON->PINSEL4 |= 1; //set PWM1.1 at P2.0 LPC_PWM1->TCR = 2; //counter reset LPC_PWM1->PR = 24; //clock /4 / prescaler (= PR +1) = 1 µs LPC_PWM1->MCR = (1<<1); //reset on MR0 LPC_PWM1->MR0 = 1000; //set PWM cycle 1khz LPC_PWM1->MR1 = 999; //set duty LPC_PWM1->LER = (1<<0)|(1<<1); //latch MR0 & MR1 LPC_PWM1->PCR = (1<<9); //PWM1 output enable LPC_PWM1->TCR = (1<<0)|(1<<3); //counter enable, PWM enable |