From 4579b368b9267953fb22c59085739e9c7f95fecb Mon Sep 17 00:00:00 2001 From: Theodore Ateba Date: Thu, 18 Jan 2018 22:25:12 +0000 Subject: AVR: Simplify the PWM example code. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@11335 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- testhal/AVR/MEGA/PWM/main.c | 124 ++++++++++++-------------------------------- 1 file changed, 33 insertions(+), 91 deletions(-) (limited to 'testhal/AVR/MEGA/PWM') diff --git a/testhal/AVR/MEGA/PWM/main.c b/testhal/AVR/MEGA/PWM/main.c index 41a539b90..0aa633c70 100644 --- a/testhal/AVR/MEGA/PWM/main.c +++ b/testhal/AVR/MEGA/PWM/main.c @@ -15,108 +15,50 @@ */ #include "hal.h" - -#ifdef _NIL_ -#include "nil.h" -#else #include "ch.h" -#endif - -#define PERIOD_VALUE1 0x7FFF -#define PERIOD_VALUE2 0xFF - -#ifdef _NIL_ -THD_WORKING_AREA(waThread1, 128); -THD_FUNCTION(Thread1, arg) { - (void)arg; - while (true) { - chThdSleepMilliseconds(1); - } -} - -THD_TABLE_BEGIN - THD_TABLE_ENTRY(waThread1, "main", Thread1, NULL) -THD_TABLE_END -#endif +#define PERIOD 0x7FFF + +/** + * @brief PWM configuration structure. + */ +static PWMConfig pwm3cfg = { + F_CPU, /* PWM frequency. */ + PERIOD, /* PWM period. */ + NULL, /* TODO: comment. */ + { + {PWM_OUTPUT_ACTIVE_HIGH, NULL}, /* PWM channel 1 actived. */ + {PWM_OUTPUT_ACTIVE_HIGH, NULL}, /* PWM channel 2 actived. */ + {PWM_OUTPUT_ACTIVE_HIGH, NULL}, /* PWM channel 3 actived. */ + }, +}; + +/** + * Application entry point. + */ int main(void) { - - halInit(); - /* - * NOTE: when compiling for NIL, after the chSysInit() call, nothing - * more can be done in this thread so we first initialize PWM subsystem. + * System initializations. + * - HAL initialization, this also initializes the configured device drivers + * and performs the board-specific initializations. + * - Kernel initialization, the main() function becomes a thread and the + * RTOS is active. */ + halInit(); + chSysInit(); -#if AVR_PWM_USE_TIM1 && PWM_CHANNELS == 2 - static PWMConfig pwm1cfg = { - F_CPU, - PERIOD_VALUE1, - NULL, - { - {PWM_OUTPUT_ACTIVE_HIGH, NULL}, - {PWM_OUTPUT_ACTIVE_HIGH, NULL} - }, - }; - - /* PB1-2 are timer 1 pwm channel outputs for ATMega328p */ - palSetGroupMode(IOPORT2, 0x3, 1, PAL_MODE_OUTPUT_PUSHPULL); - - pwmStart(&PWMD1, &pwm1cfg); - - /* channel 0 with 75% duty cycle and 1 with 25% */ - pwmEnableChannel(&PWMD1, 0, (PERIOD_VALUE1 >> 2)*3); - pwmEnableChannel(&PWMD1, 1, PERIOD_VALUE1 >> 2); -#endif - -#if AVR_PWM_USE_TIM2 - static PWMConfig pwm2cfg = { - F_CPU >> 5, - PERIOD_VALUE2, - NULL, - { - {PWM_OUTPUT_ACTIVE_HIGH, NULL}, - {PWM_OUTPUT_ACTIVE_HIGH, NULL} - }, - }; - - /* PB3 and PD3 are timer 2 pwm channel outputs for ATMega328p */ - palSetPadMode(IOPORT2, 3, PAL_MODE_OUTPUT_PUSHPULL); - palSetPadMode(IOPORT4, 3, PAL_MODE_OUTPUT_PUSHPULL); - - pwmStart(&PWMD2, &pwm2cfg); - - /* channel 0 with 80% duty cycle and 1 with 20% */ - pwmEnableChannel(&PWMD2, 0, PERIOD_VALUE2/5*4); - pwmEnableChannel(&PWMD2, 1, PERIOD_VALUE2/5); -#endif - -#if AVR_PWM_USE_TIM3 - static PWMConfig pwm3cfg = { - F_CPU, - PERIOD_VALUE1, - NULL, - { - {PWM_OUTPUT_ACTIVE_HIGH, NULL}, - {PWM_OUTPUT_ACTIVE_HIGH, NULL}, - {PWM_OUTPUT_ACTIVE_HIGH, NULL}, - }, - }; - - /* PE3-5 are timer 3 pwm channel outputs */ + /* PE3-5 are timer 3 pwm channel outputs. */ palSetPadMode(IOPORT5, 3, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(IOPORT5, 4, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(IOPORT5, 5, PAL_MODE_OUTPUT_PUSHPULL); pwmStart(&PWMD3, &pwm3cfg); - /* channel 0 with 50% duty cycle, 1 with 25% and 2 with 75% */ - pwmEnableChannel(&PWMD3, 0, PERIOD_VALUE1 >> 1); - pwmEnableChannel(&PWMD3, 1, PERIOD_VALUE1 >> 2); - pwmEnableChannel(&PWMD3, 2, (PERIOD_VALUE1 >> 2)*3); -#endif + /* Channel 0 with 50% duty cycle, 1 with 25% and 2 with 75% */ + pwmEnableChannel(&PWMD3, 0, PERIOD >> 1); + pwmEnableChannel(&PWMD3, 1, PERIOD >> 2); + pwmEnableChannel(&PWMD3, 2, (PERIOD >> 2)*3); - chSysInit(); - - while (1) {} + while (TRUE) { + } } -- cgit v1.2.3