aboutsummaryrefslogtreecommitdiffstats
path: root/libmaple/util.c
diff options
context:
space:
mode:
authorMarti Bolivar <mbolivar@leaflabs.com>2011-04-06 13:57:30 -0400
committerMarti Bolivar <mbolivar@leaflabs.com>2011-04-07 13:18:36 -0400
commit552b8882ef04cb0028ec30a04b5464b1a17bccad (patch)
tree27332e20a6b5cfad0629917eb257fad24a9589a4 /libmaple/util.c
parent012d9ba1c2069d4d072685b990cbd01b611bb751 (diff)
downloadlibrambutan-552b8882ef04cb0028ec30a04b5464b1a17bccad.tar.gz
librambutan-552b8882ef04cb0028ec30a04b5464b1a17bccad.zip
USART refactor.
Diffstat (limited to 'libmaple/util.c')
-rw-r--r--libmaple/util.c53
1 files changed, 26 insertions, 27 deletions
diff --git a/libmaple/util.c b/libmaple/util.c
index 77af5b8..4a234ae 100644
--- a/libmaple/util.c
+++ b/libmaple/util.c
@@ -24,7 +24,7 @@
/**
* @brief Utility procedures for debugging, mostly an error LED fade
- * and messages dumped over a uart for failed asserts.
+ * and messages dumped over a UART for failed asserts.
*/
#include "libmaple.h"
@@ -34,38 +34,38 @@
#include "adc.h"
#include "timer.h"
-/* Failed asserts send out a message on this USART. */
-#ifndef ERROR_USART_NUM
-#define ERROR_USART_NUM USART2
+/* Failed ASSERT()s send out a message using this USART config. */
+#ifndef ERROR_USART
+#define ERROR_USART USART2
+#define ERROR_USART_CLK_SPEED 72000000UL
#define ERROR_USART_BAUD 9600
#define ERROR_TX_PORT GPIOA
#define ERROR_TX_PIN 2
#endif
/* If you define ERROR_LED_PORT and ERROR_LED_PIN, then a failed
- assert will also throb an LED connected to that port an pin.
- FIXME this should work together with wirish somehow. */
+ * ASSERT() will also throb() an LED connected to that port and pin.
+ */
#if defined(ERROR_LED_PORT) && defined(ERROR_LED_PIN)
#define HAVE_ERROR_LED
#endif
/**
* @brief Disables all peripheral interrupts except USB and fades the
- * error LED.
- *
- * Called from exc.S with global interrupts disabled.
+ * error LED.
*/
+/* (Called from exc.S with global interrupts disabled.) */
void __error(void) {
/* Turn off peripheral interrupts */
nvic_irq_disable_all();
- /* Turn off timers */
+ /* Turn off timers */
timer_disable_all();
/* Turn off ADC */
adc_disable_all();
- /* Turn off all usarts */
+ /* Turn off all USARTs */
usart_disable_all();
/* Turn the USB interrupt back on so the bootloader keeps on functioning */
@@ -78,33 +78,33 @@ void __error(void) {
}
/**
- * @brief Prints an error message on a uart upon a failed assertion
- * and error throbs.
+ * @brief Print an error message on a UART upon a failed assertion
+ * and throb the error LED, if there is one defined.
* @param file Source file of failed assertion
* @param line Source line of failed assertion
* @param exp String representation of failed assertion
* @sideeffect Turns of all peripheral interrupts except USB.
*/
void _fail(const char* file, int line, const char* exp) {
- /* Initialize the error usart */
+ /* Initialize the error USART */
gpio_set_mode(ERROR_TX_PORT, ERROR_TX_PIN, GPIO_AF_OUTPUT_PP);
- usart_init(ERROR_USART_NUM, ERROR_USART_BAUD);
+ usart_init(ERROR_USART);
+ usart_set_baud_rate(ERROR_USART, ERROR_USART_CLK_SPEED, ERROR_USART_BAUD);
/* Print failed assert message */
- usart_putstr(ERROR_USART_NUM, "ERROR: FAILED ASSERT(");
- usart_putstr(ERROR_USART_NUM, exp);
- usart_putstr(ERROR_USART_NUM, "): ");
- usart_putstr(ERROR_USART_NUM, file);
- usart_putstr(ERROR_USART_NUM, ": ");
- usart_putudec(ERROR_USART_NUM, line);
- usart_putc(ERROR_USART_NUM, '\n');
- usart_putc(ERROR_USART_NUM, '\r');
+ usart_putstr(ERROR_USART, "ERROR: FAILED ASSERT(");
+ usart_putstr(ERROR_USART, exp);
+ usart_putstr(ERROR_USART, "): ");
+ usart_putstr(ERROR_USART, file);
+ usart_putstr(ERROR_USART, ": ");
+ usart_putudec(ERROR_USART, line);
+ usart_putc(ERROR_USART, '\n');
+ usart_putc(ERROR_USART, '\r');
/* Error fade */
__error();
}
-
/**
* @brief Fades the error LED on and off
* @sideeffect Sets output push-pull on ERROR_LED_PIN.
@@ -117,7 +117,7 @@ void throb(void) {
uint32 i = 0;
gpio_set_mode(ERROR_LED_PORT, ERROR_LED_PIN, GPIO_OUTPUT_PP);
- /* Error fade */
+ /* Error fade. */
while (1) {
if (CC == TOP_CNT) {
slope = -1;
@@ -138,9 +138,8 @@ void throb(void) {
i++;
}
#else
- /* No error LED is connected; do nothing. */
+ /* No error LED is defined; do nothing. */
while (1)
;
#endif
}
-