The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.
Dependents: hello SerialTestv11 SerialTestv12 Sierpinski ... more
mbed 2
This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.
TARGET_TB_SENSE_12/TOOLCHAIN_GCC_ARM/em_can.h@172:65be27845400, 2019-02-20 (annotated)
- Committer:
- AnnaBridge
- Date:
- Wed Feb 20 20:53:29 2019 +0000
- Revision:
- 172:65be27845400
- Parent:
- 171:3a7713b1edbc
mbed library release version 165
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Anna Bridge |
160:5571c4ff569f | 1 | /***************************************************************************//** |
Anna Bridge |
160:5571c4ff569f | 2 | * @file em_can.h |
Anna Bridge |
160:5571c4ff569f | 3 | * @brief Controller Area Network API |
Anna Bridge |
160:5571c4ff569f | 4 | * @version 5.3.3 |
Anna Bridge |
160:5571c4ff569f | 5 | ******************************************************************************* |
Anna Bridge |
160:5571c4ff569f | 6 | * # License |
Anna Bridge |
160:5571c4ff569f | 7 | * <b>Copyright 2016 Silicon Laboratories, Inc. http://www.silabs.com</b> |
Anna Bridge |
160:5571c4ff569f | 8 | ******************************************************************************* |
Anna Bridge |
160:5571c4ff569f | 9 | * |
Anna Bridge |
160:5571c4ff569f | 10 | * Permission is granted to anyone to use this software for any purpose, |
Anna Bridge |
160:5571c4ff569f | 11 | * including commercial applications, and to alter it and redistribute it |
Anna Bridge |
160:5571c4ff569f | 12 | * freely, subject to the following restrictions: |
Anna Bridge |
160:5571c4ff569f | 13 | * |
Anna Bridge |
160:5571c4ff569f | 14 | * 1. The origin of this software must not be misrepresented; you must not |
Anna Bridge |
160:5571c4ff569f | 15 | * claim that you wrote the original software. |
Anna Bridge |
160:5571c4ff569f | 16 | * 2. Altered source versions must be plainly marked as such, and must not be |
Anna Bridge |
160:5571c4ff569f | 17 | * misrepresented as being the original software. |
Anna Bridge |
160:5571c4ff569f | 18 | * 3. This notice may not be removed or altered from any source distribution. |
Anna Bridge |
160:5571c4ff569f | 19 | * |
Anna Bridge |
160:5571c4ff569f | 20 | * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no |
Anna Bridge |
160:5571c4ff569f | 21 | * obligation to support this Software. Silicon Labs is providing the |
Anna Bridge |
160:5571c4ff569f | 22 | * Software "AS IS", with no express or implied warranties of any kind, |
Anna Bridge |
160:5571c4ff569f | 23 | * including, but not limited to, any implied warranties of merchantability |
Anna Bridge |
160:5571c4ff569f | 24 | * or fitness for any particular purpose or warranties against infringement |
Anna Bridge |
160:5571c4ff569f | 25 | * of any proprietary rights of a third party. |
Anna Bridge |
160:5571c4ff569f | 26 | * |
Anna Bridge |
160:5571c4ff569f | 27 | * Silicon Labs will not be liable for any consequential, incidental, or |
Anna Bridge |
160:5571c4ff569f | 28 | * special damages, or any other relief, or for any claim by any third party, |
Anna Bridge |
160:5571c4ff569f | 29 | * arising from your use of this Software. |
Anna Bridge |
160:5571c4ff569f | 30 | * |
Anna Bridge |
160:5571c4ff569f | 31 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 32 | |
Anna Bridge |
160:5571c4ff569f | 33 | #ifndef EM_CAN_H |
Anna Bridge |
160:5571c4ff569f | 34 | #define EM_CAN_H |
Anna Bridge |
160:5571c4ff569f | 35 | |
Anna Bridge |
160:5571c4ff569f | 36 | #include "em_bus.h" |
Anna Bridge |
160:5571c4ff569f | 37 | #include "em_device.h" |
Anna Bridge |
160:5571c4ff569f | 38 | #include <stdbool.h> |
Anna Bridge |
160:5571c4ff569f | 39 | |
Anna Bridge |
160:5571c4ff569f | 40 | #if defined(CAN_COUNT) && (CAN_COUNT > 0) |
Anna Bridge |
160:5571c4ff569f | 41 | |
Anna Bridge |
160:5571c4ff569f | 42 | #ifdef __cplusplus |
Anna Bridge |
160:5571c4ff569f | 43 | extern "C" { |
Anna Bridge |
160:5571c4ff569f | 44 | #endif |
Anna Bridge |
160:5571c4ff569f | 45 | |
Anna Bridge |
160:5571c4ff569f | 46 | /***************************************************************************//** |
Anna Bridge |
160:5571c4ff569f | 47 | * @addtogroup emlib |
Anna Bridge |
160:5571c4ff569f | 48 | * @{ |
Anna Bridge |
160:5571c4ff569f | 49 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 50 | |
Anna Bridge |
160:5571c4ff569f | 51 | /***************************************************************************//** |
Anna Bridge |
160:5571c4ff569f | 52 | * @addtogroup CAN |
Anna Bridge |
160:5571c4ff569f | 53 | * @{ |
Anna Bridge |
160:5571c4ff569f | 54 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 55 | |
Anna Bridge |
160:5571c4ff569f | 56 | /******************************************************************************* |
Anna Bridge |
160:5571c4ff569f | 57 | ******************************* DEFINES *********************************** |
Anna Bridge |
160:5571c4ff569f | 58 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 59 | |
Anna Bridge |
160:5571c4ff569f | 60 | /******************************************************************************* |
Anna Bridge |
160:5571c4ff569f | 61 | ******************************** ENUMS ************************************ |
Anna Bridge |
160:5571c4ff569f | 62 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 63 | |
Anna Bridge |
160:5571c4ff569f | 64 | /** CAN Status codes */ |
Anna Bridge |
160:5571c4ff569f | 65 | typedef enum { |
Anna Bridge |
160:5571c4ff569f | 66 | /** No error occurred during last CAN bus event. */ |
Anna Bridge |
160:5571c4ff569f | 67 | canErrorNoError = CAN_STATUS_LEC_NONE, |
Anna Bridge |
160:5571c4ff569f | 68 | |
Anna Bridge |
160:5571c4ff569f | 69 | /** |
Anna Bridge |
160:5571c4ff569f | 70 | * More than 5 equal bits in a sequence have occurred in a part of a received |
Anna Bridge |
160:5571c4ff569f | 71 | * message where this is not allowed. |
Anna Bridge |
160:5571c4ff569f | 72 | */ |
Anna Bridge |
160:5571c4ff569f | 73 | canErrorStuff = CAN_STATUS_LEC_STUFF, |
Anna Bridge |
160:5571c4ff569f | 74 | |
Anna Bridge |
160:5571c4ff569f | 75 | /** A fixed format part of a received frame has the wrong format. */ |
Anna Bridge |
160:5571c4ff569f | 76 | canErrorForm = CAN_STATUS_LEC_FORM, |
Anna Bridge |
160:5571c4ff569f | 77 | |
Anna Bridge |
160:5571c4ff569f | 78 | /** The message this CAN Core transmitted was not acknowledged by another node. */ |
Anna Bridge |
160:5571c4ff569f | 79 | canErrorAck = CAN_STATUS_LEC_ACK, |
Anna Bridge |
160:5571c4ff569f | 80 | |
Anna Bridge |
160:5571c4ff569f | 81 | /** Wrong monitored bus value : dominant when the module wanted to send a recessive. */ |
Anna Bridge |
160:5571c4ff569f | 82 | canErrorBit1 = CAN_STATUS_LEC_BIT1, |
Anna Bridge |
160:5571c4ff569f | 83 | |
Anna Bridge |
160:5571c4ff569f | 84 | /** Wrong monitored bus value : recessive when the module intended to send a dominant. */ |
Anna Bridge |
160:5571c4ff569f | 85 | canErrorBit0 = CAN_STATUS_LEC_BIT0, |
Anna Bridge |
160:5571c4ff569f | 86 | |
Anna Bridge |
160:5571c4ff569f | 87 | /** CRC check sum incorrect. */ |
Anna Bridge |
160:5571c4ff569f | 88 | canErrorCrc = CAN_STATUS_LEC_CRC, |
Anna Bridge |
160:5571c4ff569f | 89 | |
Anna Bridge |
160:5571c4ff569f | 90 | /** Unused. No new error since the cpu wrote this value */ |
Anna Bridge |
160:5571c4ff569f | 91 | canErrorUnused = CAN_STATUS_LEC_UNUSED |
Anna Bridge |
160:5571c4ff569f | 92 | } CAN_ErrorCode_TypeDef; |
Anna Bridge |
160:5571c4ff569f | 93 | |
Anna Bridge |
160:5571c4ff569f | 94 | /** CAN peripheral mode */ |
Anna Bridge |
160:5571c4ff569f | 95 | typedef enum { |
Anna Bridge |
160:5571c4ff569f | 96 | /** CAN peripheral in Normal mode : ready to send and receive messages */ |
Anna Bridge |
160:5571c4ff569f | 97 | canModeNormal, |
Anna Bridge |
160:5571c4ff569f | 98 | |
Anna Bridge |
160:5571c4ff569f | 99 | /** CAN peripheral in Basic mode : no use of the RAM */ |
Anna Bridge |
160:5571c4ff569f | 100 | canModeBasic, |
Anna Bridge |
160:5571c4ff569f | 101 | |
Anna Bridge |
160:5571c4ff569f | 102 | /** |
Anna Bridge |
160:5571c4ff569f | 103 | * CAN peripheral in Loopback mode : input from the CAN bus is disregarded |
Anna Bridge |
160:5571c4ff569f | 104 | * and comes from TX instead |
Anna Bridge |
160:5571c4ff569f | 105 | */ |
Anna Bridge |
160:5571c4ff569f | 106 | canModeLoopBack, |
Anna Bridge |
160:5571c4ff569f | 107 | |
Anna Bridge |
160:5571c4ff569f | 108 | /** |
Anna Bridge |
160:5571c4ff569f | 109 | * CAN peripheral in SilentLoopback mode : input from the CAN bus is |
Anna Bridge |
160:5571c4ff569f | 110 | * disregarded and comes from TX instead ; no output on the CAN bus |
Anna Bridge |
160:5571c4ff569f | 111 | */ |
Anna Bridge |
160:5571c4ff569f | 112 | canModeSilentLoopBack, |
Anna Bridge |
160:5571c4ff569f | 113 | |
Anna Bridge |
160:5571c4ff569f | 114 | /** CAN peripheral in Silent mode : no output on the CAN bus. If required to |
Anna Bridge |
160:5571c4ff569f | 115 | * send a dominant bit, it's rerouted internally so that the CAN module |
Anna Bridge |
160:5571c4ff569f | 116 | * monitors it but the CAN bus stays recessive. |
Anna Bridge |
160:5571c4ff569f | 117 | */ |
Anna Bridge |
160:5571c4ff569f | 118 | canModeSilent |
Anna Bridge |
160:5571c4ff569f | 119 | } CAN_Mode_TypeDef; |
Anna Bridge |
160:5571c4ff569f | 120 | |
Anna Bridge |
160:5571c4ff569f | 121 | /******************************************************************************* |
Anna Bridge |
160:5571c4ff569f | 122 | ******************************* STRUCTS *********************************** |
Anna Bridge |
160:5571c4ff569f | 123 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 124 | |
Anna Bridge |
160:5571c4ff569f | 125 | /** CAN Message Object TypeDef structure. LSBs is used */ |
Anna Bridge |
160:5571c4ff569f | 126 | typedef struct { |
Anna Bridge |
160:5571c4ff569f | 127 | /** Message number of this Message Object, [1 - 32] */ |
Anna Bridge |
160:5571c4ff569f | 128 | uint8_t msgNum; |
Anna Bridge |
160:5571c4ff569f | 129 | |
Anna Bridge |
160:5571c4ff569f | 130 | /** Id extended if true, standard if false */ |
Anna Bridge |
160:5571c4ff569f | 131 | bool extended; |
Anna Bridge |
160:5571c4ff569f | 132 | |
Anna Bridge |
160:5571c4ff569f | 133 | /** |
Anna Bridge |
160:5571c4ff569f | 134 | * Id of the message, with 11 bits (standard) or 28 bits (extended). |
Anna Bridge |
160:5571c4ff569f | 135 | * LSBs are used for both of them |
Anna Bridge |
160:5571c4ff569f | 136 | */ |
Anna Bridge |
160:5571c4ff569f | 137 | uint32_t id; |
Anna Bridge |
160:5571c4ff569f | 138 | |
Anna Bridge |
160:5571c4ff569f | 139 | /** Data Length Code [0 - 8] */ |
Anna Bridge |
160:5571c4ff569f | 140 | uint8_t dlc; |
Anna Bridge |
160:5571c4ff569f | 141 | |
Anna Bridge |
160:5571c4ff569f | 142 | /** Pointer to the data, [0 - 8] bytes */ |
Anna Bridge |
160:5571c4ff569f | 143 | uint8_t data[8]; |
Anna Bridge |
160:5571c4ff569f | 144 | |
Anna Bridge |
160:5571c4ff569f | 145 | /** Mask for id filtering */ |
Anna Bridge |
160:5571c4ff569f | 146 | uint32_t mask; |
Anna Bridge |
160:5571c4ff569f | 147 | |
Anna Bridge |
160:5571c4ff569f | 148 | /** Enable the use of 'extended' value for filtering */ |
Anna Bridge |
160:5571c4ff569f | 149 | bool extendedMask; |
Anna Bridge |
160:5571c4ff569f | 150 | |
Anna Bridge |
160:5571c4ff569f | 151 | /** Enable the use of 'direction' value for filtering */ |
Anna Bridge |
160:5571c4ff569f | 152 | bool directionMask; |
Anna Bridge |
160:5571c4ff569f | 153 | } CAN_MessageObject_TypeDef; |
Anna Bridge |
160:5571c4ff569f | 154 | |
Anna Bridge |
160:5571c4ff569f | 155 | /** CAN initialization structure. */ |
Anna Bridge |
160:5571c4ff569f | 156 | typedef struct { |
Anna Bridge |
160:5571c4ff569f | 157 | /** true to set the CAN Device in normal mode after init */ |
Anna Bridge |
160:5571c4ff569f | 158 | bool enable; |
Anna Bridge |
160:5571c4ff569f | 159 | |
Anna Bridge |
160:5571c4ff569f | 160 | /** True to reset messages during initialization */ |
Anna Bridge |
160:5571c4ff569f | 161 | bool resetMessages; |
Anna Bridge |
160:5571c4ff569f | 162 | |
Anna Bridge |
160:5571c4ff569f | 163 | /** Default bitrate */ |
Anna Bridge |
160:5571c4ff569f | 164 | uint32_t bitrate; |
Anna Bridge |
160:5571c4ff569f | 165 | |
Anna Bridge |
160:5571c4ff569f | 166 | /** Default Propagation Time Segment */ |
Anna Bridge |
160:5571c4ff569f | 167 | uint8_t propagationTimeSegment; |
Anna Bridge |
160:5571c4ff569f | 168 | |
Anna Bridge |
160:5571c4ff569f | 169 | /** Default Phase Buffer Segment 1 */ |
Anna Bridge |
160:5571c4ff569f | 170 | uint8_t phaseBufferSegment1; |
Anna Bridge |
160:5571c4ff569f | 171 | |
Anna Bridge |
160:5571c4ff569f | 172 | /** Default Phase Buffer Segment 2 */ |
Anna Bridge |
160:5571c4ff569f | 173 | uint8_t phaseBufferSegment2; |
Anna Bridge |
160:5571c4ff569f | 174 | |
Anna Bridge |
160:5571c4ff569f | 175 | /** Default Synchronisation Jump Width */ |
Anna Bridge |
160:5571c4ff569f | 176 | uint8_t synchronisationJumpWidth; |
Anna Bridge |
160:5571c4ff569f | 177 | } CAN_Init_TypeDef; |
Anna Bridge |
160:5571c4ff569f | 178 | |
Anna Bridge |
160:5571c4ff569f | 179 | /** |
Anna Bridge |
160:5571c4ff569f | 180 | * Default initialization of CAN_Init_TypeDef. The total duration of a bit with |
Anna Bridge |
160:5571c4ff569f | 181 | * these default parameters is 10 tq (time quantum : tq = brp/fsys, brp being |
Anna Bridge |
160:5571c4ff569f | 182 | * the baudrate prescaler and being set according to the wanted bitrate, fsys |
Anna Bridge |
160:5571c4ff569f | 183 | * beeing the CAN Device frequency). |
Anna Bridge |
160:5571c4ff569f | 184 | */ |
Anna Bridge |
160:5571c4ff569f | 185 | #define CAN_INIT_DEFAULT \ |
Anna Bridge |
160:5571c4ff569f | 186 | { \ |
Anna Bridge |
160:5571c4ff569f | 187 | true, /** Set the CAN Device in normal mode after init */ \ |
Anna Bridge |
160:5571c4ff569f | 188 | true, /** Reset messages during initialization */ \ |
Anna Bridge |
160:5571c4ff569f | 189 | 100000, /** Set bitrate to 100 000 */ \ |
Anna Bridge |
160:5571c4ff569f | 190 | 1, /** Set the Propagation Time Segment to 1 */ \ |
Anna Bridge |
160:5571c4ff569f | 191 | 4, /** Set the Phase Buffer Segment 1 to 4 */ \ |
Anna Bridge |
160:5571c4ff569f | 192 | 4, /** Set the Phase Buffer Segment 2 to 4 */ \ |
Anna Bridge |
160:5571c4ff569f | 193 | 1 /** Set the Synchronization Jump Width to 1 */ \ |
Anna Bridge |
160:5571c4ff569f | 194 | } |
Anna Bridge |
160:5571c4ff569f | 195 | |
Anna Bridge |
160:5571c4ff569f | 196 | /******************************************************************************* |
Anna Bridge |
160:5571c4ff569f | 197 | ***************************** PROTOTYPES ********************************** |
Anna Bridge |
160:5571c4ff569f | 198 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 199 | |
Anna Bridge |
160:5571c4ff569f | 200 | void CAN_Init(CAN_TypeDef *can, const CAN_Init_TypeDef *init); |
Anna Bridge |
160:5571c4ff569f | 201 | |
Anna Bridge |
160:5571c4ff569f | 202 | uint32_t CAN_GetClockFrequency(CAN_TypeDef *can); |
Anna Bridge |
160:5571c4ff569f | 203 | |
Anna Bridge |
160:5571c4ff569f | 204 | bool CAN_MessageLost(CAN_TypeDef *can, uint8_t interface, uint8_t msgNum); |
Anna Bridge |
160:5571c4ff569f | 205 | |
Anna Bridge |
160:5571c4ff569f | 206 | void CAN_SetRoute(CAN_TypeDef *can, |
Anna Bridge |
160:5571c4ff569f | 207 | bool active, |
Anna Bridge |
160:5571c4ff569f | 208 | uint16_t pinRxLoc, |
Anna Bridge |
160:5571c4ff569f | 209 | uint16_t pinTxLoc); |
Anna Bridge |
160:5571c4ff569f | 210 | |
Anna Bridge |
160:5571c4ff569f | 211 | void CAN_SetBitTiming(CAN_TypeDef *can, |
Anna Bridge |
160:5571c4ff569f | 212 | uint32_t bitrate, |
Anna Bridge |
160:5571c4ff569f | 213 | uint16_t propagationTimeSegment, |
Anna Bridge |
160:5571c4ff569f | 214 | uint16_t phaseBufferSegment1, |
Anna Bridge |
160:5571c4ff569f | 215 | uint16_t phaseBufferSegment2, |
Anna Bridge |
160:5571c4ff569f | 216 | uint16_t synchronisationJumpWidth); |
Anna Bridge |
160:5571c4ff569f | 217 | |
Anna Bridge |
160:5571c4ff569f | 218 | void CAN_SetMode(CAN_TypeDef *can, CAN_Mode_TypeDef mode); |
Anna Bridge |
160:5571c4ff569f | 219 | |
Anna Bridge |
160:5571c4ff569f | 220 | void CAN_SetIdAndFilter(CAN_TypeDef *can, |
Anna Bridge |
160:5571c4ff569f | 221 | uint8_t interface, |
Anna Bridge |
160:5571c4ff569f | 222 | bool useMask, |
Anna Bridge |
160:5571c4ff569f | 223 | const CAN_MessageObject_TypeDef *message, |
Anna Bridge |
160:5571c4ff569f | 224 | bool wait); |
Anna Bridge |
160:5571c4ff569f | 225 | |
Anna Bridge |
160:5571c4ff569f | 226 | void CAN_ConfigureMessageObject(CAN_TypeDef *can, |
Anna Bridge |
160:5571c4ff569f | 227 | uint8_t interface, |
Anna Bridge |
160:5571c4ff569f | 228 | uint8_t msgNum, |
Anna Bridge |
160:5571c4ff569f | 229 | bool valid, |
Anna Bridge |
160:5571c4ff569f | 230 | bool tx, |
Anna Bridge |
160:5571c4ff569f | 231 | bool remoteTransfer, |
Anna Bridge |
160:5571c4ff569f | 232 | bool endOfBuffer, |
Anna Bridge |
160:5571c4ff569f | 233 | bool wait); |
Anna Bridge |
160:5571c4ff569f | 234 | |
Anna Bridge |
160:5571c4ff569f | 235 | void CAN_SendMessage(CAN_TypeDef *can, |
Anna Bridge |
160:5571c4ff569f | 236 | uint8_t interface, |
Anna Bridge |
160:5571c4ff569f | 237 | const CAN_MessageObject_TypeDef *message, |
Anna Bridge |
160:5571c4ff569f | 238 | bool wait); |
Anna Bridge |
160:5571c4ff569f | 239 | |
Anna Bridge |
160:5571c4ff569f | 240 | void CAN_ReadMessage(CAN_TypeDef *can, |
Anna Bridge |
160:5571c4ff569f | 241 | uint8_t interface, |
Anna Bridge |
160:5571c4ff569f | 242 | CAN_MessageObject_TypeDef *message); |
Anna Bridge |
160:5571c4ff569f | 243 | |
Anna Bridge |
160:5571c4ff569f | 244 | void CAN_AbortSendMessage(CAN_TypeDef *can, |
Anna Bridge |
160:5571c4ff569f | 245 | uint8_t interface, |
Anna Bridge |
160:5571c4ff569f | 246 | uint8_t msgNum, |
Anna Bridge |
160:5571c4ff569f | 247 | bool wait); |
Anna Bridge |
160:5571c4ff569f | 248 | |
Anna Bridge |
160:5571c4ff569f | 249 | void CAN_ResetMessages(CAN_TypeDef *can, uint8_t interface); |
Anna Bridge |
160:5571c4ff569f | 250 | |
Anna Bridge |
160:5571c4ff569f | 251 | void CAN_Reset(CAN_TypeDef *can); |
Anna Bridge |
160:5571c4ff569f | 252 | |
Anna Bridge |
160:5571c4ff569f | 253 | void CAN_WriteData(CAN_TypeDef *can, |
Anna Bridge |
160:5571c4ff569f | 254 | uint8_t interface, |
Anna Bridge |
160:5571c4ff569f | 255 | const CAN_MessageObject_TypeDef *message); |
Anna Bridge |
160:5571c4ff569f | 256 | |
Anna Bridge |
160:5571c4ff569f | 257 | void CAN_SendRequest(CAN_TypeDef *can, |
Anna Bridge |
160:5571c4ff569f | 258 | uint8_t interface, |
Anna Bridge |
160:5571c4ff569f | 259 | uint8_t msgNum, |
Anna Bridge |
160:5571c4ff569f | 260 | bool wait); |
Anna Bridge |
160:5571c4ff569f | 261 | |
Anna Bridge |
160:5571c4ff569f | 262 | /***************************************************************************//** |
Anna Bridge |
160:5571c4ff569f | 263 | * @brief |
Anna Bridge |
160:5571c4ff569f | 264 | * Enable the Host Controller to send messages. |
Anna Bridge |
160:5571c4ff569f | 265 | * |
Anna Bridge |
160:5571c4ff569f | 266 | * @param[in] can |
Anna Bridge |
160:5571c4ff569f | 267 | * Pointer to CAN peripheral register block. |
Anna Bridge |
160:5571c4ff569f | 268 | * |
Anna Bridge |
160:5571c4ff569f | 269 | * @param[in] enable |
Anna Bridge |
160:5571c4ff569f | 270 | * true to enable CAN device, false to disable it. If the CAN device is |
Anna Bridge |
160:5571c4ff569f | 271 | * enabled, it goes in normal mode (the default working mode). |
Anna Bridge |
160:5571c4ff569f | 272 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 273 | __STATIC_INLINE void CAN_Enable(CAN_TypeDef *can, bool enable) |
Anna Bridge |
160:5571c4ff569f | 274 | { |
Anna Bridge |
160:5571c4ff569f | 275 | BUS_RegBitWrite(&can->CTRL, _CAN_CTRL_INIT_SHIFT, (enable ? 0 : 1)); |
Anna Bridge |
160:5571c4ff569f | 276 | } |
Anna Bridge |
160:5571c4ff569f | 277 | |
Anna Bridge |
160:5571c4ff569f | 278 | /***************************************************************************//** |
Anna Bridge |
160:5571c4ff569f | 279 | * @brief |
Anna Bridge |
160:5571c4ff569f | 280 | * Gives the communication capabilities state. |
Anna Bridge |
160:5571c4ff569f | 281 | * |
Anna Bridge |
160:5571c4ff569f | 282 | * @param[in] can |
Anna Bridge |
160:5571c4ff569f | 283 | * Pointer to CAN peripheral register block. |
Anna Bridge |
160:5571c4ff569f | 284 | * |
Anna Bridge |
160:5571c4ff569f | 285 | * @return |
Anna Bridge |
160:5571c4ff569f | 286 | * true if the Host Controller can send messages, false otherwise. |
Anna Bridge |
160:5571c4ff569f | 287 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 288 | __STATIC_INLINE bool CAN_IsEnabled(CAN_TypeDef *can) |
Anna Bridge |
160:5571c4ff569f | 289 | { |
Anna Bridge |
160:5571c4ff569f | 290 | return (can->CTRL & _CAN_CTRL_INIT_MASK) == 0; |
Anna Bridge |
160:5571c4ff569f | 291 | } |
Anna Bridge |
160:5571c4ff569f | 292 | |
Anna Bridge |
160:5571c4ff569f | 293 | /***************************************************************************//** |
Anna Bridge |
160:5571c4ff569f | 294 | * @brief |
Anna Bridge |
160:5571c4ff569f | 295 | * Waiting function. |
Anna Bridge |
160:5571c4ff569f | 296 | * |
Anna Bridge |
160:5571c4ff569f | 297 | * @param[in] can |
Anna Bridge |
160:5571c4ff569f | 298 | * Pointer to CAN peripheral register block. |
Anna Bridge |
160:5571c4ff569f | 299 | * |
Anna Bridge |
160:5571c4ff569f | 300 | * @param[in] interface |
Anna Bridge |
160:5571c4ff569f | 301 | * Indicate which Message Interface Register to use. |
Anna Bridge |
160:5571c4ff569f | 302 | * |
Anna Bridge |
160:5571c4ff569f | 303 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 304 | __STATIC_INLINE void CAN_ReadyWait(CAN_TypeDef *can, |
Anna Bridge |
160:5571c4ff569f | 305 | uint8_t interface) |
Anna Bridge |
160:5571c4ff569f | 306 | { |
Anna Bridge |
160:5571c4ff569f | 307 | while ((_CAN_MIR_CMDREQ_BUSY_MASK & can->MIR[interface].CMDREQ) != 0) { |
Anna Bridge |
160:5571c4ff569f | 308 | } |
Anna Bridge |
160:5571c4ff569f | 309 | } |
Anna Bridge |
160:5571c4ff569f | 310 | |
Anna Bridge |
160:5571c4ff569f | 311 | /***************************************************************************//** |
Anna Bridge |
160:5571c4ff569f | 312 | * @brief |
Anna Bridge |
160:5571c4ff569f | 313 | * Get the last error code and clear its register. |
Anna Bridge |
160:5571c4ff569f | 314 | * |
Anna Bridge |
160:5571c4ff569f | 315 | * @param[in] can |
Anna Bridge |
160:5571c4ff569f | 316 | * Pointer to CAN peripheral register block. |
Anna Bridge |
160:5571c4ff569f | 317 | * |
Anna Bridge |
160:5571c4ff569f | 318 | * @return |
Anna Bridge |
160:5571c4ff569f | 319 | * return Last error code. |
Anna Bridge |
160:5571c4ff569f | 320 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 321 | __STATIC_INLINE CAN_ErrorCode_TypeDef CAN_GetLastErrorCode(CAN_TypeDef *can) |
Anna Bridge |
160:5571c4ff569f | 322 | { |
Anna Bridge |
160:5571c4ff569f | 323 | CAN_ErrorCode_TypeDef errorCode = (CAN_ErrorCode_TypeDef) |
Anna Bridge |
160:5571c4ff569f | 324 | (can->STATUS & _CAN_STATUS_LEC_MASK); |
Anna Bridge |
160:5571c4ff569f | 325 | can->STATUS |= ~_CAN_STATUS_LEC_MASK; |
Anna Bridge |
160:5571c4ff569f | 326 | return errorCode; |
Anna Bridge |
160:5571c4ff569f | 327 | } |
Anna Bridge |
160:5571c4ff569f | 328 | |
Anna Bridge |
160:5571c4ff569f | 329 | /***************************************************************************//** |
Anna Bridge |
160:5571c4ff569f | 330 | * @brief |
Anna Bridge |
160:5571c4ff569f | 331 | * Indicates which messages objects have received new data. |
Anna Bridge |
160:5571c4ff569f | 332 | * |
Anna Bridge |
160:5571c4ff569f | 333 | * @param[in] can |
Anna Bridge |
160:5571c4ff569f | 334 | * Pointer to CAN peripheral register block. |
Anna Bridge |
160:5571c4ff569f | 335 | * |
Anna Bridge |
160:5571c4ff569f | 336 | * @return |
Anna Bridge |
160:5571c4ff569f | 337 | * State of MESSAGEDATA register indicating which messages objects have received |
Anna Bridge |
160:5571c4ff569f | 338 | * new data. |
Anna Bridge |
160:5571c4ff569f | 339 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 340 | __STATIC_INLINE uint32_t CAN_HasNewdata(CAN_TypeDef *can) |
Anna Bridge |
160:5571c4ff569f | 341 | { |
Anna Bridge |
160:5571c4ff569f | 342 | return can->MESSAGEDATA; |
Anna Bridge |
160:5571c4ff569f | 343 | } |
Anna Bridge |
160:5571c4ff569f | 344 | |
Anna Bridge |
160:5571c4ff569f | 345 | /***************************************************************************//** |
Anna Bridge |
160:5571c4ff569f | 346 | * @brief |
Anna Bridge |
160:5571c4ff569f | 347 | * Clear one or more pending CAN status interrupts. |
Anna Bridge |
160:5571c4ff569f | 348 | * |
Anna Bridge |
160:5571c4ff569f | 349 | * @param[in] can |
Anna Bridge |
160:5571c4ff569f | 350 | * Pointer to CAN peripheral register block. |
Anna Bridge |
160:5571c4ff569f | 351 | * |
Anna Bridge |
160:5571c4ff569f | 352 | * @param[in] flags |
Anna Bridge |
160:5571c4ff569f | 353 | * Pending CAN status interrupt source(s) to clear. |
Anna Bridge |
160:5571c4ff569f | 354 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 355 | __STATIC_INLINE void CAN_StatusIntClear(CAN_TypeDef *can, uint32_t flags) |
Anna Bridge |
160:5571c4ff569f | 356 | { |
Anna Bridge |
160:5571c4ff569f | 357 | can->IF1IFC = flags; |
Anna Bridge |
160:5571c4ff569f | 358 | } |
Anna Bridge |
160:5571c4ff569f | 359 | |
Anna Bridge |
160:5571c4ff569f | 360 | /***************************************************************************//** |
Anna Bridge |
160:5571c4ff569f | 361 | * @brief |
Anna Bridge |
160:5571c4ff569f | 362 | * Disable CAN status interrupts. |
Anna Bridge |
160:5571c4ff569f | 363 | * |
Anna Bridge |
160:5571c4ff569f | 364 | * @param[in] can |
Anna Bridge |
160:5571c4ff569f | 365 | * Pointer to CAN peripheral register block. |
Anna Bridge |
160:5571c4ff569f | 366 | * |
Anna Bridge |
160:5571c4ff569f | 367 | * @param[in] flags |
Anna Bridge |
160:5571c4ff569f | 368 | * CAN status interrupt source(s) to disable. |
Anna Bridge |
160:5571c4ff569f | 369 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 370 | __STATIC_INLINE void CAN_StatusIntDisable(CAN_TypeDef *can, uint32_t flags) |
Anna Bridge |
160:5571c4ff569f | 371 | { |
Anna Bridge |
160:5571c4ff569f | 372 | can->IF1IEN &= ~flags; |
Anna Bridge |
160:5571c4ff569f | 373 | } |
Anna Bridge |
160:5571c4ff569f | 374 | |
Anna Bridge |
160:5571c4ff569f | 375 | /***************************************************************************//** |
Anna Bridge |
160:5571c4ff569f | 376 | * @brief |
Anna Bridge |
160:5571c4ff569f | 377 | * Enable CAN status interrupts. |
Anna Bridge |
160:5571c4ff569f | 378 | * |
Anna Bridge |
160:5571c4ff569f | 379 | * @param[in] can |
Anna Bridge |
160:5571c4ff569f | 380 | * Pointer to CAN peripheral register block. |
Anna Bridge |
160:5571c4ff569f | 381 | * |
Anna Bridge |
160:5571c4ff569f | 382 | * @param[in] flags |
Anna Bridge |
160:5571c4ff569f | 383 | * CAN status interrupt source(s) to enable. |
Anna Bridge |
160:5571c4ff569f | 384 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 385 | __STATIC_INLINE void CAN_StatusIntEnable(CAN_TypeDef *can, uint32_t flags) |
Anna Bridge |
160:5571c4ff569f | 386 | { |
Anna Bridge |
160:5571c4ff569f | 387 | can->IF1IEN |= flags; |
Anna Bridge |
160:5571c4ff569f | 388 | } |
Anna Bridge |
160:5571c4ff569f | 389 | |
Anna Bridge |
160:5571c4ff569f | 390 | /***************************************************************************//** |
Anna Bridge |
160:5571c4ff569f | 391 | * @brief |
Anna Bridge |
160:5571c4ff569f | 392 | * Get pending CAN status interrupt flags. |
Anna Bridge |
160:5571c4ff569f | 393 | * |
Anna Bridge |
160:5571c4ff569f | 394 | * @note |
Anna Bridge |
160:5571c4ff569f | 395 | * The event bits are not cleared by the use of this function. |
Anna Bridge |
160:5571c4ff569f | 396 | * |
Anna Bridge |
160:5571c4ff569f | 397 | * @param[in] can |
Anna Bridge |
160:5571c4ff569f | 398 | * Pointer to CAN peripheral register block. |
Anna Bridge |
160:5571c4ff569f | 399 | * |
Anna Bridge |
160:5571c4ff569f | 400 | * @return |
Anna Bridge |
160:5571c4ff569f | 401 | * CAN interrupt source(s) pending. |
Anna Bridge |
160:5571c4ff569f | 402 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 403 | __STATIC_INLINE uint32_t CAN_StatusIntGet(CAN_TypeDef *can) |
Anna Bridge |
160:5571c4ff569f | 404 | { |
Anna Bridge |
160:5571c4ff569f | 405 | return can->IF1IF; |
Anna Bridge |
160:5571c4ff569f | 406 | } |
Anna Bridge |
160:5571c4ff569f | 407 | |
Anna Bridge |
160:5571c4ff569f | 408 | /***************************************************************************//** |
Anna Bridge |
160:5571c4ff569f | 409 | * @brief |
Anna Bridge |
160:5571c4ff569f | 410 | * Get pending and enabled CAN status interrupt flags. |
Anna Bridge |
160:5571c4ff569f | 411 | * |
Anna Bridge |
160:5571c4ff569f | 412 | * @note |
Anna Bridge |
160:5571c4ff569f | 413 | * The event bits are not cleared by the use of this function. |
Anna Bridge |
160:5571c4ff569f | 414 | * |
Anna Bridge |
160:5571c4ff569f | 415 | * @param[in] can |
Anna Bridge |
160:5571c4ff569f | 416 | * Pointer to CAN peripheral register block. |
Anna Bridge |
160:5571c4ff569f | 417 | * |
Anna Bridge |
160:5571c4ff569f | 418 | * @return |
Anna Bridge |
160:5571c4ff569f | 419 | * CAN interrupt source(s) pending and enabled. |
Anna Bridge |
160:5571c4ff569f | 420 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 421 | __STATIC_INLINE uint32_t CAN_StatusIntGetEnabled(CAN_TypeDef *can) |
Anna Bridge |
160:5571c4ff569f | 422 | { |
Anna Bridge |
160:5571c4ff569f | 423 | uint32_t ien; |
Anna Bridge |
160:5571c4ff569f | 424 | |
Anna Bridge |
160:5571c4ff569f | 425 | ien = can->IF1IEN; |
Anna Bridge |
160:5571c4ff569f | 426 | return can->IF1IF & ien; |
Anna Bridge |
160:5571c4ff569f | 427 | } |
Anna Bridge |
160:5571c4ff569f | 428 | |
Anna Bridge |
160:5571c4ff569f | 429 | /***************************************************************************//** |
Anna Bridge |
160:5571c4ff569f | 430 | * @brief |
Anna Bridge |
160:5571c4ff569f | 431 | * Set one or more CAN status interrupts. |
Anna Bridge |
160:5571c4ff569f | 432 | * |
Anna Bridge |
160:5571c4ff569f | 433 | * @param[in] can |
Anna Bridge |
160:5571c4ff569f | 434 | * Pointer to CAN peripheral register block. |
Anna Bridge |
160:5571c4ff569f | 435 | * |
Anna Bridge |
160:5571c4ff569f | 436 | * @param[in] flags |
Anna Bridge |
160:5571c4ff569f | 437 | * CAN status interrupt source(s) to set to pending. |
Anna Bridge |
160:5571c4ff569f | 438 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 439 | __STATIC_INLINE void CAN_StatusIntSet(CAN_TypeDef *can, uint32_t flags) |
Anna Bridge |
160:5571c4ff569f | 440 | { |
Anna Bridge |
160:5571c4ff569f | 441 | can->IF1IFS = flags; |
Anna Bridge |
160:5571c4ff569f | 442 | } |
Anna Bridge |
160:5571c4ff569f | 443 | |
Anna Bridge |
160:5571c4ff569f | 444 | /***************************************************************************//** |
Anna Bridge |
160:5571c4ff569f | 445 | * @brief |
Anna Bridge |
160:5571c4ff569f | 446 | * Get CAN status. |
Anna Bridge |
160:5571c4ff569f | 447 | * |
Anna Bridge |
160:5571c4ff569f | 448 | * @param[in] can |
Anna Bridge |
160:5571c4ff569f | 449 | * Pointer to CAN peripheral register block. |
Anna Bridge |
160:5571c4ff569f | 450 | * |
Anna Bridge |
160:5571c4ff569f | 451 | * @return |
Anna Bridge |
160:5571c4ff569f | 452 | * Value of CAN register STATUS. |
Anna Bridge |
160:5571c4ff569f | 453 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 454 | __STATIC_INLINE uint32_t CAN_StatusGet(CAN_TypeDef *can) |
Anna Bridge |
160:5571c4ff569f | 455 | { |
Anna Bridge |
160:5571c4ff569f | 456 | return can->STATUS & ~_CAN_STATUS_LEC_MASK; |
Anna Bridge |
160:5571c4ff569f | 457 | } |
Anna Bridge |
160:5571c4ff569f | 458 | |
Anna Bridge |
160:5571c4ff569f | 459 | /***************************************************************************//** |
Anna Bridge |
160:5571c4ff569f | 460 | * @brief |
Anna Bridge |
160:5571c4ff569f | 461 | * Clear CAN status. |
Anna Bridge |
160:5571c4ff569f | 462 | * |
Anna Bridge |
160:5571c4ff569f | 463 | * @param[in] can |
Anna Bridge |
160:5571c4ff569f | 464 | * Pointer to CAN peripheral register block. |
Anna Bridge |
160:5571c4ff569f | 465 | * |
Anna Bridge |
160:5571c4ff569f | 466 | * @param[in] flags |
Anna Bridge |
160:5571c4ff569f | 467 | * CAN status bits to clear. |
Anna Bridge |
160:5571c4ff569f | 468 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 469 | __STATIC_INLINE void CAN_StatusClear(CAN_TypeDef *can, uint32_t flags) |
Anna Bridge |
160:5571c4ff569f | 470 | { |
Anna Bridge |
160:5571c4ff569f | 471 | can->STATUS &= ~flags; |
Anna Bridge |
160:5571c4ff569f | 472 | } |
Anna Bridge |
160:5571c4ff569f | 473 | |
Anna Bridge |
160:5571c4ff569f | 474 | /***************************************************************************//** |
Anna Bridge |
160:5571c4ff569f | 475 | * @brief |
Anna Bridge |
160:5571c4ff569f | 476 | * Get the error count. |
Anna Bridge |
160:5571c4ff569f | 477 | * |
Anna Bridge |
160:5571c4ff569f | 478 | * @param[in] can |
Anna Bridge |
160:5571c4ff569f | 479 | * Pointer to CAN peripheral register block. |
Anna Bridge |
160:5571c4ff569f | 480 | * |
Anna Bridge |
160:5571c4ff569f | 481 | * @return |
Anna Bridge |
160:5571c4ff569f | 482 | * Error count. |
Anna Bridge |
160:5571c4ff569f | 483 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 484 | __STATIC_INLINE uint32_t CAN_GetErrorCount(CAN_TypeDef *can) |
Anna Bridge |
160:5571c4ff569f | 485 | { |
Anna Bridge |
160:5571c4ff569f | 486 | return can->ERRCNT; |
Anna Bridge |
160:5571c4ff569f | 487 | } |
Anna Bridge |
160:5571c4ff569f | 488 | |
Anna Bridge |
160:5571c4ff569f | 489 | /***************************************************************************//** |
Anna Bridge |
160:5571c4ff569f | 490 | * @brief |
Anna Bridge |
160:5571c4ff569f | 491 | * Clear one or more pending CAN message interrupts. |
Anna Bridge |
160:5571c4ff569f | 492 | * |
Anna Bridge |
160:5571c4ff569f | 493 | * @param[in] can |
Anna Bridge |
160:5571c4ff569f | 494 | * Pointer to CAN peripheral register block. |
Anna Bridge |
160:5571c4ff569f | 495 | * |
Anna Bridge |
160:5571c4ff569f | 496 | * @param[in] flags |
Anna Bridge |
160:5571c4ff569f | 497 | * Pending CAN message interrupt source(s) to clear. |
Anna Bridge |
160:5571c4ff569f | 498 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 499 | __STATIC_INLINE void CAN_MessageIntClear(CAN_TypeDef *can, uint32_t flags) |
Anna Bridge |
160:5571c4ff569f | 500 | { |
Anna Bridge |
160:5571c4ff569f | 501 | can->IF0IFC = flags; |
Anna Bridge |
160:5571c4ff569f | 502 | } |
Anna Bridge |
160:5571c4ff569f | 503 | |
Anna Bridge |
160:5571c4ff569f | 504 | /***************************************************************************//** |
Anna Bridge |
160:5571c4ff569f | 505 | * @brief |
Anna Bridge |
160:5571c4ff569f | 506 | * Disable CAN message interrupts. |
Anna Bridge |
160:5571c4ff569f | 507 | * |
Anna Bridge |
160:5571c4ff569f | 508 | * @param[in] can |
Anna Bridge |
160:5571c4ff569f | 509 | * Pointer to CAN peripheral register block. |
Anna Bridge |
160:5571c4ff569f | 510 | * |
Anna Bridge |
160:5571c4ff569f | 511 | * @param[in] flags |
Anna Bridge |
160:5571c4ff569f | 512 | * CAN message interrupt source(s) to disable. |
Anna Bridge |
160:5571c4ff569f | 513 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 514 | __STATIC_INLINE void CAN_MessageIntDisable(CAN_TypeDef *can, uint32_t flags) |
Anna Bridge |
160:5571c4ff569f | 515 | { |
Anna Bridge |
160:5571c4ff569f | 516 | can->IF0IEN &= ~flags; |
Anna Bridge |
160:5571c4ff569f | 517 | } |
Anna Bridge |
160:5571c4ff569f | 518 | |
Anna Bridge |
160:5571c4ff569f | 519 | /***************************************************************************//** |
Anna Bridge |
160:5571c4ff569f | 520 | * @brief |
Anna Bridge |
160:5571c4ff569f | 521 | * Enable CAN message interrupts. |
Anna Bridge |
160:5571c4ff569f | 522 | * |
Anna Bridge |
160:5571c4ff569f | 523 | * @param[in] can |
Anna Bridge |
160:5571c4ff569f | 524 | * Pointer to CAN peripheral register block. |
Anna Bridge |
160:5571c4ff569f | 525 | * |
Anna Bridge |
160:5571c4ff569f | 526 | * @param[in] flags |
Anna Bridge |
160:5571c4ff569f | 527 | * CAN message interrupt source(s) to enable. |
Anna Bridge |
160:5571c4ff569f | 528 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 529 | __STATIC_INLINE void CAN_MessageIntEnable(CAN_TypeDef *can, uint32_t flags) |
Anna Bridge |
160:5571c4ff569f | 530 | { |
Anna Bridge |
160:5571c4ff569f | 531 | can->IF0IEN |= flags; |
Anna Bridge |
160:5571c4ff569f | 532 | } |
Anna Bridge |
160:5571c4ff569f | 533 | |
Anna Bridge |
160:5571c4ff569f | 534 | /***************************************************************************//** |
Anna Bridge |
160:5571c4ff569f | 535 | * @brief |
Anna Bridge |
160:5571c4ff569f | 536 | * Get pending CAN message interrupt flags. |
Anna Bridge |
160:5571c4ff569f | 537 | * |
Anna Bridge |
160:5571c4ff569f | 538 | * @note |
Anna Bridge |
160:5571c4ff569f | 539 | * The event bits are not cleared by the use of this function. |
Anna Bridge |
160:5571c4ff569f | 540 | * |
Anna Bridge |
160:5571c4ff569f | 541 | * @param[in] can |
Anna Bridge |
160:5571c4ff569f | 542 | * Pointer to CAN peripheral register block. |
Anna Bridge |
160:5571c4ff569f | 543 | * |
Anna Bridge |
160:5571c4ff569f | 544 | * @return |
Anna Bridge |
160:5571c4ff569f | 545 | * CAN message interrupt source(s) pending. |
Anna Bridge |
160:5571c4ff569f | 546 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 547 | __STATIC_INLINE uint32_t CAN_MessageIntGet(CAN_TypeDef *can) |
Anna Bridge |
160:5571c4ff569f | 548 | { |
Anna Bridge |
160:5571c4ff569f | 549 | return can->IF0IF; |
Anna Bridge |
160:5571c4ff569f | 550 | } |
Anna Bridge |
160:5571c4ff569f | 551 | |
Anna Bridge |
160:5571c4ff569f | 552 | /***************************************************************************//** |
Anna Bridge |
160:5571c4ff569f | 553 | * @brief |
Anna Bridge |
160:5571c4ff569f | 554 | * Get CAN message interrupt flags that are pending and enabled. |
Anna Bridge |
160:5571c4ff569f | 555 | * |
Anna Bridge |
160:5571c4ff569f | 556 | * @note |
Anna Bridge |
160:5571c4ff569f | 557 | * The event bits are not cleared by the use of this function. |
Anna Bridge |
160:5571c4ff569f | 558 | * |
Anna Bridge |
160:5571c4ff569f | 559 | * @param[in] can |
Anna Bridge |
160:5571c4ff569f | 560 | * Pointer to CAN peripheral register block. |
Anna Bridge |
160:5571c4ff569f | 561 | * |
Anna Bridge |
160:5571c4ff569f | 562 | * @return |
Anna Bridge |
160:5571c4ff569f | 563 | * CAN message interrupt source(s) pending and enabled. |
Anna Bridge |
160:5571c4ff569f | 564 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 565 | __STATIC_INLINE uint32_t CAN_MessageIntGetEnabled(CAN_TypeDef *can) |
Anna Bridge |
160:5571c4ff569f | 566 | { |
Anna Bridge |
160:5571c4ff569f | 567 | uint32_t ien; |
Anna Bridge |
160:5571c4ff569f | 568 | |
Anna Bridge |
160:5571c4ff569f | 569 | ien = can->IF0IEN; |
Anna Bridge |
160:5571c4ff569f | 570 | return can->IF0IF & ien; |
Anna Bridge |
160:5571c4ff569f | 571 | } |
Anna Bridge |
160:5571c4ff569f | 572 | |
Anna Bridge |
160:5571c4ff569f | 573 | /***************************************************************************//** |
Anna Bridge |
160:5571c4ff569f | 574 | * @brief |
Anna Bridge |
160:5571c4ff569f | 575 | * Set one or more CAN message interrupts. |
Anna Bridge |
160:5571c4ff569f | 576 | * |
Anna Bridge |
160:5571c4ff569f | 577 | * @param[in] can |
Anna Bridge |
160:5571c4ff569f | 578 | * Pointer to CAN peripheral register block. |
Anna Bridge |
160:5571c4ff569f | 579 | * |
Anna Bridge |
160:5571c4ff569f | 580 | * @param[in] flags |
Anna Bridge |
160:5571c4ff569f | 581 | * CAN message interrupt source(s) to set to pending. |
Anna Bridge |
160:5571c4ff569f | 582 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 583 | __STATIC_INLINE void CAN_MessageIntSet(CAN_TypeDef *can, uint32_t flags) |
Anna Bridge |
160:5571c4ff569f | 584 | { |
Anna Bridge |
160:5571c4ff569f | 585 | can->IF0IFS = flags; |
Anna Bridge |
160:5571c4ff569f | 586 | } |
Anna Bridge |
160:5571c4ff569f | 587 | |
Anna Bridge |
160:5571c4ff569f | 588 | /** @} (end addtogroup CAN) */ |
Anna Bridge |
160:5571c4ff569f | 589 | /** @} (end addtogroup emlib) */ |
Anna Bridge |
160:5571c4ff569f | 590 | |
Anna Bridge |
160:5571c4ff569f | 591 | #ifdef __cplusplus |
Anna Bridge |
160:5571c4ff569f | 592 | } |
Anna Bridge |
160:5571c4ff569f | 593 | #endif |
Anna Bridge |
160:5571c4ff569f | 594 | |
Anna Bridge |
160:5571c4ff569f | 595 | #endif /* defined(CAN_COUNT) && (CAN_COUNT > 0) */ |
Anna Bridge |
160:5571c4ff569f | 596 | #endif /* EM_CAN_H */ |