void AVALON_PWM_Init(void) { /* System CLK 48MHz */ Chip_TIMER_Init(LPC_TIMER16_0); Chip_TIMER_Disable(LPC_TIMER16_0); /* CT16B0_MAT0/CT16B0_MAT1/CT16B0_MAT2 Init */ Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 8, IOCON_FUNC2 | IOCON_MODE_INACT); Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 9, IOCON_FUNC2 | IOCON_MODE_INACT); Chip_IOCON_PinMuxSet(LPC_IOCON, 1, 15, IOCON_FUNC2 | IOCON_MODE_INACT); /* CT16B0_MAT0 duty:50% */ Chip_TIMER_ExtMatchControlSet(LPC_TIMER16_0, 1, TIMER_EXTMATCH_TOGGLE, 0); Chip_TIMER_SetMatch(LPC_TIMER16_0, 0, DUTY_50); /* CT16B0_MAT1 duty:25% */ Chip_TIMER_ExtMatchControlSet(LPC_TIMER16_0, 1, TIMER_EXTMATCH_TOGGLE, 1); Chip_TIMER_SetMatch(LPC_TIMER16_0, 1, DUTY_25); /* CT16B0_MAT2 duty:10% */ Chip_TIMER_ExtMatchControlSet(LPC_TIMER16_0, 1, TIMER_EXTMATCH_TOGGLE, 2); Chip_TIMER_SetMatch(LPC_TIMER16_0, 2, DUTY_10); /* Prescale 0 */ Chip_TIMER_PrescaleSet(LPC_TIMER16_0, 0); /* PWM Period 800Hz */ Chip_TIMER_SetMatch(LPC_TIMER16_0, 3, DUTY_100); Chip_TIMER_ResetOnMatchEnable(LPC_TIMER16_0, 3); /* CT16B0_MAT0/CT16B0_MAT1/CT16B0_MAT2 Enable */ LPC_TIMER16_0->PWMC = 0x7;//pwm Chip_TIMER_Enable(LPC_TIMER16_0); }
void AVALON_PWM_SetDuty(AVALON_PWM_e pwm, unsigned char duty) { if ((pwm >= AVALON_PWM_GREEN) && (pwm < AVALON_PWM_MAX)) { Chip_TIMER_ClearMatch(LPC_TIMER16_0, pwm); Chip_TIMER_ExtMatchControlSet(LPC_TIMER16_0, 1, TIMER_EXTMATCH_SET, (int8_t)pwm); Chip_TIMER_SetMatch(LPC_TIMER16_0, pwm, (uint32_t)duty); } }
uint32_t PWMSetPeriod(uint8_t channel, uint32_t period) { if (channel > CHANNEL_C_TIMER_INDEX) { return 1; } if (eDVSMode != EDVS_MODE_INTERNAL && channel == 0) { return 1; // channel 0 taken for master/slave mode } LPC_TIMER_T * timer = halTimers[channel].timer; halTimers[channel].period = period; /** * If the period equal 0, the timer is disable and its outputs are set as GPIO and driven low. */ if (period == 0) { Chip_TIMER_DeInit(timer); //Stop the timer Chip_TIMER_SetMatch(timer, 2, 0); halTimers[channel].enabled[0] = DISABLE; halTimers[channel].enabled[1] = DISABLE; Chip_GPIO_SetPinDIRInput(LPC_GPIO_PORT, halTimers[channel].portGpio[0], halTimers[channel].pinGpio[0]); Chip_GPIO_SetPinDIRInput(LPC_GPIO_PORT, halTimers[channel].portGpio[1], halTimers[channel].pinGpio[1]); Chip_GPIO_SetPinOutLow(LPC_GPIO_PORT, halTimers[channel].portGpio[0], halTimers[channel].pinGpio[0]); Chip_GPIO_SetPinOutLow(LPC_GPIO_PORT, halTimers[channel].portGpio[1], halTimers[channel].pinGpio[1]); Chip_SCU_PinMuxSet(halTimers[channel].port[0], halTimers[channel].pin[0], halTimers[channel].gpioMode[0]); Chip_SCU_PinMuxSet(halTimers[channel].port[1], halTimers[channel].pin[1], halTimers[channel].gpioMode[1]); } else { /** * The channel match 2 is used as the controller of the base frequency. * When there is a match on this channel, the timer is reset and the external match bit * is set to 1. * The M0 core is looking for this change and it sets the output of the channels to high. */ Chip_TIMER_Init(timer); Chip_TIMER_Disable(timer); Chip_TIMER_Reset(timer); /** * The Main clock is running at 192Mhz so set the Prescaler in order to have * a 1 Mhz timer. Timer_CLK = Main_CLK/ (PR+1) */ Chip_TIMER_PrescaleSet(timer, 191); Chip_TIMER_ResetOnMatchEnable(timer, 2); Chip_TIMER_StopOnMatchDisable(timer, 2); Chip_TIMER_MatchDisableInt(timer, 2); Chip_TIMER_SetMatch(timer, 2, period); //Reconfigure match channels! if (halTimers[channel].enabled[0]) { PWMSetWidth(channel, 0, halTimers[channel].witdh[0]); } if (halTimers[channel].enabled[1]) { PWMSetWidth(channel, 1, halTimers[channel].witdh[1]); } Chip_TIMER_ExtMatchControlSet(timer, 0, TIMER_EXTMATCH_SET, 2); // Clear interrupt pending timer->IR = 0xFFFFFFFF; Chip_TIMER_Enable(timer); } return 0; }
void AVALON_PWM_Init(void) { /* System CLK 48MHz */ Chip_TIMER_Init(LPC_TIMER16_0); Chip_TIMER_Disable(LPC_TIMER16_0); /* CT16B0_MAT0/CT16B0_MAT1/CT16B0_MAT2 Init */ Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 8, IOCON_FUNC2 | IOCON_MODE_INACT); Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 9, IOCON_FUNC2 | IOCON_MODE_INACT); Chip_IOCON_PinMuxSet(LPC_IOCON, 1, 15, IOCON_FUNC2 | IOCON_MODE_INACT); /* CT16B0_MAT0 duty:50% */ Chip_TIMER_ExtMatchControlSet(LPC_TIMER16_0, 1, TIMER_EXTMATCH_SET, 0); Chip_TIMER_SetMatch(LPC_TIMER16_0, 0, DUTY_0); /* CT16B0_MAT1 duty:25% */ Chip_TIMER_ExtMatchControlSet(LPC_TIMER16_0, 1, TIMER_EXTMATCH_SET, 1); Chip_TIMER_SetMatch(LPC_TIMER16_0, 1, DUTY_0); /* CT16B0_MAT2 duty:10% */ Chip_TIMER_ExtMatchControlSet(LPC_TIMER16_0, 1, TIMER_EXTMATCH_SET, 2); Chip_TIMER_SetMatch(LPC_TIMER16_0, 2, DUTY_0); }
void setupTimer(void) { Chip_IOCON_PinMux(LPC_IOCON, 1, 28, 2, 3); Chip_GPIO_SetPinDIROutput(LPC_GPIO, 1, 28); Chip_TIMER_Init(LPC_TIMER0); Chip_TIMER_Reset(LPC_TIMER0); Chip_TIMER_PrescaleSet(LPC_TIMER0, 500); Chip_TIMER_SetMatch(LPC_TIMER0, 0, 16000); Chip_TIMER_ResetOnMatchEnable(LPC_TIMER0, 0); // Chip_TIMER_MatchEnableInt(LPC_TIMER0, 0); Chip_TIMER_ExtMatchControlSet(LPC_TIMER0, RESET, TIMER_EXTMATCH_TOGGLE, 0); Chip_TIMER_Enable(LPC_TIMER0); // NVIC_ClearPendingIRQ(TIMER0_IRQn); // NVIC_EnableIRQ(TIMER0_IRQn); }
void PWMInit(void) { halTimers[CHANNEL_A_TIMER_INDEX].timer = CHANNEL_A_TIMER; halTimers[CHANNEL_A_TIMER_INDEX].port[0] = CHANNEL_A_0_PORT; halTimers[CHANNEL_A_TIMER_INDEX].port[1] = CHANNEL_A_1_PORT; halTimers[CHANNEL_A_TIMER_INDEX].pin[0] = CHANNEL_A_0_PIN; halTimers[CHANNEL_A_TIMER_INDEX].pin[1] = CHANNEL_A_1_PIN; halTimers[CHANNEL_A_TIMER_INDEX].portGpio[0] = CHANNEL_A_0_PORT_GPIO; halTimers[CHANNEL_A_TIMER_INDEX].portGpio[1] = CHANNEL_A_1_PORT_GPIO; halTimers[CHANNEL_A_TIMER_INDEX].pinGpio[0] = CHANNEL_A_0_PIN_GPIO; halTimers[CHANNEL_A_TIMER_INDEX].pinGpio[1] = CHANNEL_A_1_PIN_GPIO; halTimers[CHANNEL_A_TIMER_INDEX].timerMode[0] = MD_PUP | FUNC6; halTimers[CHANNEL_A_TIMER_INDEX].timerMode[1] = MD_PUP | FUNC6; halTimers[CHANNEL_A_TIMER_INDEX].gpioMode[0] = MD_PUP | FUNC4; halTimers[CHANNEL_A_TIMER_INDEX].gpioMode[1] = MD_PUP | FUNC4; halTimers[CHANNEL_A_TIMER_INDEX].timerChannel[0] = 0; halTimers[CHANNEL_A_TIMER_INDEX].timerChannel[1] = 1; halTimers[CHANNEL_A_TIMER_INDEX].witdh[0] = 0; halTimers[CHANNEL_A_TIMER_INDEX].witdh[1] = 0; halTimers[CHANNEL_A_TIMER_INDEX].enabled[0] = 0; halTimers[CHANNEL_A_TIMER_INDEX].enabled[1] = 0; halTimers[CHANNEL_A_TIMER_INDEX].period = 0; Chip_GPIO_SetPinOutLow(LPC_GPIO_PORT, CHANNEL_A_0_PORT_GPIO, CHANNEL_A_0_PIN_GPIO); Chip_GPIO_SetPinOutLow(LPC_GPIO_PORT, CHANNEL_A_1_PORT_GPIO, CHANNEL_A_1_PIN_GPIO); Chip_GPIO_SetPinDIRInput(LPC_GPIO_PORT, CHANNEL_A_0_PORT_GPIO, CHANNEL_A_0_PIN_GPIO); Chip_GPIO_SetPinDIRInput(LPC_GPIO_PORT, CHANNEL_A_1_PORT_GPIO, CHANNEL_A_1_PIN_GPIO); Chip_SCU_PinMuxSet(CHANNEL_A_0_PORT, CHANNEL_A_0_PIN, halTimers[CHANNEL_A_TIMER_INDEX].gpioMode[0]); Chip_SCU_PinMuxSet(CHANNEL_A_1_PORT, CHANNEL_A_1_PIN, halTimers[CHANNEL_A_TIMER_INDEX].gpioMode[1]); halTimers[CHANNEL_B_TIMER_INDEX].timer = CHANNEL_B_TIMER; halTimers[CHANNEL_B_TIMER_INDEX].port[0] = CHANNEL_B_0_PORT; halTimers[CHANNEL_B_TIMER_INDEX].port[1] = CHANNEL_B_1_PORT; halTimers[CHANNEL_B_TIMER_INDEX].pin[0] = CHANNEL_B_0_PIN; halTimers[CHANNEL_B_TIMER_INDEX].pin[1] = CHANNEL_B_1_PIN; halTimers[CHANNEL_B_TIMER_INDEX].portGpio[0] = CHANNEL_B_0_PORT_GPIO; halTimers[CHANNEL_B_TIMER_INDEX].portGpio[1] = CHANNEL_B_1_PORT_GPIO; halTimers[CHANNEL_B_TIMER_INDEX].pinGpio[0] = CHANNEL_B_0_PIN_GPIO; halTimers[CHANNEL_B_TIMER_INDEX].pinGpio[1] = CHANNEL_B_1_PIN_GPIO; halTimers[CHANNEL_B_TIMER_INDEX].timerMode[0] = MD_PUP | FUNC5; halTimers[CHANNEL_B_TIMER_INDEX].timerMode[1] = MD_PUP | FUNC5; halTimers[CHANNEL_B_TIMER_INDEX].gpioMode[0] = MD_PUP | FUNC4; halTimers[CHANNEL_B_TIMER_INDEX].gpioMode[1] = MD_PUP | FUNC4; halTimers[CHANNEL_B_TIMER_INDEX].timerChannel[0] = 0; halTimers[CHANNEL_B_TIMER_INDEX].timerChannel[1] = 1; halTimers[CHANNEL_B_TIMER_INDEX].witdh[0] = 0; halTimers[CHANNEL_B_TIMER_INDEX].witdh[1] = 0; halTimers[CHANNEL_B_TIMER_INDEX].enabled[0] = 0; halTimers[CHANNEL_B_TIMER_INDEX].enabled[1] = 0; halTimers[CHANNEL_B_TIMER_INDEX].period = 0; Chip_GPIO_SetPinOutLow(LPC_GPIO_PORT, CHANNEL_B_0_PORT_GPIO, CHANNEL_B_0_PIN_GPIO); Chip_GPIO_SetPinOutLow(LPC_GPIO_PORT, CHANNEL_B_1_PORT_GPIO, CHANNEL_B_1_PIN_GPIO); Chip_GPIO_SetPinDIRInput(LPC_GPIO_PORT, CHANNEL_B_0_PORT_GPIO, CHANNEL_B_0_PIN_GPIO); Chip_GPIO_SetPinDIRInput(LPC_GPIO_PORT, CHANNEL_B_1_PORT_GPIO, CHANNEL_B_1_PIN_GPIO); Chip_SCU_PinMuxSet(CHANNEL_B_0_PORT, CHANNEL_B_0_PIN, halTimers[CHANNEL_B_TIMER_INDEX].gpioMode[0]); Chip_SCU_PinMuxSet(CHANNEL_B_1_PORT, CHANNEL_B_1_PIN, halTimers[CHANNEL_B_TIMER_INDEX].gpioMode[1]); halTimers[CHANNEL_C_TIMER_INDEX].timer = CHANNEL_C_TIMER; halTimers[CHANNEL_C_TIMER_INDEX].port[0] = CHANNEL_C_0_PORT; halTimers[CHANNEL_C_TIMER_INDEX].port[1] = CHANNEL_C_1_PORT; halTimers[CHANNEL_C_TIMER_INDEX].pin[0] = CHANNEL_C_0_PIN; halTimers[CHANNEL_C_TIMER_INDEX].pin[1] = CHANNEL_C_1_PIN; halTimers[CHANNEL_C_TIMER_INDEX].portGpio[0] = CHANNEL_C_0_PORT_GPIO; halTimers[CHANNEL_C_TIMER_INDEX].portGpio[1] = CHANNEL_C_1_PORT_GPIO; halTimers[CHANNEL_C_TIMER_INDEX].pinGpio[0] = CHANNEL_C_0_PIN_GPIO; halTimers[CHANNEL_C_TIMER_INDEX].pinGpio[1] = CHANNEL_C_1_PIN_GPIO; halTimers[CHANNEL_C_TIMER_INDEX].timerMode[0] = MD_PUP | FUNC1; halTimers[CHANNEL_C_TIMER_INDEX].timerMode[1] = MD_PUP | FUNC1; halTimers[CHANNEL_C_TIMER_INDEX].gpioMode[0] = MD_PUP | FUNC4; halTimers[CHANNEL_C_TIMER_INDEX].gpioMode[1] = MD_PUP | FUNC0; halTimers[CHANNEL_C_TIMER_INDEX].timerChannel[0] = 0; halTimers[CHANNEL_C_TIMER_INDEX].timerChannel[1] = 3; // Special mapping for the Channel C_1 halTimers[CHANNEL_C_TIMER_INDEX].witdh[0] = 0; halTimers[CHANNEL_C_TIMER_INDEX].witdh[1] = 0; halTimers[CHANNEL_C_TIMER_INDEX].enabled[0] = 0; halTimers[CHANNEL_C_TIMER_INDEX].enabled[1] = 0; halTimers[CHANNEL_C_TIMER_INDEX].period = 0; Chip_GPIO_SetPinOutLow(LPC_GPIO_PORT, CHANNEL_C_0_PORT_GPIO, CHANNEL_C_0_PIN_GPIO); Chip_GPIO_SetPinOutLow(LPC_GPIO_PORT, CHANNEL_C_1_PORT_GPIO, CHANNEL_C_1_PIN_GPIO); Chip_GPIO_SetPinDIRInput(LPC_GPIO_PORT, CHANNEL_C_0_PORT_GPIO, CHANNEL_C_0_PIN_GPIO); Chip_GPIO_SetPinDIRInput(LPC_GPIO_PORT, CHANNEL_C_1_PORT_GPIO, CHANNEL_C_1_PIN_GPIO); Chip_SCU_PinMuxSet(CHANNEL_C_0_PORT, CHANNEL_C_0_PIN, halTimers[CHANNEL_C_TIMER_INDEX].gpioMode[0]); Chip_SCU_PinMuxSet(CHANNEL_C_1_PORT, CHANNEL_C_1_PIN, halTimers[CHANNEL_C_TIMER_INDEX].gpioMode[1]); for (int i = 0; i < 3; ++i) { for (int j = 0; j < 2; ++j) { Chip_TIMER_ResetOnMatchDisable(halTimers[i].timer, halTimers[i].timerChannel[j]); Chip_TIMER_StopOnMatchDisable(halTimers[i].timer, halTimers[i].timerChannel[j]); Chip_TIMER_MatchDisableInt(halTimers[i].timer, halTimers[i].timerChannel[j]); Chip_TIMER_ExtMatchControlSet(halTimers[i].timer, 1, TIMER_EXTMATCH_CLEAR, halTimers[i].timerChannel[j]); } } }