main
Default mainpagebasic-pwm-projectmain
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);
}