Browse Source
git-svn-id: https://nuttx.svn.sourceforge.net/svnroot/nuttx/trunk@4213 7fd9a85b-ad96-42d3-883c-3090e2eb8679sbg
41 changed files with 865 additions and 68 deletions
@ -0,0 +1,105 @@
@@ -0,0 +1,105 @@
|
||||
############################################################################
|
||||
# apps/examples/can/Makefile
|
||||
#
|
||||
# Copyright (C) 2011 Gregory Nutt. All rights reserved.
|
||||
# Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in
|
||||
# the documentation and/or other materials provided with the
|
||||
# distribution.
|
||||
# 3. Neither the name NuttX nor the names of its contributors may be
|
||||
# used to endorse or promote products derived from this software
|
||||
# without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
############################################################################
|
||||
|
||||
-include $(TOPDIR)/.config |
||||
-include $(TOPDIR)/Make.defs |
||||
include $(APPDIR)/Make.defs |
||||
|
||||
# NuttX NX Graphics Example.
|
||||
|
||||
ASRCS =
|
||||
CSRCS = can_main.c
|
||||
|
||||
AOBJS = $(ASRCS:.S=$(OBJEXT))
|
||||
COBJS = $(CSRCS:.c=$(OBJEXT))
|
||||
|
||||
SRCS = $(ASRCS) $(CSRCS)
|
||||
OBJS = $(AOBJS) $(COBJS)
|
||||
|
||||
ifeq ($(WINTOOL),y) |
||||
BIN = "${shell cygpath -w $(APPDIR)/libapps$(LIBEXT)}"
|
||||
else |
||||
BIN = "$(APPDIR)/libapps$(LIBEXT)"
|
||||
endif |
||||
|
||||
ROOTDEPPATH = --dep-path .
|
||||
|
||||
# Touchscreen built-in application info
|
||||
|
||||
APPNAME = can
|
||||
PRIORITY = SCHED_PRIORITY_DEFAULT
|
||||
STACKSIZE = 2048
|
||||
|
||||
# Common build
|
||||
|
||||
VPATH =
|
||||
|
||||
all: .built |
||||
.PHONY: context clean depend distclean |
||||
|
||||
$(AOBJS): %$(OBJEXT): %.S |
||||
$(call ASSEMBLE, $<, $@)
|
||||
|
||||
$(COBJS): %$(OBJEXT): %.c |
||||
$(call COMPILE, $<, $@)
|
||||
|
||||
.built: $(OBJS) |
||||
@( for obj in $(OBJS) ; do \
|
||||
$(call ARCHIVE, $(BIN), $${obj}); \
|
||||
done ; )
|
||||
@touch .built
|
||||
|
||||
.context: |
||||
ifeq ($(CONFIG_NSH_BUILTIN_APPS),y) |
||||
$(call REGISTER,$(APPNAME),$(PRIORITY),$(STACKSIZE),$(APPNAME)_main)
|
||||
@touch $@
|
||||
endif |
||||
|
||||
context: .context |
||||
|
||||
.depend: Makefile $(SRCS) |
||||
@$(MKDEP) $(ROOTDEPPATH) $(CC) -- $(CFLAGS) -- $(SRCS) >Make.dep
|
||||
@touch $@
|
||||
|
||||
depend: .depend |
||||
|
||||
clean: |
||||
@rm -f *.o *~ .*.swp .built
|
||||
$(call CLEAN)
|
||||
|
||||
distclean: clean |
||||
@rm -f Make.dep .depend
|
||||
|
||||
-include Make.dep |
@ -0,0 +1,129 @@
@@ -0,0 +1,129 @@
|
||||
/****************************************************************************
|
||||
* examples/examples/can/can.h |
||||
* |
||||
* Copyright (C) 2011 Gregory Nutt. All rights reserved. |
||||
* Author: Gregory Nutt <gnutt@nuttx.org> |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions |
||||
* are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright |
||||
* notice, this list of conditions and the following disclaimer in |
||||
* the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* 3. Neither the name NuttX nor the names of its contributors may be |
||||
* used to endorse or promote products derived from this software |
||||
* without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS |
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
||||
* POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
****************************************************************************/ |
||||
|
||||
#ifndef __APPS_EXAMPLES_CAN_CAN_H |
||||
#define __APPS_EXAMPLES_CAN_CAN_H |
||||
|
||||
/****************************************************************************
|
||||
* Included Files |
||||
****************************************************************************/ |
||||
|
||||
#include <nuttx/config.h> |
||||
|
||||
/****************************************************************************
|
||||
* Definitions |
||||
****************************************************************************/ |
||||
/* Configuration ************************************************************/ |
||||
/* This test depends on these specific CAN configurations settings (your
|
||||
* specific CAN settings might require additional settings). |
||||
* |
||||
* CONFIG_CAN - Enables CAN support. |
||||
* CONFIG_CAN_LOOPBACK - A CAN driver may or may not support a loopback |
||||
* mode for testing. The STM32 CAN driver does support loopback mode. |
||||
* |
||||
* Specific configuration options for this example include: |
||||
* |
||||
* CONFIG_NSH_BUILTIN_APPS - Build the CAN test as an NSH built-in function. |
||||
* Default: Built as a standalone problem |
||||
* CONFIG_CAN_LOOPBACK |
||||
* CONFIG_EXAMPLES_CAN_DEVPATH - The path to the CAN device. Default: /dev/can0 |
||||
* CONFIG_EXAMPLES_CAN_NMSGS - If CONFIG_NSH_BUILTIN_APPS |
||||
* is defined, then the number of loops is provided on the command line |
||||
* and this value is ignored. Otherwise, this number of CAN message is |
||||
* collected and the program terminates. Default: If built as an NSH |
||||
* built-in, the default is 32. Otherwise messages are sent and received |
||||
* indefinitely. |
||||
*/ |
||||
|
||||
#ifndef CONFIG_CAN |
||||
# error "CAN device support is not enabled (CONFIG_CAN)" |
||||
#endif |
||||
|
||||
#ifndef CONFIG_CAN_LOOPBACK |
||||
# warning "CAN loopback is not enabled (CONFIG_CAN_LOOPBACK)" |
||||
#endif |
||||
|
||||
#ifndef CONFIG_EXAMPLES_CAN_DEVPATH |
||||
# define CONFIG_EXAMPLES_CAN_DEVPATH "/dev/can0" |
||||
#endif |
||||
|
||||
#if defined(CONFIG_NSH_BUILTIN_APPS) && !defined(CONFIG_EXAMPLES_CAN_NMSGS) |
||||
# define CONFIG_EXAMPLES_CAN_NMSGS 32 |
||||
#endif |
||||
|
||||
/* Debug ********************************************************************/ |
||||
|
||||
#ifdef CONFIG_CPP_HAVE_VARARGS |
||||
# ifdef CONFIG_DEBUG |
||||
# define message(...) lib_rawprintf(__VA_ARGS__) |
||||
# define msgflush() |
||||
# else |
||||
# define message(...) printf(__VA_ARGS__) |
||||
# define msgflush() fflush(stdout) |
||||
# endif |
||||
#else |
||||
# ifdef CONFIG_DEBUG |
||||
# define message lib_rawprintf |
||||
# define msgflush() |
||||
# else |
||||
# define message printf |
||||
# define msgflush() fflush(stdout) |
||||
# endif |
||||
#endif |
||||
|
||||
/****************************************************************************
|
||||
* Public Types |
||||
****************************************************************************/ |
||||
|
||||
/****************************************************************************
|
||||
* Public Variables |
||||
****************************************************************************/ |
||||
|
||||
/****************************************************************************
|
||||
* Public Function Prototypes |
||||
****************************************************************************/ |
||||
|
||||
/****************************************************************************
|
||||
* Name: can_devinit() |
||||
* |
||||
* Description: |
||||
* Perform architecuture-specific initialization of the CAN hardware. This |
||||
* interface must be provided by all configurations using apps/examples/can |
||||
* |
||||
****************************************************************************/ |
||||
|
||||
int can_devinit(void); |
||||
|
||||
#endif /* __APPS_EXAMPLES_CAN_CAN_H */ |
@ -0,0 +1,247 @@
@@ -0,0 +1,247 @@
|
||||
/****************************************************************************
|
||||
* examples/can/can_main.c |
||||
* |
||||
* Copyright (C) 2011 Gregory Nutt. All rights reserved. |
||||
* Author: Gregory Nutt <spudmonkey@racsa.co.cr> |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions |
||||
* are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright |
||||
* notice, this list of conditions and the following disclaimer in |
||||
* the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* 3. Neither the name NuttX nor the names of its contributors may be |
||||
* used to endorse or promote products derived from this software |
||||
* without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS |
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
||||
* POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
****************************************************************************/ |
||||
|
||||
/****************************************************************************
|
||||
* Included Files |
||||
****************************************************************************/ |
||||
|
||||
#include <nuttx/config.h> |
||||
|
||||
#include <sys/types.h> |
||||
|
||||
#include <stdio.h> |
||||
#include <stdlib.h> |
||||
#include <unistd.h> |
||||
#include <string.h> |
||||
#include <fcntl.h> |
||||
#include <errno.h> |
||||
#include <debug.h> |
||||
|
||||
#include <nuttx/can.h> |
||||
|
||||
#include "can.h" |
||||
|
||||
/****************************************************************************
|
||||
* Pre-processor Definitions |
||||
****************************************************************************/ |
||||
|
||||
#ifdef CONFIG_NSH_BUILTIN_APPS |
||||
# define MAIN_NAME can_main |
||||
# define MAIN_STRING "can_main: " |
||||
#else |
||||
# define MAIN_NAME user_start |
||||
# define MAIN_STRING "user_start: " |
||||
#endif |
||||
|
||||
/****************************************************************************
|
||||
* Private Types |
||||
****************************************************************************/ |
||||
|
||||
/****************************************************************************
|
||||
* Private Function Prototypes |
||||
****************************************************************************/ |
||||
|
||||
/****************************************************************************
|
||||
* Private Data |
||||
****************************************************************************/ |
||||
|
||||
/****************************************************************************
|
||||
* Public Data |
||||
****************************************************************************/ |
||||
|
||||
/****************************************************************************
|
||||
* Private Functions |
||||
****************************************************************************/ |
||||
|
||||
/****************************************************************************
|
||||
* Public Functions |
||||
****************************************************************************/ |
||||
|
||||
/****************************************************************************
|
||||
* Name: user_start/can_main |
||||
****************************************************************************/ |
||||
|
||||
int MAIN_NAME(int argc, char *argv[]) |
||||
{ |
||||
struct can_msg_s txmsg; |
||||
struct can_msg_s rxmsg; |
||||
size_t msgsize; |
||||
ssize_t nbytes; |
||||
uint8_t msgdata; |
||||
#if defined(CONFIG_NSH_BUILTIN_APPS) || defined(CONFIG_EXAMPLES_CAN_NMSGS) |
||||
long nmsgs; |
||||
#endif |
||||
int msgdlc; |
||||
int msgid; |
||||
int fd; |
||||
int errval = 0; |
||||
int ret; |
||||
int i; |
||||
|
||||
/* If this example is configured as an NX add-on, then limit the number of
|
||||
* samples that we collect before returning. Otherwise, we never return |
||||
*/ |
||||
|
||||
#if defined(CONFIG_NSH_BUILTIN_APPS) |
||||
nmsgs = CONFIG_EXAMPLES_CAN_NMSGS; |
||||
if (argc > 1) |
||||
{ |
||||
nmsgs = strtol(argv[1], NULL, 10); |
||||
} |
||||
message(MAIN_STRING "nmsgs: %d\n", nmsgs); |
||||
#elif defined(CONFIG_EXAMPLES_CAN_NMSGS) |
||||
message(MAIN_STRING "nmsgs: %d\n", CONFIG_EXAMPLES_CAN_NMSGS); |
||||
#endif |
||||
|
||||
/* Initialization of the CAN hardware is performed by logic external to
|
||||
* this test. |
||||
*/ |
||||
|
||||
message(MAIN_STRING "Initializing external CAN device\n"); |
||||
ret = can_devinit(); |
||||
if (ret != OK) |
||||
{ |
||||
message(MAIN_STRING "can_devinit failed: %d\n", ret); |
||||
errval = 1; |
||||
goto errout; |
||||
} |
||||
|
||||
/* Open the CAN device for reading */ |
||||
|
||||
message(MAIN_STRING "Hardware initialized. Opening the CAN device\n"); |
||||
fd = open(CONFIG_EXAMPLES_CAN_DEVPATH, O_RDWR); |
||||
if (fd < 0) |
||||
{ |
||||
message(MAIN_STRING "open %s failed: %d\n", |
||||
CONFIG_EXAMPLES_CAN_DEVPATH, errno); |
||||
errval = 2; |
||||
goto errout_with_dev; |
||||
} |
||||
|
||||
/* Now loop the appropriate number of times, performing one loopback test
|
||||
* on each pass. |
||||
*/ |
||||
|
||||
msgdlc = 1; |
||||
msgid = 1; |
||||
msgdata = 0; |
||||
|
||||
#if defined(CONFIG_NSH_BUILTIN_APPS) |
||||
for (; nmsgs > 0; nmsgs--) |
||||
#elif defined(CONFIG_EXAMPLES_CAN_NMSGS) |
||||
for (nmsgs = 0; nmsgs < CONFIG_EXAMPLES_CAN_NMSGS; nmsgs++) |
||||
#else |
||||
for (;;) |
||||
#endif |
||||
{ |
||||
/* Flush any output before the loop entered or from the previous pass
|
||||
* through the loop. |
||||
*/ |
||||
|
||||
msgflush(); |
||||
|
||||
/* Construct the next TX message */ |
||||
|
||||
txmsg.cm_hdr = CAN_HDR(msgid, 0, msgdlc); |
||||
for (i = 0; i < msgdlc; i++) |
||||
{ |
||||
txmsg.cm_data[i] = msgdata + i; |
||||
} |
||||
|
||||
/* Send the TX message */ |
||||
|
||||
msgsize = CAN_MSGLEN(txmsg.cm_hdr); |
||||
nbytes = write(fd, &txmsg, msgsize); |
||||
if (nbytes != msgsize) |
||||
{ |
||||
message("ERROR: write(%d) returned %d\n", msgsize, nbytes); |
||||
errval = 3; |
||||
goto errout_with_dev; |
||||
} |
||||
|
||||
/* Read the RX message */ |
||||
|
||||
msgsize = sizeof(struct can_msg_s); |
||||
nbytes = read(fd, &rxmsg, msgsize); |
||||
if (nbytes < CAN_MSGLEN(0) || nbytes >= msgsize) |
||||
{ |
||||
message("ERROR: read(%d) returned %d\n", msgsize, nbytes); |
||||
errval = 4; |
||||
goto errout_with_dev; |
||||
} |
||||
|
||||
/* Verify that the received messages are the same */ |
||||
|
||||
if (txmsg.cm_hdr != rxmsg.cm_hdr) |
||||
{ |
||||
message("ERROR: Sent header %04x; received header %04x\n", txmsg.cm_hdr, rxmsg.cm_hdr); |
||||
errval = 4; |
||||
goto errout_with_dev; |
||||
} |
||||
|
||||
if (memcmp(txmsg.cm_data, rxmsg.cm_data, msgdlc) != 0) |
||||
{ |
||||
message("ERROR: Data does not match. DLC=%d\n", msgdlc); |
||||
for (i = 0; i < msgdlc; i++) |
||||
{ |
||||
message(" %d: TX %02x RX %02x\n", txmsg.cm_data[i], rxmsg.cm_data[i]); |
||||
errval = 5; |
||||
goto errout_with_dev; |
||||
} |
||||
} |
||||
|
||||
/* Set up for the next pass */ |
||||
|
||||
msgdata += msgdlc; |
||||
|
||||
if (++msgid >= 2048) |
||||
{ |
||||
msgid = 1; |
||||
} |
||||
|
||||
if (++msgdlc > CAN_MAXDATALEN) |
||||
{ |
||||
msgdlc = 1; |
||||
} |
||||
} |
||||
|
||||
errout_with_dev: |
||||
close(fd); |
||||
|
||||
errout: |
||||
message("Terminating!\n"); |
||||
msgflush(); |
||||
return errval; |
||||
} |
@ -0,0 +1,142 @@
@@ -0,0 +1,142 @@
|
||||
/************************************************************************************
|
||||
* configs/stm3240g-eval/src/up_can.c |
||||
* arch/arm/src/board/up_can.c |
||||
* |
||||
* Copyright (C) 2011 Gregory Nutt. All rights reserved. |
||||
* Author: Gregory Nutt <gnutt@nuttx.org> |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions |
||||
* are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright |
||||
* notice, this list of conditions and the following disclaimer in |
||||
* the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* 3. Neither the name NuttX nor the names of its contributors may be |
||||
* used to endorse or promote products derived from this software |
||||
* without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS |
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
||||
* POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
************************************************************************************/ |
||||
|
||||
/************************************************************************************
|
||||
* Included Files |
||||
************************************************************************************/ |
||||
|
||||
#include <nuttx/config.h> |
||||
|
||||
#include <errno.h> |
||||
#include <debug.h> |
||||
|
||||
#include <nuttx/can.h> |
||||
#include <arch/board/board.h> |
||||
|
||||
#include "chip.h" |
||||
#include "up_arch.h" |
||||
|
||||
#include "stm32.h" |
||||
#include "stm32_can.h" |
||||
#include "stm3240g-internal.h" |
||||
|
||||
#if defined(CONFIG_CAN) && (defined(CONFIG_STM32_CAN1) || defined(CONFIG_STM32_CAN2)) |
||||
|
||||
/************************************************************************************
|
||||
* Pre-processor Definitions |
||||
************************************************************************************/ |
||||
/* Configuration ********************************************************************/ |
||||
|
||||
#if defined(CONFIG_STM32_CAN1) && defined(CONFIG_STM32_CAN2) |
||||
# warning "Both CAN1 and CAN2 are enabled. Assuming only CAN1." |
||||
# undef CONFIG_STM32_CAN2 |
||||
#endif |
||||
|
||||
#ifdef CONFIG_STM32_CAN1 |
||||
# define CAN_PORT 1 |
||||
#else |
||||
# define CAN_PORT 2 |
||||
#endif |
||||
|
||||
/* Debug ***************************************************************************/ |
||||
/* Non-standard debug that may be enabled just for testing CAN */ |
||||
|
||||
#ifdef CONFIG_DEBUG_CAN |
||||
# define candbg dbg |
||||
# define canvdbg vdbg |
||||
# define canlldbg lldbg |
||||
# define canllvdbg llvdbg |
||||
#else |
||||
# define candbg(x...) |
||||
# define canvdbg(x...) |
||||
# define canlldbg(x...) |
||||
# define canllvdbg(x...) |
||||
#endif |
||||
|
||||
/************************************************************************************
|
||||
* Private Functions |
||||
************************************************************************************/ |
||||
|
||||
/************************************************************************************
|
||||
* Public Functions |
||||
************************************************************************************/ |
||||
|
||||
/************************************************************************************
|
||||
* Name: can_devinit |
||||
* |
||||
* Description: |
||||
* All STM32 architectures must provide the following interface to work with |
||||
* examples/can. |
||||
* |
||||
************************************************************************************/ |
||||
|
||||
int can_devinit(void) |
||||
{ |
||||
static bool initialized = false; |
||||
struct can_dev_s *can; |
||||
int ret; |
||||
|
||||
/* Check if we have already initialized */ |
||||
|
||||
if (!initialized) |
||||
{ |
||||
/* Call stm32_caninitialize() to get an instance of the CAN interface */ |
||||
|
||||
can = stm32_caninitialize(CAN_PORT); |
||||
if (can == NULL) |
||||
{ |
||||
candbg("ERROR: Failed to get CAN interface\n"); |
||||
return -ENODEV; |
||||
} |
||||
|
||||
/* Register the CAN driver at "/dev/can0" */ |
||||
|
||||
ret = can_register("/dev/can0", can); |
||||
if (ret < 0) |
||||
{ |
||||
candbg("ERROR: can_register failed: %d\n", ret); |
||||
return ret; |
||||
} |
||||
|
||||
/* Now we are initialized */ |
||||
|
||||
initialized = true; |
||||
} |
||||
|
||||
return OK; |
||||
} |
||||
|
||||
#endif /* CONFIG_STM32_CAN || CONFIG_STM32_CAN2 || CONFIG_STM32_CAN3 */ |
Loading…
Reference in new issue