Content originally posted in LPCWare by SnEAky on Thu Mar 18 09:21:30 MST 2010
My PWM init:
void PWM_init(void){
/** Timer 16 / PWM Settings **/
// PWM output: 16bit_timer1
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<8); // Enable clock to timer 1
LPC_IOCON->PIO1_9 &= ~0x1F; // - remove bits 0,1 & 2 and pull resistors
LPC_IOCON->PIO1_9 |= 0x01; /* Timer1_16 MAT0 */ //- set bit 1
LPC_IOCON->PIO1_10 &= ~0x1F; // - remove bits 0,1 & 2 and pull resistors
LPC_IOCON->PIO1_10 |= 0x02; /* Timer1_16 MAT1 */
LPC_TMR16B1->MCR = 0x0400; /* Reset at MR3*/
LPC_TMR16B1->PR = 50; /* set prescaler 50*28800 = 72MHz */
LPC_TMR16B1->MR1 = 7000; /* Match register 1 - no PWM - toggle test */
LPC_TMR16B1->MR3 = 28800;//14399; /* Match register 3 - cycle length */
LPC_TMR16B1->EMR = 0xC2; /* External Match register Settings for PWM channel have no effect.*/
LPC_TMR16B1->PWMC = 0x01; /* PWMC register -MAT0 is PWM. */
GPIOSetDir( 1, 9, 0 ); // Set as output
GPIOSetDir( 1, 10, 1 ); // set as output
LPC_TMR16B1->TCR = 1; // Enable timer 1
}
My main uses:
PWM_init();
xTaskCreate( vUserTask1, ( signed portCHAR * ) "Task1", USERTASK_STACK_SIZE, NULL, 1, NULL );
vTaskStartScheduler();
the vUserTask1 looks like this:
LPC_TMR16B1->MR0 = 28800-2880; /* Match register 0 - pulse width */
Thats how my code looks like in big lines. So nothing special, you might say. But for some reason I'm not getting a PWM output on P1.09 not 1.10
Is it just me who's overseeing something, or am I getting a conflict somewhere?
I hope someone can help me