57 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include "LPC17xx.h"
 | 
						|
 | 
						|
unsigned long int duty_cycle = 0;
 | 
						|
int direction = 1;
 | 
						|
int step = 50;
 | 
						|
 | 
						|
void PWM1_IRQHandler(void)
 | 
						|
{
 | 
						|
    if (LPC_PWM1->IR & (1 << 0))
 | 
						|
    {
 | 
						|
        if (direction == 1)
 | 
						|
        {
 | 
						|
            duty_cycle += step;
 | 
						|
            if (duty_cycle >= 3000)
 | 
						|
            {
 | 
						|
                duty_cycle = 3000;
 | 
						|
                direction = 0;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        else
 | 
						|
        {
 | 
						|
            duty_cycle -= step;
 | 
						|
            if (duty_cycle <= 0)
 | 
						|
            {
 | 
						|
                duty_cycle = 0;
 | 
						|
                direction = 1;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        LPC_PWM1->MR4 = duty_cycle;
 | 
						|
        LPC_PWM1->LER = (1 << 4);
 | 
						|
        LPC_PWM1->IR = (1 << 0);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
int main(void)
 | 
						|
{
 | 
						|
    LPC_PINCON->PINSEL3 |= (2 << 14);
 | 
						|
 | 
						|
    LPC_PWM1->TCR = (1 << 1);
 | 
						|
    LPC_PWM1->CTCR = 0;
 | 
						|
    LPC_PWM1->PR = 0;
 | 
						|
 | 
						|
    LPC_PWM1->MR0 = 3000;
 | 
						|
    LPC_PWM1->MR4 = duty_cycle;
 | 
						|
 | 
						|
    LPC_PWM1->MCR = (1 << 1) | (1 << 0);
 | 
						|
    LPC_PWM1->PCR = (1 << 12);
 | 
						|
 | 
						|
    LPC_PWM1->LER = (1 << 0) | (1 << 4);
 | 
						|
 | 
						|
    NVIC_EnableIRQ(PWM1_IRQn);
 | 
						|
 | 
						|
    LPC_PWM1->TCR = (1 << 0) | (1 << 3);
 | 
						|
 | 
						|
    while (1);
 | 
						|
}
 |