summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Staaf <robotboy@chromium.org>2015-07-22 09:17:23 -0700
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2015-08-10 17:54:22 +0000
commit68b2809ee8f611d089f6d946dba10bb1b6d5c507 (patch)
treea21fcdb1d9b73f4c409811c8421fcba1e5a0c418
parent014d180b1da90a5e23f2ebd4df3d00457bc5fb28 (diff)
downloadchrome-ec-68b2809ee8f611d089f6d946dba10bb1b6d5c507.tar.gz
Discovery: Configure USART2 as a loopback device
This gives a test case for the USART driver on an STM32L. Eventually this will be a good place to test that even in a downclocked configuration the STM32L USART driver can handle 115200 without dropping characters. This also gives a convenient build test for the STM32L version of the USART driver. Signed-off-by: Anton Staaf <robotboy@chromium.org> BRANCH=None BUG=None TEST=make buildall -j Cross connect a Discovery and a Discovery-stm32f072 Change-Id: Ifb8dfc1179e8a0be84390d36e0bc3ff15f4f4685 Reviewed-on: https://chromium-review.googlesource.com/288979 Tested-by: Anton Staaf <robotboy@chromium.org> Reviewed-by: Randall Spangler <rspangler@chromium.org> Commit-Queue: Anton Staaf <robotboy@chromium.org> Trybot-Ready: Anton Staaf <robotboy@chromium.org>
-rw-r--r--board/discovery/board.c45
-rw-r--r--board/discovery/board.h6
-rw-r--r--board/discovery/gpio.inc4
3 files changed, 51 insertions, 4 deletions
diff --git a/board/discovery/board.c b/board/discovery/board.c
index 1821cb6f7c..eb58434aa7 100644
--- a/board/discovery/board.c
+++ b/board/discovery/board.c
@@ -7,19 +7,60 @@
#include "common.h"
#include "gpio.h"
#include "hooks.h"
+#include "queue_policies.h"
#include "registers.h"
#include "task.h"
+#include "usart-stm32f0.h"
+#include "usart_tx_dma.h"
#include "util.h"
+void button_event(enum gpio_signal signal);
+
+#include "gpio_list.h"
+
void button_event(enum gpio_signal signal)
{
+ static int count;
+
+ gpio_set_level(GPIO_LED_GREEN, ++count & 0x02);
}
-#include "gpio_list.h"
+void usb_gpio_tick(void)
+{
+ static int count;
+
+ gpio_set_level(GPIO_LED_BLUE, ++count & 0x01);
+}
+DECLARE_HOOK(HOOK_TICK, usb_gpio_tick, HOOK_PRIO_DEFAULT);
-/* Initialize board. */
+/******************************************************************************
+ * Setup USART2 as a loopback device, it just echo's back anything sent to it.
+ */
+static struct usart_config const loopback_usart;
+
+static struct queue const loopback_queue =
+ QUEUE_DIRECT(64, uint8_t,
+ loopback_usart.producer,
+ loopback_usart.consumer);
+
+static struct usart_tx_dma const loopback_tx_dma =
+ USART_TX_DMA(STM32_DMAC_CH7, 16);
+
+static struct usart_config const loopback_usart =
+ USART_CONFIG(usart2_hw,
+ usart_rx_interrupt,
+ loopback_tx_dma.usart_tx,
+ 115200,
+ loopback_queue,
+ loopback_queue);
+
+/******************************************************************************
+ * Initialize board.
+ */
static void board_init(void)
{
gpio_enable_interrupt(GPIO_USER_BUTTON);
+
+ usart_init(&loopback_usart);
}
DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT);
diff --git a/board/discovery/board.h b/board/discovery/board.h
index 2fb8a84edf..c66a21eac9 100644
--- a/board/discovery/board.h
+++ b/board/discovery/board.h
@@ -9,9 +9,13 @@
#define __CROS_EC_BOARD_H
/* Optional features */
-#undef CONFIG_WATCHDOG_HELP
+#undef CONFIG_WATCHDOG_HELP
#undef CONFIG_LID_SWITCH
+/* Enable USART2 */
+#define CONFIG_STREAM_USART
+#define CONFIG_STREAM_USART2
+
/*
* Allow dangerous commands all the time, since we don't have a write protect
* switch.
diff --git a/board/discovery/gpio.inc b/board/discovery/gpio.inc
index 7f762017e3..619b4396a0 100644
--- a/board/discovery/gpio.inc
+++ b/board/discovery/gpio.inc
@@ -16,4 +16,6 @@ GPIO(LED_GREEN, PIN(B, 7), GPIO_OUT_LOW)
UNIMPLEMENTED(ENTERING_RW)
UNIMPLEMENTED(WP_L)
-ALTERNATE(PIN_MASK(A, 0x0600), GPIO_ALT_USART, MODULE_UART, 0)
+ALTERNATE(PIN_MASK(A, 0x0600), GPIO_ALT_USART, MODULE_UART, 0) /* USART1: PA09/PA10 */
+ALTERNATE(PIN_MASK(A, 0x000C), GPIO_ALT_USART, MODULE_USART, 0) /* USART2: PA02/PA03 */
+ALTERNATE(PIN_MASK(B, 0x0C00), GPIO_ALT_USART, MODULE_USART, 0) /* USART3: PB10/PB11 */