diff options
author | Theodore Ateba <tf.ateba@gmail.com> | 2018-01-18 22:25:12 +0000 |
---|---|---|
committer | Theodore Ateba <tf.ateba@gmail.com> | 2018-01-18 22:25:12 +0000 |
commit | 4579b368b9267953fb22c59085739e9c7f95fecb (patch) | |
tree | e57b2cc52fbe8ec24db929d9e57380240f654820 /testhal/AVR | |
parent | cf84da6cbdac2f09159a290d0d71cacfcc9c7e49 (diff) | |
download | ChibiOS-4579b368b9267953fb22c59085739e9c7f95fecb.tar.gz ChibiOS-4579b368b9267953fb22c59085739e9c7f95fecb.tar.bz2 ChibiOS-4579b368b9267953fb22c59085739e9c7f95fecb.zip |
AVR: Simplify the PWM example code.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@11335 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'testhal/AVR')
-rw-r--r-- | testhal/AVR/MEGA/PWM/main.c | 124 |
1 files changed, 33 insertions, 91 deletions
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) {
+ }
}
|