mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-12-31 11:01:19 +00:00
This DMA receiver uses a separate small circular buffer to DMA into. This allows the DMA transaction to be made circular, and thus it does not require the interrupt latency to be low enough to setup the next transfer before the next character comes in. Additional diagnostics output have been added to the usart_info console command to facilitate tuning of the FIFO size. Signed-off-by: Anton Staaf <robotboy@chromium.org> BRANCH=None BUG=None TEST=make buildall -j Verify DMA works by cross connecting two discovery boards Change-Id: Idcdf95a47fadf21ec2154f0c9128cd3586e568ec Reviewed-on: https://chromium-review.googlesource.com/292870 Tested-by: Anton Staaf <robotboy@chromium.org> Reviewed-by: Anton Staaf <robotboy@chromium.org> Commit-Queue: Anton Staaf <robotboy@chromium.org> Trybot-Ready: Anton Staaf <robotboy@chromium.org>
71 lines
1.7 KiB
C
71 lines
1.7 KiB
C
/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
/* STM32L-discovery board configuration */
|
|
|
|
#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_rx_dma.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);
|
|
}
|
|
|
|
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);
|
|
|
|
/******************************************************************************
|
|
* 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_rx_dma const loopback_rx_dma =
|
|
USART_RX_DMA(STM32_DMAC_CH6, 32);
|
|
|
|
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,
|
|
loopback_rx_dma.usart_rx,
|
|
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);
|