RIOT/sys/auto_init/can/auto_init_periph_can.c
Vincent Dupont ae95137f95 can stm32: add a driver for STM32 bxCAN peripheral
This driver is compliant with the candev interface. It has been tested
with STM32F0 and STM32F2 and STM32F413 ONLY at this time but should be
compliant with other STM32Fx devices
2019-03-29 12:03:43 +01:00

58 lines
1.6 KiB
C

/*
* Copyright (C) 2016-2018 OTA keys S.A.
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/
/**
* @ingroup auto_init
* @{
* @file
* @brief initializes periph_can devices
*
* @author Vincent Dupont <vincent@otakeys.com>
* @}
*/
#ifdef MODULE_PERIPH_CAN
#include "can/device.h"
#include "can_params.h"
#define CANDEV_NUMOF ((sizeof(candev_params) / sizeof(candev_params[0])))
#ifndef CANDEV_STACKSIZE
#define CANDEV_STACKSIZE (THREAD_STACKSIZE_DEFAULT + THREAD_EXTRA_STACKSIZE_PRINTF)
#endif
#ifndef CANDEV_BASE_PRIORITY
#define CANDEV_BASE_PRIORITY (THREAD_PRIORITY_MAIN - CANDEV_NUMOF - 2)
#endif
static candev_dev_t candev_dev[CANDEV_NUMOF];
static char _can_stacks[CANDEV_NUMOF][CANDEV_STACKSIZE];
static can_t candev[CANDEV_NUMOF];
void auto_init_periph_can(void) {
for (size_t i = 0; i < CANDEV_NUMOF; i++) {
can_init(&candev[i], &candev_conf[i]);
candev_dev[i].dev = (candev_t *)&candev[i];
candev_dev[i].name = candev_params[i].name;
#ifdef MODULE_CAN_TRX
candev_dev[i].trx = candev_params[i].trx;
#endif
#ifdef MODULE_CAN_PM
candev_dev[i].rx_inactivity_timeout = candev_params[i].rx_inactivity_timeout;
candev_dev[i].tx_wakeup_timeout = candev_params[i].tx_wakeup_timeout;
#endif
can_device_init(_can_stacks[i], CANDEV_STACKSIZE, CANDEV_BASE_PRIORITY + i,
candev_params[i].name, &candev_dev[i]);
}
}
#else
typedef int dont_be_pedantic;
#endif