Description
Source
Call Graph
Start Line: 231
int main(void)
{
PIO_Configure(pins, PIO_LISTSIZE(pins));
TRACE_CONFIGURE(DBGU_STANDARD, 115200, BOARD_MCK);
printf("-- Basic PWMC Project %s --\n\r", SOFTPACK_VERSION);
printf("-- %s\n\r", BOARD_NAME);
printf("-- Compiled: %s %s --\n\r", __DATE__, __TIME__);
UTIL_WaitTimeInMs(BOARD_MCK, 1000);
UTIL_WaitTimeInUs(BOARD_MCK, 1000);
// Enable PWMC peripheral clock
AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PWMC;
// Settings:
// - 100kHz PWM period (PWM_FREQUENCY)
// - 1s rise/fall time for the LED intensity
// Set clock A to run at 100kHz * MAX_DUTY_CYCLE (clock B is not used)
PWMC_ConfigureClocks(PWM_FREQUENCY * MAX_DUTY_CYCLE, 0, BOARD_MCK);
// Configure PWMC channel for LED0 (left-aligned)
PWMC_ConfigureChannel(CHANNEL_PWM_LED0, AT91C_PWMC_CPRE_MCKA, 0, 0);
PWMC_SetPeriod(CHANNEL_PWM_LED0, MAX_DUTY_CYCLE);
PWMC_SetDutyCycle(CHANNEL_PWM_LED0, MIN_DUTY_CYCLE);
// Configure PWMC channel for LED1 (center-aligned, inverted polarity)
PWMC_ConfigureChannel(CHANNEL_PWM_LED1, AT91C_PWMC_CPRE_MCKA, AT91C_PWMC_CALG, AT91C_PWMC_CPOL);
PWMC_SetPeriod(CHANNEL_PWM_LED1, MAX_DUTY_CYCLE);
PWMC_SetDutyCycle(CHANNEL_PWM_LED1, MIN_DUTY_CYCLE);
// Configure interrupt on channel #1
AIC_ConfigureIT(AT91C_ID_PWMC, 0, ISR_Pwmc);
AIC_EnableIT(AT91C_ID_PWMC);
PWMC_EnableChannelIt(CHANNEL_PWM_LED0);
// Enable channel #1 and #2
PWMC_EnableChannel(CHANNEL_PWM_LED0);
PWMC_EnableChannel(CHANNEL_PWM_LED1);
// Infinite loop
while (1);
}