aboutsummaryrefslogtreecommitdiffstats
path: root/testhal/TIVA/TM4C123x/PWM/main.c
diff options
context:
space:
mode:
authormarcoveeneman <marco-veeneman@hotmail.com>2014-10-13 23:15:40 +0200
committermarcoveeneman <marco-veeneman@hotmail.com>2014-10-13 23:15:40 +0200
commit98305a8a23a39d2ba8bc8fda345e3b6a95e7faec (patch)
tree8bb7d69a3c488463110ed2206e2f6475df0611be /testhal/TIVA/TM4C123x/PWM/main.c
parent2d4c6cc171f307de8667cebc3bc0eda4c4e07445 (diff)
downloadChibiOS-Contrib-98305a8a23a39d2ba8bc8fda345e3b6a95e7faec.tar.gz
ChibiOS-Contrib-98305a8a23a39d2ba8bc8fda345e3b6a95e7faec.tar.bz2
ChibiOS-Contrib-98305a8a23a39d2ba8bc8fda345e3b6a95e7faec.zip
Added Tiva TM4C123x GPT, I2C and PWM examples to the testhal.
Diffstat (limited to 'testhal/TIVA/TM4C123x/PWM/main.c')
-rw-r--r--testhal/TIVA/TM4C123x/PWM/main.c137
1 files changed, 137 insertions, 0 deletions
diff --git a/testhal/TIVA/TM4C123x/PWM/main.c b/testhal/TIVA/TM4C123x/PWM/main.c
new file mode 100644
index 0000000..252ad5e
--- /dev/null
+++ b/testhal/TIVA/TM4C123x/PWM/main.c
@@ -0,0 +1,137 @@
+/*
+ Copyright (C) 2014 Marco Veeneman
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#include "ch.h"
+#include "hal.h"
+
+static void pwmpcb(PWMDriver *pwmp)
+{
+ (void)pwmp;
+ palClearPad(GPIOF, GPIOF_LED_RED);
+ palClearPad(GPIOF, GPIOF_LED_GREEN);
+ palClearPad(GPIOF, GPIOF_LED_BLUE);
+}
+
+static void pwmc1cb0(PWMDriver *pwmp)
+{
+ (void)pwmp;
+ palSetPad(GPIOF, GPIOF_LED_RED);
+}
+
+static void pwmc1cb1(PWMDriver *pwmp)
+{
+ (void)pwmp;
+ palSetPad(GPIOF, GPIOF_LED_GREEN);
+}
+
+static void pwmc1cb2(PWMDriver *pwmp)
+{
+ (void)pwmp;
+ palSetPad(GPIOF, GPIOF_LED_BLUE);
+}
+
+static PWMConfig pwmcfg = {
+ 10000, /* 10kHz PWM clock frequency.*/
+ 10000, /* Initial PWM period 1S.*/
+ pwmpcb,
+ {
+ {PWM_OUTPUT_DISABLED, pwmc1cb0},
+ {PWM_OUTPUT_DISABLED, pwmc1cb1},
+ {PWM_OUTPUT_DISABLED, pwmc1cb2},
+ {PWM_OUTPUT_DISABLED, NULL},
+ {PWM_OUTPUT_DISABLED, NULL},
+ {PWM_OUTPUT_DISABLED, NULL},
+ {PWM_OUTPUT_DISABLED, NULL},
+ {PWM_OUTPUT_DISABLED, NULL}
+ }
+};
+
+/*
+ * Application entry point.
+ */
+int main(void)
+{
+ /*
+ * 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();
+
+ /*
+ * Start PWM driver
+ */
+ pwmStart(&PWMD1, &pwmcfg);
+
+ pwmEnableChannel(&PWMD1, 0, 0);
+ pwmEnableChannel(&PWMD1, 1, 0);
+ pwmEnableChannel(&PWMD1, 2, 0);
+ pwmEnableChannelNotification(&PWMD1, 0);
+ pwmEnableChannelNotification(&PWMD1, 1);
+ pwmEnableChannelNotification(&PWMD1, 2);
+ pwmEnablePeriodicNotification(&PWMD1);
+
+ /*
+ * Normal main() thread activity
+ */
+ while (TRUE) {
+ uint16_t rgbColour[3];
+ uint8_t decColour;
+ uint16_t i;
+
+ // Start off with red.
+ rgbColour[0] = pwmcfg.frequency - 2;
+ rgbColour[1] = 0;
+ rgbColour[2] = 0;
+
+ // Choose the colours to increment and decrement.
+ for (decColour = 0; decColour < 3; decColour++) {
+ int incColour = decColour == 2 ? 0 : decColour + 1;
+
+ // cross-fade the two colours.
+ for(i = 0; i < pwmcfg.frequency - 2; i++) {
+ rgbColour[decColour] -= 1;
+ rgbColour[incColour] += 1;
+
+ if (!palReadPad(GPIOF, GPIOF_SW1))
+ {
+ pwmEnableChannel(&PWMD1, 0, 0);
+ pwmEnableChannel(&PWMD1, 1, 1);
+ pwmEnableChannel(&PWMD1, 2, 2);
+ }
+ else if (!palReadPad(GPIOF, GPIOF_SW2))
+ {
+ pwmEnableChannel(&PWMD1, 0, pwmcfg.frequency - 2);
+ pwmEnableChannel(&PWMD1, 1, pwmcfg.frequency - 1);
+ pwmEnableChannel(&PWMD1, 2, pwmcfg.frequency);
+ }
+ else
+ {
+ pwmEnableChannel(&PWMD1, 0, rgbColour[0]);
+ pwmEnableChannel(&PWMD1, 1, rgbColour[1]);
+ pwmEnableChannel(&PWMD1, 2, rgbColour[2]);
+ }
+
+ chThdSleepMilliseconds(1);
+ }
+ }
+ }
+
+ return 0;
+}