aboutsummaryrefslogtreecommitdiffstats
path: root/testhal/AVR
diff options
context:
space:
mode:
authorTheodore Ateba <tf.ateba@gmail.com>2018-01-17 22:18:34 +0000
committerTheodore Ateba <tf.ateba@gmail.com>2018-01-17 22:18:34 +0000
commit12e9265ebf9a9cc8ed04f71e816ee719a29e864c (patch)
tree4337a919fe0ad10a40ce76842ccc8c57e067b182 /testhal/AVR
parente92f5292aa056619ebb7406236207e4958c2ae3d (diff)
downloadChibiOS-12e9265ebf9a9cc8ed04f71e816ee719a29e864c.tar.gz
ChibiOS-12e9265ebf9a9cc8ed04f71e816ee719a29e864c.tar.bz2
ChibiOS-12e9265ebf9a9cc8ed04f71e816ee719a29e864c.zip
AVR: Add other prescalers to the PWM low level driver and update testhal.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@11302 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'testhal/AVR')
-rw-r--r--testhal/AVR/MEGA/PWM/main.c59
1 files changed, 53 insertions, 6 deletions
diff --git a/testhal/AVR/MEGA/PWM/main.c b/testhal/AVR/MEGA/PWM/main.c
index 29c97d96a..41a539b90 100644
--- a/testhal/AVR/MEGA/PWM/main.c
+++ b/testhal/AVR/MEGA/PWM/main.c
@@ -22,6 +22,9 @@
#include "ch.h"
#endif
+#define PERIOD_VALUE1 0x7FFF
+#define PERIOD_VALUE2 0xFF
+
#ifdef _NIL_
THD_WORKING_AREA(waThread1, 128);
THD_FUNCTION(Thread1, arg) {
@@ -45,9 +48,53 @@ int main(void) {
* more can be done in this thread so we first initialize PWM subsystem.
*/
+#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 = {
- 1023, /* Not real clock */
- 1023, /* Maximum PWM count */
+ F_CPU,
+ PERIOD_VALUE1,
NULL,
{
{PWM_OUTPUT_ACTIVE_HIGH, NULL},
@@ -62,11 +109,11 @@ int main(void) {
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, 511);
- pwmEnableChannel(&PWMD3, 1, 255);
- pwmEnableChannel(&PWMD3, 2, 767);
+ pwmEnableChannel(&PWMD3, 0, PERIOD_VALUE1 >> 1);
+ pwmEnableChannel(&PWMD3, 1, PERIOD_VALUE1 >> 2);
+ pwmEnableChannel(&PWMD3, 2, (PERIOD_VALUE1 >> 2)*3);
+#endif
chSysInit();