diff options
author | Daniel Friesel <daniel.friesel@uos.de> | 2022-07-18 11:25:27 +0200 |
---|---|---|
committer | Daniel Friesel <daniel.friesel@uos.de> | 2022-07-18 11:25:27 +0200 |
commit | e6cef3c547e8f73cbf2d3c7ba639cb7d9934c475 (patch) | |
tree | b38bf797c9cd5c226de250e8f569031ebc6131d0 /include/arch/rm46l8lp/halcogen/can.h | |
parent | 4da20a683273f252940ff2752d2f497040800b3d (diff) |
Add Hercules RM46L8 Launchpad support (Cortex R4F)
Diffstat (limited to 'include/arch/rm46l8lp/halcogen/can.h')
-rw-r--r-- | include/arch/rm46l8lp/halcogen/can.h | 729 |
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 |