summaryrefslogtreecommitdiff
path: root/include/arch/rm46l8lp/halcogen/can.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/arch/rm46l8lp/halcogen/can.h')
-rw-r--r--include/arch/rm46l8lp/halcogen/can.h729
1 files changed, 729 insertions, 0 deletions
diff --git a/include/arch/rm46l8lp/halcogen/can.h b/include/arch/rm46l8lp/halcogen/can.h
new file mode 100644
index 0000000..54f3ca4
--- /dev/null
+++ b/include/arch/rm46l8lp/halcogen/can.h
@@ -0,0 +1,729 @@
+/** @file can.h
+* @brief CAN Driver Header File
+* @date 11-Dec-2018
+* @version 04.07.01
+*
+* This file contains:
+* - Definitions
+* - Types
+* - Interface Prototypes
+* .
+* which are relevant for the CAN driver.
+*/
+
+/*
+* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com
+*
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+*
+* Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+*
+* 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.
+*
+* Neither the name of Texas Instruments Incorporated 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 __CAN_H__
+#define __CAN_H__
+
+#include "reg_can.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* USER CODE BEGIN (0) */
+/* USER CODE END */
+
+/* CAN General Definitions */
+
+/** @def canLEVEL_ACTIVE
+* @brief Alias name for CAN error operation level active (Error counter 0-31)
+*/
+#define canLEVEL_ACTIVE 0x00U
+
+/** @def canLEVEL_PASSIVE
+* @brief Alias name for CAN error operation level passive (Error counter 32-63)
+*/
+#define canLEVEL_PASSIVE 0x20U
+
+/** @def canLEVEL_WARNING
+* @brief Alias name for CAN error operation level warning (Error counter 64-127)
+*/
+#define canLEVEL_WARNING 0x40U
+
+/** @def canLEVEL_BUS_OFF
+* @brief Alias name for CAN error operation level bus off (Error counter 128-255)
+*/
+#define canLEVEL_BUS_OFF 0x80U
+
+/** @def canLEVEL_PARITY_ERR
+* @brief Alias name for CAN Parity error (Error counter 256-511)
+*/
+#define canLEVEL_PARITY_ERR 0x100U
+
+/** @def canLEVEL_TxOK
+* @brief Alias name for CAN Sucessful Transmission
+*/
+#define canLEVEL_TxOK 0x08U
+
+/** @def canLEVEL_RxOK
+* @brief Alias name for CAN Sucessful Reception
+*/
+#define canLEVEL_RxOK 0x10U
+
+/** @def canLEVEL_WakeUpPnd
+* @brief Alias name for CAN Initiated a WakeUp to system
+*/
+#define canLEVEL_WakeUpPnd 0x200U
+
+/** @def canLEVEL_PDA
+* @brief Alias name for CAN entered low power mode successfully.
+*/
+#define canLEVEL_PDA 0x400U
+
+/** @def canERROR_NO
+* @brief Alias name for no CAN error occurred
+*/
+#define canERROR_OK 0U
+
+/** @def canERROR_STUFF
+* @brief Alias name for CAN stuff error an RX message
+*/
+#define canERROR_STUFF 1U
+
+/** @def canERROR_FORMAT
+* @brief Alias name for CAN form/format error an RX message
+*/
+#define canERROR_FORMAT 2U
+
+/** @def canERROR_ACKNOWLEDGE
+* @brief Alias name for CAN TX message wasn't acknowledged
+*/
+#define canERROR_ACKNOWLEDGE 3U
+
+/** @def canERROR_BIT1
+* @brief Alias name for CAN TX message sending recessive level but monitoring dominant
+*/
+#define canERROR_BIT1 4U
+
+/** @def canERROR_BIT0
+* @brief Alias name for CAN TX message sending dominant level but monitoring recessive
+*/
+#define canERROR_BIT0 5U
+
+/** @def canERROR_CRC
+* @brief Alias name for CAN RX message received wrong CRC
+*/
+#define canERROR_CRC 6U
+
+/** @def canERROR_NO
+* @brief Alias name for CAN no message has send or received since last call of CANGetLastError
+*/
+#define canERROR_NO 7U
+
+/** @def canMESSAGE_BOX1
+* @brief Alias name for CAN message box 1
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX1 1U
+
+/** @def canMESSAGE_BOX2
+* @brief Alias name for CAN message box 2
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX2 2U
+
+/** @def canMESSAGE_BOX3
+* @brief Alias name for CAN message box 3
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX3 3U
+
+/** @def canMESSAGE_BOX4
+* @brief Alias name for CAN message box 4
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX4 4U
+
+/** @def canMESSAGE_BOX5
+* @brief Alias name for CAN message box 5
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX5 5U
+
+/** @def canMESSAGE_BOX6
+* @brief Alias name for CAN message box 6
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX6 6U
+
+/** @def canMESSAGE_BOX7
+* @brief Alias name for CAN message box 7
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX7 7U
+
+/** @def canMESSAGE_BOX8
+* @brief Alias name for CAN message box 8
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX8 8U
+
+/** @def canMESSAGE_BOX9
+* @brief Alias name for CAN message box 9
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX9 9U
+
+/** @def canMESSAGE_BOX10
+* @brief Alias name for CAN message box 10
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX10 10U
+
+/** @def canMESSAGE_BOX11
+* @brief Alias name for CAN message box 11
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX11 11U
+
+/** @def canMESSAGE_BOX12
+* @brief Alias name for CAN message box 12
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX12 12U
+
+/** @def canMESSAGE_BOX13
+* @brief Alias name for CAN message box 13
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX13 13U
+
+/** @def canMESSAGE_BOX14
+* @brief Alias name for CAN message box 14
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX14 14U
+
+/** @def canMESSAGE_BOX15
+* @brief Alias name for CAN message box 15
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX15 15U
+
+/** @def canMESSAGE_BOX16
+* @brief Alias name for CAN message box 16
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX16 16U
+
+/** @def canMESSAGE_BOX17
+* @brief Alias name for CAN message box 17
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX17 17U
+
+/** @def canMESSAGE_BOX18
+* @brief Alias name for CAN message box 18
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX18 18U
+
+/** @def canMESSAGE_BOX19
+* @brief Alias name for CAN message box 19
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX19 19U
+
+/** @def canMESSAGE_BOX20
+* @brief Alias name for CAN message box 20
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX20 20U
+
+/** @def canMESSAGE_BOX21
+* @brief Alias name for CAN message box 21
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX21 21U
+
+/** @def canMESSAGE_BOX22
+* @brief Alias name for CAN message box 22
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX22 22U
+
+/** @def canMESSAGE_BOX23
+* @brief Alias name for CAN message box 23
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX23 23U
+
+/** @def canMESSAGE_BOX24
+* @brief Alias name for CAN message box 24
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX24 24U
+
+/** @def canMESSAGE_BOX25
+* @brief Alias name for CAN message box 25
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX25 25U
+
+/** @def canMESSAGE_BOX26
+* @brief Alias name for CAN message box 26
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX26 26U
+
+/** @def canMESSAGE_BOX27
+* @brief Alias name for CAN message box 27
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX27 27U
+
+/** @def canMESSAGE_BOX28
+* @brief Alias name for CAN message box 28
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX28 28U
+
+/** @def canMESSAGE_BOX29
+* @brief Alias name for CAN message box 29
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX29 29U
+
+/** @def canMESSAGE_BOX30
+* @brief Alias name for CAN message box 30
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX30 30U
+
+/** @def canMESSAGE_BOX31
+* @brief Alias name for CAN message box 31
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX31 31U
+
+/** @def canMESSAGE_BOX32
+* @brief Alias name for CAN message box 32
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX32 32U
+
+/** @def canMESSAGE_BOX33
+* @brief Alias name for CAN message box 33
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX33 33U
+
+/** @def canMESSAGE_BOX34
+* @brief Alias name for CAN message box 34
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX34 34U
+
+/** @def canMESSAGE_BOX35
+* @brief Alias name for CAN message box 35
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX35 35U
+
+/** @def canMESSAGE_BOX36
+* @brief Alias name for CAN message box 36
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX36 36U
+
+/** @def canMESSAGE_BOX37
+* @brief Alias name for CAN message box 37
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX37 37U
+
+/** @def canMESSAGE_BOX38
+* @brief Alias name for CAN message box 38
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX38 38U
+
+/** @def canMESSAGE_BOX39
+* @brief Alias name for CAN message box 39
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX39 39U
+
+/** @def canMESSAGE_BOX40
+* @brief Alias name for CAN message box 40
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX40 40U
+
+/** @def canMESSAGE_BOX41
+* @brief Alias name for CAN message box 41
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX41 41U
+
+/** @def canMESSAGE_BOX42
+* @brief Alias name for CAN message box 42
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX42 42U
+
+/** @def canMESSAGE_BOX43
+* @brief Alias name for CAN message box 43
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX43 43U
+
+/** @def canMESSAGE_BOX44
+* @brief Alias name for CAN message box 44
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX44 44U
+
+/** @def canMESSAGE_BOX45
+* @brief Alias name for CAN message box 45
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX45 45U
+
+/** @def canMESSAGE_BOX46
+* @brief Alias name for CAN message box 46
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX46 46U
+
+/** @def canMESSAGE_BOX47
+* @brief Alias name for CAN message box 47
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX47 47U
+
+/** @def canMESSAGE_BOX48
+* @brief Alias name for CAN message box 48
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX48 48U
+
+/** @def canMESSAGE_BOX49
+* @brief Alias name for CAN message box 49
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX49 49U
+
+/** @def canMESSAGE_BOX50
+* @brief Alias name for CAN message box 50
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX50 50U
+
+/** @def canMESSAGE_BOX51
+* @brief Alias name for CAN message box 51
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX51 51U
+
+/** @def canMESSAGE_BOX52
+* @brief Alias name for CAN message box 52
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX52 52U
+
+/** @def canMESSAGE_BOX53
+* @brief Alias name for CAN message box 53
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX53 53U
+
+/** @def canMESSAGE_BOX54
+* @brief Alias name for CAN message box 54
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX54 54U
+
+/** @def canMESSAGE_BOX55
+* @brief Alias name for CAN message box 55
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX55 55U
+
+/** @def canMESSAGE_BOX56
+* @brief Alias name for CAN message box 56
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX56 56U
+
+/** @def canMESSAGE_BOX57
+* @brief Alias name for CAN message box 57
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX57 57U
+
+/** @def canMESSAGE_BOX58
+* @brief Alias name for CAN message box 58
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX58 58U
+
+/** @def canMESSAGE_BOX59
+* @brief Alias name for CAN message box 59
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX59 59U
+
+/** @def canMESSAGE_BOX60
+* @brief Alias name for CAN message box 60
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX60 60U
+
+/** @def canMESSAGE_BOX61
+* @brief Alias name for CAN message box 61
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX61 61U
+
+/** @def canMESSAGE_BOX62
+* @brief Alias name for CAN message box 62
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX62 62U
+
+/** @def canMESSAGE_BOX63
+* @brief Alias name for CAN message box 63
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX63 63U
+
+/** @def canMESSAGE_BOX64
+* @brief Alias name for CAN message box 64
+*
+* @note This value should be used for API argument @a messageBox
+*/
+#define canMESSAGE_BOX64 64U
+
+
+/** @enum canloopBackType
+* @brief canLoopback type definition
+*/
+/** @typedef canloopBackType_t
+* @brief canLoopback type Type Definition
+*
+* This type is used to select the can module Loopback type Digital or Analog loopback.
+*/
+typedef enum canloopBackType
+{
+ Internal_Lbk = 0x00000010U,
+ External_Lbk = 0x00000100U,
+ Internal_Silent_Lbk = 0x00000018U
+}canloopBackType_t;
+
+/* USER CODE BEGIN (1) */
+/* USER CODE END */
+
+/* Configuration registers */
+typedef struct can_config_reg
+{
+ uint32 CONFIG_CTL;
+ uint32 CONFIG_ES;
+ uint32 CONFIG_BTR;
+ uint32 CONFIG_TEST;
+ uint32 CONFIG_ABOTR;
+ uint32 CONFIG_INTMUX0;
+ uint32 CONFIG_INTMUX1;
+ uint32 CONFIG_INTMUX2;
+ uint32 CONFIG_INTMUX3;
+ uint32 CONFIG_TIOC;
+ uint32 CONFIG_RIOC;
+} can_config_reg_t;
+
+
+
+/**
+ * @defgroup CAN CAN
+ * @brief Controller Area Network Module.
+ *
+ * The Controller Area Network is a high-integrity, serial, multi-master communication protocol for distributed
+ * real-time applications. This CAN module is implemented according to ISO 11898-1 and is suitable for
+ * industrial, automotive and general embedded communications
+ *
+ * Related Files
+ * - reg_can.h
+ * - can.h
+ * - can.c
+ * @addtogroup CAN
+ * @{
+ */
+
+/* CAN Interface Functions */
+
+void canInit(void);
+uint32 canTransmit(canBASE_t *node, uint32 messageBox, const uint8 * data);
+uint32 canGetData(canBASE_t *node, uint32 messageBox, uint8 * const data);
+uint32 canSendRemoteFrame(canBASE_t *node, uint32 messageBox);
+uint32 canFillMessageObjectData(canBASE_t *node, uint32 messageBox, const uint8 * data);
+uint32 canIsTxMessagePending(canBASE_t *node, uint32 messageBox);
+uint32 canIsRxMessageArrived(canBASE_t *node, uint32 messageBox);
+uint32 canIsMessageBoxValid(canBASE_t *node, uint32 messageBox);
+uint32 canGetLastError(canBASE_t *node);
+uint32 canGetErrorLevel(canBASE_t *node);
+void canEnableErrorNotification(canBASE_t *node);
+void canDisableErrorNotification(canBASE_t *node);
+void canEnableStatusChangeNotification(canBASE_t *node);
+void canDisableStatusChangeNotification(canBASE_t *node);
+void canEnableloopback(canBASE_t *node, canloopBackType_t Loopbacktype);
+void canDisableloopback(canBASE_t *node);
+void canIoSetDirection(canBASE_t *node,uint32 TxDir,uint32 RxDir);
+void canIoSetPort(canBASE_t *node, uint32 TxValue, uint32 RxValue);
+uint32 canIoTxGetBit(canBASE_t *node);
+uint32 canIoRxGetBit(canBASE_t *node);
+uint32 canGetID(canBASE_t *node, uint32 messageBox);
+void canUpdateID(canBASE_t *node, uint32 messageBox, uint32 msgBoxArbitVal);
+
+/** @fn void canErrorNotification(canBASE_t *node, uint32 notification)
+* @brief Error notification
+* @param[in] node Pointer to CAN node:
+* - canREG1: CAN1 node pointer
+* - canREG2: CAN2 node pointer
+* - canREG3: CAN3 node pointer
+* @param[in] notification Error notification code:
+* - canLEVEL_PASSIVE (0x20) : When RX- or TX error counter are between 32 and 63
+* - canLEVEL_WARNING (0x40) : When RX- or TX error counter are between 64 and 127
+* - canLEVEL_BUS_OFF (0x80) : When RX- or TX error counter are between 128 and 255
+* - canLEVEL_PARITY_ERR (0x100): When RX- or TX error counter are above 256
+*
+* @note This function has to be provide by the user.
+*/
+void canErrorNotification(canBASE_t *node, uint32 notification);
+
+/** @fn void canStatusChangeNotification(canBASE_t *node, uint32 notification)
+* @brief Status Change notification
+* @param[in] node Pointer to CAN node:
+* - canREG1: CAN1 node pointer
+* - canREG2: CAN2 node pointer
+* - canREG3: CAN3 node pointer
+* @param[in] notification Status change notification code:
+* - canLEVEL_TxOK (0x08) : When successful transmission
+* - canLEVEL_RxOK (0x10) : When successful reception
+* - canLEVEL_WakeUpPnd (0x200): When successful WakeUp to system initiated
+* - canLEVEL_PDA (0x400): When successful low power mode entrance
+*
+* @note This function has to be provide by the user.
+*/
+void canStatusChangeNotification(canBASE_t *node, uint32 notification);
+
+/** @fn void canMessageNotification(canBASE_t *node, uint32 messageBox)
+* @brief Message notification
+* @param[in] node Pointer to CAN node:
+* - canREG1: CAN1 node pointer
+* - canREG2: CAN2 node pointer
+* - canREG3: CAN3 node pointer
+* @param[in] messageBox Message box number of CAN node:
+* - canMESSAGE_BOX1: CAN message box 1
+* - canMESSAGE_BOXn: CAN message box n [n: 1-64]
+* - canMESSAGE_BOX64: CAN message box 64
+*
+* @note This function has to be provide by the user.
+*/
+void canMessageNotification(canBASE_t *node, uint32 messageBox);
+
+/* USER CODE BEGIN (2) */
+/* USER CODE END */
+
+/**@}*/
+#ifdef __cplusplus
+}
+#endif
+
+#endif