From e6451eae909e7b9557cb0653493f84aa67e61080 Mon Sep 17 00:00:00 2001 From: patacongo Date: Tue, 3 Jul 2012 22:42:27 +0000 Subject: [PATCH] Add LPC32xx CAN header file; Add configuration for the NXP LP4330-Xplorer board git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4901 42af7a65-404d-4744-a932-0658087f49c3 --- arch/arm/Kconfig | 8 +- arch/arm/src/lpc43xx/Kconfig | 95 ++++++ arch/arm/src/lpc43xx/chip/lpc43_can.h | 458 ++++++++++++++++++++++++++ 3 files changed, 560 insertions(+), 1 deletion(-) create mode 100644 arch/arm/src/lpc43xx/Kconfig create mode 100644 arch/arm/src/lpc43xx/chip/lpc43_can.h diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 9df0c20a58..a88af0e5fb 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -58,6 +58,11 @@ config ARCH_CHIP_LPC31XX ---help--- NPX LPC31XX architectures (ARM926EJS). +config ARCH_CHIP_LPC43XX + bool "NXP LPC43XX" + ---help--- + NPX LPC43XX architectures (ARM Cortex-M4). + config ARCH_CHIP_SAM3U bool "Atmel AT91SAM3U" ---help--- @@ -89,7 +94,7 @@ config ARCH_ARM920T config ARCH_CORTEXM bool - default y if ARCH_CHIP_KINETIS || ARCH_CHIP_LM3S || ARCH_CHIP_LPC17XX || ARCH_CHIP_SAM3U || ARCH_CHIP_STM32 + default y if ARCH_CHIP_KINETIS || ARCH_CHIP_LM3S || ARCH_CHIP_LPC17XX || ARCH_CHIP_LPC43XX || ARCH_CHIP_SAM3U || ARCH_CHIP_STM32 config ARCH_FAMILY string @@ -164,6 +169,7 @@ source arch/arm/src/lpc17xx/Kconfig source arch/arm/src/lpc214x/Kconfig source arch/arm/src/lpc2378/Kconfig source arch/arm/src/lpc31xx/Kconfig +source arch/arm/src/lpc43xx/Kconfig source arch/arm/src/sam3u/Kconfig source arch/arm/src/stm32/Kconfig source arch/arm/src/str71x/Kconfig diff --git a/arch/arm/src/lpc43xx/Kconfig b/arch/arm/src/lpc43xx/Kconfig new file mode 100644 index 0000000000..5c5a73a8d3 --- /dev/null +++ b/arch/arm/src/lpc43xx/Kconfig @@ -0,0 +1,95 @@ +# +# For a description of the syntax of this configuration file, +# see misc/tools/kconfig-language.txt. +# + +choice + prompt "LPC43XX Chip Selection" + default ARCH_CHIP_LPC4330FET100 + depends on ARCH_CHIP_LPC43XX + +config ARCH_CHIP_LPC4310FBD144 + bool "LPC4310FBD144 + +config ARCH_CHIP_LPC4310FET100 + bool "LPC4310FET100 + +config ARCH_CHIP_LPC4320FBD144 + bool "LPC4320FBD144 + +config ARCH_CHIP_LPC4320FET100 + bool "LPC4320FET100 + +config ARCH_CHIP_LPC4330FBD144 + bool "LPC4330FBD144 + +config ARCH_CHIP_LPC4330FET100 + bool "LPC4330FET100 + +config ARCH_CHIP_LPC4330FET180 + bool "LPC4330FET180 + +config ARCH_CHIP_LPC4330FET256 + bool "LPC4330FET256 + +config ARCH_CHIP_LPC4350FBD208 + bool "LPC4350FBD208 + +config ARCH_CHIP_LPC4350FET180 + bool "LPC4350FET180 + +config ARCH_CHIP_LPC4350FET256 + bool "LPC4350FET256 + +config ARCH_CHIP_LPC4353FBD208 + bool "LPC4353FBD208 + +config ARCH_CHIP_LPC4353FET180 + bool "LPC4353FET180 + +config ARCH_CHIP_LPC4353FET256 + bool "LPC4353FET256 + +config ARCH_CHIP_LPC4357FET180 + bool "LPC4357FET180 + +config ARCH_CHIP_LPC4357FBD208 + bool "LPC4357FBD208 + +config ARCH_CHIP_LPC4357FET256 + bool "LPC4357FET256 + +endchoice + +config ARCH_FAMILY_LPC4310 + bool + default y if ARCH_CHIP_LPC4310FBD144 || ARCH_CHIP_LPC4310FET100 + +config ARCH_FAMILY_LPC4320 + bool + default y if ARCH_CHIP_LPC4320FBD144 || ARCH_CHIP_LPC4320FET100 + +config ARCH_FAMILY_LPC4330 + bool + default y if ARCH_CHIP_LPC4330FBD144 || ARCH_CHIP_LPC4330FET100 || ARCH_CHIP_LPC4330FET180 || ARCH_CHIP_LPC4330FET256 + +config ARCH_FAMILY_LPC4350 + bool + default y if ARCH_CHIP_LPC4350FBD208 || ARCH_CHIP_LPC4350FET180 || ARCH_CHIP_LPC4350FET256 + +config ARCH_FAMILY_LPC4353 + bool + default y if ARCH_CHIP_LPC4353FBD208 || ARCH_CHIP_LPC4353FET180 || ARCH_CHIP_LPC4353FET256 + +config ARCH_FAMILY_LPC4357 + bool + default y if ARCH_CHIP_LPC4357FET180 || ARCH_CHIP_LPC4357FBD208 || ARCH_CHIP_LPC4357FET256 + +config ARCH_CORTEXM3 + bool + default n if !ARCH_CHIP_LPC43XX + +config ARCH_CORTEXM4 + bool + default y if ARCH_CHIP_LPC43XX + diff --git a/arch/arm/src/lpc43xx/chip/lpc43_can.h b/arch/arm/src/lpc43xx/chip/lpc43_can.h new file mode 100644 index 0000000000..cebeaccd8c --- /dev/null +++ b/arch/arm/src/lpc43xx/chip/lpc43_can.h @@ -0,0 +1,458 @@ +/************************************************************************************ + * arch/arm/src/lpc43xx/chip/lpc43_can.h + * + * Copyright (C) 2012 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * 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 __ARCH_ARM_SRC_LPC43XX_CHIP_LPC43_CAN_H +#define __ARCH_ARM_SRC_LPC43XX_CHIP_LPC43_CAN_H + +/************************************************************************************ + * Included Files + ************************************************************************************/ + +#include + +/************************************************************************************ + * Pre-processor Definitions + ************************************************************************************/ +/* Register Offsets *****************************************************************/ + +#define LPC43_CAN_CNTL_OFFSET 0x0000 /* CAN control register */ +#define LPC43_CAN_STAT_OFFSET 0x0004 /* Status register */ +#define LPC43_CAN_EC_OFFSET 0x0008 /* Error counter register */ +#define LPC43_CAN_BT_OFFSET 0x000c /* Bit timing register */ +#define LPC43_CAN_INT_OFFSET 0x0010 /* Interrupt register */ +#define LPC43_CAN_TEST_OFFSET 0x0014 /* Test register */ +#define LPC43_CAN_BRPE_OFFSET 0x0018 /* Baud rate prescaler extension register */ + +#define LPC43_CAN_IF1_CMDREQ_OFFSET 0x0020 /* Message interface 1 command request */ +#define LPC43_CAN_IF1_CMDMSKW_OFFSET 0x0024 /* Message interface 1 command mask (write) */ +#define LPC43_CAN_IF1_CMDMSKR_OFFSET 0x0024 /* Message interface 1 command mask (read) */ +#define LPC43_CAN_IF1_MSK1_OFFSET 0x0028 /* Message interface 1 mask 1 */ +#define LPC43_CAN_IF1_MSK2_OFFSET 0x002c /* Message interface 1 mask 2 */ +#define LPC43_CAN_IF1_ARB1_OFFSET 0x0030 /* Message interface 1 arbitration */ +#define LPC43_CAN_IF1_ARB2_OFFSET 0x0034 /* Message interface 1 arbitration */ +#define LPC43_CAN_IF1_MCTRL_OFFSET 0x0038 /* Message interface 1 message control */ +#define LPC43_CAN_IF1_DA1_OFFSET 0x003c /* Message interface 1 data A1 */ +#define LPC43_CAN_IF1_DA2_OFFSET 0x0040 /* Message interface 1 data A2 */ +#define LPC43_CAN_IF1_DB1_OFFSET 0x0044 /* Message interface 1 data B1 */ +#define LPC43_CAN_IF1_DB2_OFFSET 0x0048 /* Message interface 1 data B2 */ + +#define LPC43_CAN_IF2_CMDREQ_OFFSET 0x0080 /* Message interface 2 command request */ +#define LPC43_CAN_IF2_CMDMSKW_OFFSET 0x0084 /* Message interface 2 command mask (write) */ +#define LPC43_CAN_IF2_CMDMSKR_OFFSET 0x0084 /* Message interface 2 command mask (read) */ +#define LPC43_CAN_IF2_MSK1_OFFSET 0x0088 /* Message interface 2 mask 1 */ +#define LPC43_CAN_IF2_MSK2_OFFSET 0x008c /* Message interface 2 mask 2 */ +#define LPC43_CAN_IF2_ARB1_OFFSET 0x0090 /* Message interface 2 arbitration 1 */ +#define LPC43_CAN_IF2_ARB2_OFFSET 0x0094 /* Message interface 2 arbitration 2 */ +#define LPC43_CAN_IF2_MCTRL_OFFSET 0x0098 /* Message interface 2 message control */ +#define LPC43_CAN_IF2_DA1_OFFSET 0x009c /* Message interface 2 data A1 */ +#define LPC43_CAN_IF2_DA2_OFFSET 0x00a0 /* Message interface 2 data A2 */ +#define LPC43_CAN_IF2_DB1_OFFSET 0x00a4 /* Message interface 2 data B1 */ +#define LPC43_CAN_IF2_DB2_OFFSET 0x00a8 /* Message interface 2 data B2 */ + +#define LPC43_CAN_TXREQ1_OFFSET 0x0100 /* Transmission request 1 */ +#define LPC43_CAN_TXREQ2_OFFSET 0x0104 /* Transmission request 2 */ +#define LPC43_CAN_ND1_OFFSET 0x0120 /* New data 1 */ +#define LPC43_CAN_ND2_OFFSET 0x0124 /* New data 2 */ +#define LPC43_CAN_IR1_OFFSET 0x0140 /* Interrupt pending 1 */ +#define LPC43_CAN_IR2_OFFSET 0x0144 /* Interrupt pending 2 */ +#define LPC43_CAN_MSGV1_OFFSET 0x0160 /* Message valid 1 */ +#define LPC43_CAN_MSGV2_OFFSET 0x0164 /* Message valid 2 */ +#define LPC43_CAN_CLKDIV_OFFSET 0x0180 /* CAN clock divider register */ + +/* Register Addresses ***************************************************************/ + +#define LPC43_CAN1_CNTL (LPC43_CAN1_BASE+LPC43_CAN_CNTL_OFFSET) +#define LPC43_CAN1_STAT (LPC43_CAN1_BASE+LPC43_CAN_STAT_OFFSET) +#define LPC43_CAN1_EC (LPC43_CAN1_BASE+LPC43_CAN_EC_OFFSET) +#define LPC43_CAN1_BT (LPC43_CAN1_BASE+LPC43_CAN_BT_OFFSET) +#define LPC43_CAN1_INT (LPC43_CAN1_BASE+LPC43_CAN_INT_OFFSET) +#define LPC43_CAN1_TEST (LPC43_CAN1_BASE+LPC43_CAN_TEST_OFFSET) +#define LPC43_CAN1_BRPE (LPC43_CAN1_BASE+LPC43_CAN_BRPE_OFFSET) + +#define LPC43_CAN1_IF1_CMDREQ (LPC43_CAN1_BASE+LPC43_CAN_IF1_CMDREQ_OFFSET) +#define LPC43_CAN1_IF1_CMDMSKW (LPC43_CAN1_BASE+LPC43_CAN_IF1_CMDMSKW_OFFSET) +#define LPC43_CAN1_IF1_CMDMSKR (LPC43_CAN1_BASE+LPC43_CAN_IF1_CMDMSKR_OFFSET) +#define LPC43_CAN1_IF1_MSK1 (LPC43_CAN1_BASE+LPC43_CAN_IF1_MSK1_OFFSET) +#define LPC43_CAN1_IF1_MSK2 (LPC43_CAN1_BASE+LPC43_CAN_IF1_MSK2_OFFSET) +#define LPC43_CAN1_IF1_ARB1 (LPC43_CAN1_BASE+LPC43_CAN_IF1_ARB1_OFFSET) +#define LPC43_CAN1_IF1_ARB2 (LPC43_CAN1_BASE+LPC43_CAN_IF1_ARB2_OFFSET) +#define LPC43_CAN1_IF1_MCTRL (LPC43_CAN1_BASE+LPC43_CAN_IF1_MCTRL_OFFSET) +#define LPC43_CAN1_IF1_DA1 (LPC43_CAN1_BASE+LPC43_CAN_IF1_DA1_OFFSET) +#define LPC43_CAN1_IF1_DA2 (LPC43_CAN1_BASE+LPC43_CAN_IF1_DA2_OFFSET) +#define LPC43_CAN1_IF1_DB1 (LPC43_CAN1_BASE+LPC43_CAN_IF1_DB1_OFFSET) +#define LPC43_CAN1_IF1_DB2 (LPC43_CAN1_BASE+LPC43_CAN_IF1_DB2_OFFSET) + +#define LPC43_CAN1_IF2_CMDREQ (LPC43_CAN1_BASE+LPC43_CAN_IF2_CMDREQ_OFFSET) +#define LPC43_CAN1_IF2_CMDMSKW (LPC43_CAN1_BASE+LPC43_CAN_IF2_CMDMSKW_OFFSET) +#define LPC43_CAN1_IF2_CMDMSKR (LPC43_CAN1_BASE+LPC43_CAN_IF2_CMDMSKR_OFFSET) +#define LPC43_CAN1_IF2_MSK1 (LPC43_CAN1_BASE+LPC43_CAN_IF2_MSK1_OFFSET) +#define LPC43_CAN1_IF2_MSK2 (LPC43_CAN1_BASE+LPC43_CAN_IF2_MSK2_OFFSET) +#define LPC43_CAN1_IF2_ARB1 (LPC43_CAN1_BASE+LPC43_CAN_IF2_ARB1_OFFSET) +#define LPC43_CAN1_IF2_ARB2 (LPC43_CAN1_BASE+LPC43_CAN_IF2_ARB2_OFFSET) +#define LPC43_CAN1_IF2_MCTRL (LPC43_CAN1_BASE+LPC43_CAN_IF2_MCTRL_OFFSET) +#define LPC43_CAN1_IF2_DA1 (LPC43_CAN1_BASE+LPC43_CAN_IF2_DA1_OFFSET) +#define LPC43_CAN1_IF2_DA2 (LPC43_CAN1_BASE+LPC43_CAN_IF2_DA2_OFFSET) +#define LPC43_CAN1_IF2_DB1 (LPC43_CAN1_BASE+LPC43_CAN_IF2_DB1_OFFSET) +#define LPC43_CAN1_IF2_DB2 (LPC43_CAN1_BASE+LPC43_CAN_IF2_DB2_OFFSET) + +#define LPC43_CAN1_TXREQ1 (LPC43_CAN1_BASE+LPC43_CAN_TXREQ1_OFFSET) +#define LPC43_CAN1_TXREQ2 (LPC43_CAN1_BASE+LPC43_CAN_TXREQ2_OFFSET) +#define LPC43_CAN1_ND1 (LPC43_CAN1_BASE+LPC43_CAN_ND1_OFFSET) +#define LPC43_CAN1_ND2 (LPC43_CAN1_BASE+LPC43_CAN_ND2_OFFSET) +#define LPC43_CAN1_IR1 (LPC43_CAN1_BASE+LPC43_CAN_IR1_OFFSET) +#define LPC43_CAN1_IR2 (LPC43_CAN1_BASE+LPC43_CAN_IR2_OFFSET) +#define LPC43_CAN1_MSGV1 (LPC43_CAN1_BASE+LPC43_CAN_MSGV1_OFFSET) +#define LPC43_CAN1_MSGV2 (LPC43_CAN1_BASE+LPC43_CAN_MSGV2_OFFSET) +#define LPC43_CAN1_CLKDIV (LPC43_CAN1_BASE+LPC43_CAN_CLKDIV_OFFSET) + +#define LPC43_CAN2_CNTL (LPC43_CAN2_BASE+LPC43_CAN_CNTL_OFFSET) +#define LPC43_CAN2_STAT (LPC43_CAN2_BASE+LPC43_CAN_STAT_OFFSET) +#define LPC43_CAN2_EC (LPC43_CAN2_BASE+LPC43_CAN_EC_OFFSET) +#define LPC43_CAN2_BT (LPC43_CAN2_BASE+LPC43_CAN_BT_OFFSET) +#define LPC43_CAN2_INT (LPC43_CAN2_BASE+LPC43_CAN_INT_OFFSET) +#define LPC43_CAN2_TEST (LPC43_CAN2_BASE+LPC43_CAN_TEST_OFFSET) +#define LPC43_CAN2_BRPE (LPC43_CAN2_BASE+LPC43_CAN_BRPE_OFFSET) + +#define LPC43_CAN2_IF1_CMDREQ (LPC43_CAN2_BASE+LPC43_CAN_IF1_CMDREQ_OFFSET) +#define LPC43_CAN2_IF1_CMDMSKW (LPC43_CAN2_BASE+LPC43_CAN_IF1_CMDMSKW_OFFSET) +#define LPC43_CAN2_IF1_CMDMSKR (LPC43_CAN2_BASE+LPC43_CAN_IF1_CMDMSKR_OFFSET) +#define LPC43_CAN2_IF1_MSK1 (LPC43_CAN2_BASE+LPC43_CAN_IF1_MSK1_OFFSET) +#define LPC43_CAN2_IF1_MSK2 (LPC43_CAN2_BASE+LPC43_CAN_IF1_MSK2_OFFSET) +#define LPC43_CAN2_IF1_ARB1 (LPC43_CAN2_BASE+LPC43_CAN_IF1_ARB1_OFFSET) +#define LPC43_CAN2_IF1_ARB2 (LPC43_CAN2_BASE+LPC43_CAN_IF1_ARB2_OFFSET) +#define LPC43_CAN2_IF1_MCTRL (LPC43_CAN2_BASE+LPC43_CAN_IF1_MCTRL_OFFSET) +#define LPC43_CAN2_IF1_DA1 (LPC43_CAN2_BASE+LPC43_CAN_IF1_DA1_OFFSET) +#define LPC43_CAN2_IF1_DA2 (LPC43_CAN2_BASE+LPC43_CAN_IF1_DA2_OFFSET) +#define LPC43_CAN2_IF1_DB1 (LPC43_CAN2_BASE+LPC43_CAN_IF1_DB1_OFFSET) +#define LPC43_CAN2_IF1_DB2 (LPC43_CAN2_BASE+LPC43_CAN_IF1_DB2_OFFSET) + +#define LPC43_CAN2_IF2_CMDREQ (LPC43_CAN2_BASE+LPC43_CAN_IF2_CMDREQ_OFFSET) +#define LPC43_CAN2_IF2_CMDMSKW (LPC43_CAN2_BASE+LPC43_CAN_IF2_CMDMSKW_OFFSET) +#define LPC43_CAN2_IF2_CMDMSKR (LPC43_CAN2_BASE+LPC43_CAN_IF2_CMDMSKR_OFFSET) +#define LPC43_CAN2_IF2_MSK1 (LPC43_CAN2_BASE+LPC43_CAN_IF2_MSK1_OFFSET) +#define LPC43_CAN2_IF2_MSK2 (LPC43_CAN2_BASE+LPC43_CAN_IF2_MSK2_OFFSET) +#define LPC43_CAN2_IF2_ARB1 (LPC43_CAN2_BASE+LPC43_CAN_IF2_ARB1_OFFSET) +#define LPC43_CAN2_IF2_ARB2 (LPC43_CAN2_BASE+LPC43_CAN_IF2_ARB2_OFFSET) +#define LPC43_CAN2_IF2_MCTRL (LPC43_CAN2_BASE+LPC43_CAN_IF2_MCTRL_OFFSET) +#define LPC43_CAN2_IF2_DA1 (LPC43_CAN2_BASE+LPC43_CAN_IF2_DA1_OFFSET) +#define LPC43_CAN2_IF2_DA2 (LPC43_CAN2_BASE+LPC43_CAN_IF2_DA2_OFFSET) +#define LPC43_CAN2_IF2_DB1 (LPC43_CAN2_BASE+LPC43_CAN_IF2_DB1_OFFSET) +#define LPC43_CAN2_IF2_DB2 (LPC43_CAN2_BASE+LPC43_CAN_IF2_DB2_OFFSET) + +#define LPC43_CAN2_TXREQ1 (LPC43_CAN2_BASE+LPC43_CAN_TXREQ1_OFFSET) +#define LPC43_CAN2_TXREQ2 (LPC43_CAN2_BASE+LPC43_CAN_TXREQ2_OFFSET) +#define LPC43_CAN2_ND1 (LPC43_CAN2_BASE+LPC43_CAN_ND1_OFFSET) +#define LPC43_CAN2_ND2 (LPC43_CAN2_BASE+LPC43_CAN_ND2_OFFSET) +#define LPC43_CAN2_IR1 (LPC43_CAN2_BASE+LPC43_CAN_IR1_OFFSET) +#define LPC43_CAN2_IR2 (LPC43_CAN2_BASE+LPC43_CAN_IR2_OFFSET) +#define LPC43_CAN2_MSGV1 (LPC43_CAN2_BASE+LPC43_CAN_MSGV1_OFFSET) +#define LPC43_CAN2_MSGV2 (LPC43_CAN2_BASE+LPC43_CAN_MSGV2_OFFSET) +#define LPC43_CAN2_CLKDIV (LPC43_CAN2_BASE+LPC43_CAN_CLKDIV_OFFSET) + +/* Register Bit Definitions *********************************************************/ + +/* CAN control register */ + +#define CAN_CNTL_INIT (1 << 0) /* Bit 0: Initialization */ +#define CAN_CNTL_IE (1 << 1) /* Bit 1: Module interrupt enable */ +#define CAN_CNTL_SIE (1 << 2) /* Bit 2: Status change interrupt enable */ +#define CAN_CNTL_EIE (1 << 3) /* Bit 3: Error interrupt enable */ + /* Bit 4: Reserved */ +#define CAN_CNTL_DAR (1 << 5) /* Bit 5: Disable automatic retransmission */ +#define CAN_CNTL_CCE (1 << 6) /* Bit 6: Configuration change enable */ +#define CAN_CNTL_TEST (1 << 7) /* Bit 7: Test mode enable */ + /* Bits 8-31: Reserved */ +/* Status register */ + +#define CAN_STAT_LEC_SHIFT (0) /* Bits 0-2: Last error code */ +#define CAN_STAT_LEC_MASK (7 << CAN_STAT_LEC_SHIFT) +#define CAN_STAT_LEC_NOE (0 << CAN_STAT_LEC_SHIFT) /* No error */ +#define CAN_STAT_LEC_STUFFE (1 << CAN_STAT_LEC_SHIFT) /* Stuff error */ +#define CAN_STAT_LEC_FORME (2 << CAN_STAT_LEC_SHIFT) /* Form error */ +#define CAN_STAT_LEC_ACKE (3 << CAN_STAT_LEC_SHIFT) /* AckError */ +#define CAN_STAT_LEC_BI1E (4 << CAN_STAT_LEC_SHIFT) /* Bit1Error */ +#define CAN_STAT_LEC_BIT0E (5 << CAN_STAT_LEC_SHIFT) /* Bit0Error */ +#define CAN_STAT_LEC_CRCE (6 << CAN_STAT_LEC_SHIFT) /* CRCError */ +#define CAN_STAT_TXOK (1 << 3) /* Bit 3: Transmitted a message successfully */ +#define CAN_STAT_RXOK (1 << 4) /* Bit 4: Received a message successfully */ +#define CAN_STAT_EPASS (1 << 5) /* Bit 5: Error passive */ +#define CAN_STAT_EWARN (1 << 6) /* Bit 6: Warning status */ +#define CAN_STAT_BOFF (1 << 7) /* Bit 7: Busoff status */ + /* Bits 8-31: Reserved */ +/* Error counter register */ + +#define CAN_EC_TEC_SHIFT (0) /* Bits 0-7: Transmit error counter */ +#define CAN_EC_TEC_MASK (0xff << CAN_EC_TEC_SHIFT) +#define CAN_EC_REC_SHIFT (8) /* Bits 8-14: Receive error counter */ +#define CAN_EC_REC_MASK (0x7f << CAN_EC_REC_SHIFT) +#define CAN_EC_RP (1 << 15) /* Bit 15: Receive error passive */ + /* Bits 16-31: Reserved */ +/* Bit timing register */ + +#define CAN_BT_BRP_SHIFT (0) /* Bits 0-5: Baud rate prescaler */ +#define CAN_BT_BRP_MASK (0x3f << CAN_BT_BRP_SHIFT) +#define CAN_BT_SJW_SHIFT (6) /* Bits 6-7: (Re)synchronization jump width */ +#define CAN_BT_SJW_MASK (3 << CAN_BT_SJW_SHIFT) +#define CAN_BT_TSEG1_SHIFT (8) /* Bits 8-11: Time segment after the sample point */ +#define CAN_BT_TSEG1_MASK (15 << CAN_BT_TSEG1_SHIFT) +#define CAN_BT_TSEG2_SHIFT (12) /* Bits 12-14: Time segment before the sample point */ +#define CAN_BT_TSEG2_MASK (7 << CAN_BT_TSEG2_SHIFT) + /* Bits 15-31: Reserved */ +/* Interrupt register */ + +#define CAN_INT_SHIFT (0) /* Bits 0-15: Interrupt ID */ +#define CAN_INT_MASK (0xffff << CAN_INT_SHIFT) +# define CAN_INT_NONE (0 << CAN_INT_SHIFT) /* No interrupt pending */ +# define CAN_INT_MSG1 (1 << CAN_INT_SHIFT) /* Message 1 */ +# define CAN_INT_MSG2 (2 << CAN_INT_SHIFT) /* Message 2 */ +# define CAN_INT_MSG3 (3 << CAN_INT_SHIFT) /* Message 3 */ +# define CAN_INT_MSG4 (4 << CAN_INT_SHIFT) /* Message 4 */ +# define CAN_INT_MSG5 (5 << CAN_INT_SHIFT) /* Message 5 */ +# define CAN_INT_MSG6 (6 << CAN_INT_SHIFT) /* Message 6 */ +# define CAN_INT_MSG7 (7 << CAN_INT_SHIFT) /* Message 7 */ +# define CAN_INT_MSG8 (8 << CAN_INT_SHIFT) /* Message 8 */ +# define CAN_INT_MSG9 (9 << CAN_INT_SHIFT) /* Message 9 */ +# define CAN_INT_MSG10 (10 << CAN_INT_SHIFT) /* Message 10 */ +# define CAN_INT_MSG11 (11 << CAN_INT_SHIFT) /* Message 11 */ +# define CAN_INT_MSG12 (12 << CAN_INT_SHIFT) /* Message 12 */ +# define CAN_INT_MSG13 (13 << CAN_INT_SHIFT) /* Message 13 */ +# define CAN_INT_MSG14 (14 << CAN_INT_SHIFT) /* Message 14 */ +# define CAN_INT_MSG15 (15 << CAN_INT_SHIFT) /* Message 15 */ +# define CAN_INT_MSG16 (16 << CAN_INT_SHIFT) /* Message 16 */ +# define CAN_INT_MSG17 (17 << CAN_INT_SHIFT) /* Message 17 */ +# define CAN_INT_MSG18 (18 << CAN_INT_SHIFT) /* Message 18 */ +# define CAN_INT_MSG19 (19 << CAN_INT_SHIFT) /* Message 19 */ +# define CAN_INT_MSG20 (20 << CAN_INT_SHIFT) /* Message 20 */ +# define CAN_INT_MSG21 (21 << CAN_INT_SHIFT) /* Message 21 */ +# define CAN_INT_MSG22 (22 << CAN_INT_SHIFT) /* Message 22 */ +# define CAN_INT_MSG23 (23 << CAN_INT_SHIFT) /* Message 23 */ +# define CAN_INT_MSG24 (24 << CAN_INT_SHIFT) /* Message 24 */ +# define CAN_INT_MSG25 (25 << CAN_INT_SHIFT) /* Message 25 */ +# define CAN_INT_MSG26 (26 << CAN_INT_SHIFT) /* Message 26 */ +# define CAN_INT_MSG27 (27 << CAN_INT_SHIFT) /* Message 27 */ +# define CAN_INT_MSG28 (28 << CAN_INT_SHIFT) /* Message 28 */ +# define CAN_INT_MSG29 (29 << CAN_INT_SHIFT) /* Message 29 */ +# define CAN_INT_MSG30 (30 << CAN_INT_SHIFT) /* Message 30 */ +# define CAN_INT_MSG31 (31 << CAN_INT_SHIFT) /* Message 31 */ +# define CAN_INT_MSG32 (32 << CAN_INT_SHIFT) /* Message 32 */ +# define CAN_INT_MSG32 (0x8000 << CAN_INT_SHIFT) /* Status interrupt */ + /* Bits 16-31: Reserved */ +/* Test register */ + /* Bits 0-1: Reserved */ +#define CAN_TEST_BASIC (1 << 2) /* Bit 2: Basic mode */ +#define CAN_TEST_SILENT (1 << 3) /* Bit 3: Silent mode */ +#define CAN_TEST_LBACK (1 << 4) /* Bit 4: Loop back mode */ +#define CAN_TEST_TX_SHIFT (5) /* Bits 5-6: Control of TD pins */ +#define CAN_TEST_TX_MASK (3 << CAN_TEST_TX_SHIFT) +# define CAN_TEST_TX_CAN (0 << CAN_TEST_TX_SHIFT) /* Level controlled CAN controller */ +# define CAN_TEST_TX_MONITOR (1 << CAN_TEST_TX_SHIFT) /* Sample point monitored TD pin */ +# define CAN_TEST_TX_DOMINANT (2 << CAN_TEST_TX_SHIFT) /* TD pin LOW/dominant */ +# define CAN_TEST_TX_RECESSIVE (3 << CAN_TEST_TX_SHIFT) /* TD pin HIGH/recessive */ +#define CAN_TEST_RX (1 << 7) /* Bit 7: Monitors actual value of RD Pin */ + /* Bits 8-31: Reserved */ +/* Baud rate prescaler extension register */ + +#define CAN_BRPE_SHIFT (0) /* Bits 0-3: Baud rate prescaler extension */ +#define CAN_BRPE_MASK (15 << CAN_BRPE_SHIFT) + /* Bits 4-31: Reserved */ +/* Message interface 1/2 command request */ + +#define CAN_CMDREQ_MSGNO_SHIFT (0) /* Bits 0-5: Message number */ +#define CAN_CMDREQ_MSGNO_MASK (0x3f << CAN_CMDREQ_MSGNO_SHIFT) + /* Bits 6-14: Reserved */ +#define CAN_CMDREQ_BUSY (1 << 15) /* Bit 15: BUSY flag */ + /* Bits 16-31: Reserved */ +/* Message interface 1/2 command mask (write) */ + +#define CAN_CMDMSKW_DATAB (1 << 0) /* Bit 0: Access data bytes 4-7 */ +#define CAN_CMDMSKW_DATAA (1 << 1) /* Bit 1: Access data bytes 0-3 */ +#define CAN_CMDMSKW_TXRQST (1 << 2) /* Bit 2: Access transmission request bit */ +#define CAN_CMDMSKW_CLRINTPND (1 << 3) /* Bit 3: Ignored in the write direction */ +#define CAN_CMDMSKW_CTRL (1 << 4) /* Bit 4: Access control bits */ +#define CAN_CMDMSKW_ARB (1 << 5) /* Bit 5: Access arbitration bits */ +#define CAN_CMDMSKW_MASK (1 << 6) /* Bit 6: Access mask bits */ +#define CAN_CMDMSKW_WRRD (1 << 7) /* Bit 7: Write transfer (1) */ + /* Bits 8-31: Reserved */ +/* Message interface 1/2 command mask (read) */ + +#define CAN_CMDMSKR_DATAB (1 << 0) /* Bit 0: Access data bytes 4-7 */ +#define CAN_CMDMSKR_DATAA (1 << 1) /* Bit 1: Access data bytes 0-3 */ +#define CAN_CMDMSKR_NEWDAT (1 << 2) /* Bit 2: Access new data bit */ +#define CAN_CMDMSKR_CLRINTPND (1 << 3) /* Bit 3: Clear interrupt pending bit */ +#define CAN_CMDMSKR_CTRL (1 << 4) /* Bit 4: Access control bits */ +#define CAN_CMDMSKR_ARB (1 << 5) /* Bit 5: Access arbitration bits */ +#define CAN_CMDMSKR_MASK (1 << 6) /* Bit 6: Access mask bits */ +#define CAN_CMDMSKR_WRRD (1 << 7) /* Bit 7: Read transfer (0) */ + /* Bits 8-31: Reserved */ +/* Message interface 1/2 mask 1 */ + +#define CAN_MSK1 0xffff /* Bits 0-15: Identifier mask 0-15 */ + /* Bits 16-31: Reserved */ +/* Message interface 1/2 mask 2 */ + +#define CAN_MSK2 0x1fff /* Bits 0-12: Identifier mask 16-28 */ + /* Bit 13: Reserved */ +#define CAN_MSK2_MDIR (1 << 14) /* Bit 14: Mask message direction */ +#define CAN_MSK2_MXTD (1 << 15) /* Bit 15: Mask extend identifier */ + /* Bits 16-31: Reserved */ +/* Message interface 1/2 arbitration */ + +#define CAN_ARB1 0xffff /* Bits 0-15: Identifier mask 0-15 */ + /* Bits 16-31: Reserved */ +/* Message interface 1/2 arbitration */ + +#define CAN_MSK2 0x1fff /* Bits 0-12: Identifier mask 16-28 */ +#define CAN_MSK2_DIR (1 << 13) /* Bit 13: Message direction */ +#define CAN_MSK2_XTD (1 << 14) /* Bit 14: Extend identifier */ +#define CAN_MSK2_MSGVAL (1 << 15) /* Bit 15: Message valid */ + /* Bits 16-31: Reserved */ +/* Message interface 1 message control */ + +#define CAN_MCTRL_DLC_SHIFT (0) /* Bits 0-3: Data length code */ +#define CAN_MCTRL_DLC_MASK (15 << CAN_MCTRL_DLC_SHIFT) + /* Bits 4-6: Reserved */ +#define CAN_MCTRL_EOB (1 << 7) /* Bit 7: End of buffer */ +#define CAN_MCTRL_TXRQST (1 << 8) /* Bit 8: Transmit request */ +#define CAN_MCTRL_RMTEN (1 << 9) /* Bit 9: Remote enable */ +#define CAN_MCTRL_RXIE (1 << 10) /* Bit 10: Receive interrupt enable */ +#define CAN_MCTRL_TXIE (1 << 11) /* Bit 11: Transmit interrupt enable */ +#define CAN_MCTRL_UMASK (1 << 12) /* Bit 12: Use acceptance mask */ +#define CAN_MCTRL_INTPND (1 << 13) /* Bit 13: Interrupt pending */ +#define CAN_MCTRL_MSGLST (1 << 14) /* Bit 14: Message lost */ +#define CAN_MCTRL_NEWDAT (1 << 15) /* Bit 15: New data */ + /* Bits 16-31: Reserved */ +/* Message interface 1/2 data A1 */ + +#define CAN_DA1_DATA0_SHIFT (0) /* Bits 0-7: Data byte 0 */ +#define CAN_DA1_DATA0_MASK (0xff << CAN_DA1_DATA0_SHIFT) +#define CAN_DA1_DATA1_SHIFT (8) /* Bits 8-15: Data byte 1 */ +#define CAN_DA1_DATA1_MASK (0xff << CAN_DA1_DATA1_SHIFT) + /* Bits 16-31: Reserved */ +/* Message interface 1/2 data A2 */ + +#define CAN_DA2_DATA2_SHIFT (0) /* Bits 0-7: Data byte 2 */ +#define CAN_DA2_DATA2_MASK (0xff << CAN_DA2_DATA2_SHIFT) +#define CAN_DA2_DATA3_SHIFT (8) /* Bits 8-15: Data byte 3 */ +#define CAN_DA2_DATA3_MASK (0xff << CAN_DA2_DATA3_SHIFT) + /* Bits 16-31: Reserved */ +/* Message interface 1/2 data B1 */ + +#define CAN_DB1_DATA4_SHIFT (0) /* Bits 0-7: Data byte 4 */ +#define CAN_DB1_DATA4_MASK (0xff << CAN_DB1_DATA4_SHIFT) +#define CAN_DB1_DATA5_SHIFT (8) /* Bits 8-15: Data byte 5 */ +#define CAN_DB1_DATA5_MASK (0xff << CAN_DB1_DATA5_SHIFT) + /* Bits 16-31: Reserved */ +/* Message interface 1/2 data B2 */ + +#define CAN_DB2_DATA6_SHIFT (0) /* Bits 0-7: Data byte 6 */ +#define CAN_DB2_DATA6_MASK (0xff << CAN_DB2_DATA6_SHIFT) +#define CAN_DB2_DATA7_SHIFT (8) /* Bits 8-15: Data byte 7 */ +#define CAN_DB2_DATA7_MASK (0xff << CAN_DB2_DATA6_SHIFT) + /* Bits 16-31: Reserved */ +/* Transmission request 1 */ + +#define CAN_TXREQ1_MASK 0xffff /* Bits 0-15: TX request bit msg 1-16 */ +#define CAN_TXREQ1(n) (1 << ((n)-1) + /* Bits 16-31: Reserved */ +/* Transmission request 2 */ + +#define CAN_TXREQ2_MASK 0xffff /* Bits 0-15: TX request bit msg 17-32 */ +#define CAN_TXREQ2(n) (1 << ((n)-17) + /* Bits 16-31: Reserved */ +/* New data 1 */ + +#define CAN_ND1_MASK 0xffff /* Bits 0-15: New data bits msg 1-16 */ +#define CAN_ND1(n) (1 << ((n)-1) + /* Bits 16-31: Reserved */ +/* New data 2 */ + +#define CAN_ND2_MASK 0xffff /* Bits 0-15: New data bits msg 17-32 */ +#define CAN_ND2(n) (1 << ((n)-17) + /* Bits 16-31: Reserved */ +/* Interrupt pending 1 */ + +#define CAN_IR1_MASK 0xffff /* Bits 0-15: Interrup pending msg 1-16 */ +#define CAN_IR1(n) (1 << ((n)-1) + /* Bits 16-31: Reserved */ +/* Interrupt pending 2 */ + +#define CAN_IR2_MASK 0xffff /* Bits 0-15: Interrup pending msg 17-32 */ +#define CAN_IR2(n) (1 << ((n)-17) + /* Bits 16-31: Reserved */ +/* Message valid 1 */ + +#define CAN_MSGV1_MASK 0xffff /* Bits 0-15: Interrup pending msg 1-16 */ +#define CAN_MSGV1(n) (1 << ((n)-1) + /* Bits 16-31: Reserved */ +/* Message valid 2 */ + +#define CAN_MSGV2_MASK 0xffff /* Bits 0-15: Interrup pending msg 17-32 */ +#define CAN_MSGV2(n) (1 << ((n)-17) + /* Bits 16-31: Reserved */ +/* CAN clock divider register */ + +#define CAN_CLKDIV_SHIFT (0) /* Bits 0-3: Clock divider value */ +#define CAN_CLKDIV_MASK (15 << CAN_CLKDIV_SHIFT) +# define CAN_CLKDIV_DIV1 (0 << CAN_CLKDIV_SHIFT) /* CAN_CLK = PCLK / 1 */ +# define CAN_CLKDIV_DIV2 (1 << CAN_CLKDIV_SHIFT) /* CAN_CLK = PCLK / 2 */ +# define CAN_CLKDIV_DIV3 (2 << CAN_CLKDIV_SHIFT) /* CAN_CLK = PCLK / 3 */ +# define CAN_CLKDIV_DIV5 (3 << CAN_CLKDIV_SHIFT) /* CAN_CLK = PCLK / 5 */ +# define CAN_CLKDIV_DIV9 (4 << CAN_CLKDIV_SHIFT) /* CAN_CLK = PCLK / 9 */ +# define CAN_CLKDIV_DIV 17 (5 << CAN_CLKDIV_SHIFT) /* CAN_CLK = PCLK / 17 */ +# define CAN_CLKDIV_DIV33 (6 << CAN_CLKDIV_SHIFT) /* CAN_CLK = PCLK / 33 */ +# define CAN_CLKDIV_DIV65 (7 << CAN_CLKDIV_SHIFT) /* CAN_CLK = PCLK / 65 */ +# define CAN_CLKDIV_DIV129 (8 << CAN_CLKDIV_SHIFT) /* CAN_CLK = PCLK / 129 */ +# define CAN_CLKDIV_DIV257 (9 << CAN_CLKDIV_SHIFT) /* CAN_CLK = PCLK / 257 */ +# define CAN_CLKDIV_DIV513 (10 << CAN_CLKDIV_SHIFT) /* CAN_CLK = PCLK / 513 */ +# define CAN_CLKDIV_DIV1025 (11 << CAN_CLKDIV_SHIFT) /* CAN_CLK = PCLK / 1025 */ +# define CAN_CLKDIV_DIV2049 (12 << CAN_CLKDIV_SHIFT) /* CAN_CLK = PCLK / 2049 */ +# define CAN_CLKDIV_DIV4097 (13 << CAN_CLKDIV_SHIFT) /* CAN_CLK = PCLK / 4097 */ +# define CAN_CLKDIV_DIV8093 (14 << CAN_CLKDIV_SHIFT) /* CAN_CLK = PCLK / 8093 */ +# define CAN_CLKDIV_DIV16385 (15 << CAN_CLKDIV_SHIFT) /* CAN_CLK = PCLK / 16385 */ + /* Bits 4-31: Reserved */ + +/************************************************************************************ + * Public Types + ************************************************************************************/ + +/************************************************************************************ + * Public Data + ************************************************************************************/ + +/************************************************************************************ + * Public Functions + ************************************************************************************/ + +#endif /* __ARCH_ARM_SRC_LPC43XX_CHIP_LPC43_CAN_H */