EmbeddedRelated.com
Forums

LPC2129 PWM

Started by lehighuboy July 10, 2004
I'm using the Keil uVision IDE tool and the LPC2129. My question is
about setting up single edge hardware PWMs. Someone previously
posted the following code:

REG(PWM0_PR)=0x0000; //no prescaler - one cpu clk is one PWM clk
REG(PWM0_MCR)=0x0002; //Reset timer counter register on match0
REG(PWM0_PCR)=0x7E00; //enable each individual PWM, single edge
REG(PWM0_TCR)=0x000A; //Reset TC counter

REG(PWM0_MR0)=0x0400; //set up the PWM period
REG(PWM0_LER)|=BIT0; //Latch the value

REG(PWM0_MR1)=0x0050; //set up initial PWM duty cycle
REG(PWM0_LER)|=BIT1; //latch the value

REG(PWM0_MR2)=0x0100; //set up initial PWM duty cycle
REG(PWM0_LER)|=BIT2; //latch the value

REG(PWM0_MR3)=0x150; //set up initial PWM duty cycle
REG(PWM0_LER)|=BIT3; //latch the value

REG(PWM0_TCR)=0x0009; //set the TC coutner and enable all PWMs

I added "PINSEL0 = 0x0005800A;" to enable UART1 and PWM 1-3, however
I'm unsure of what else is required to have an output of the initial
PWM duty cycle.

Thanks.



An Engineer's Guide to the LPC2100 Series

Frequency: > 1 kHz
Resolution: 16 bit
Channels: 3

My code generates three 16 bit values (0-65535) that are directly
proportional to 0-100% duty cycle. The following is what I have thus
far:

PINSEL0 = 0x0005800A; //Enable UART1 RxD1/TxD1 & PWM 1, 2, 3

PWMPR = 0x0000; //no prescaler - one cpu clk is one PWM clk
PWMMCR = 0x0002; //Reset timer counter register on match0
PWMPCR = 0x7E00; //enable each individual PWM, single edge
PWMTCR = 0x000A; //Reset TC counter

PWMMR0 = 0x0400; //set up the PWM period

I'm unsure of how to change PWMPR or PWMMR0 to manipulate the
frequency and period respectively. In addition, does PWMMR1 need to
be equated to the 16 bit value in hex in order to set the duty cycle?

Thanks.