NXP's driver library for LPC17xx, ported to mbed's online compiler. Not tested! I had to fix a lot of warings and found a couple of pretty obvious bugs, so the chances are there are more. Original: http://ics.nxp.com/support/documents/microcontrollers/zip/lpc17xx.cmsis.driver.library.zip
include/lpc17xx_can.h@0:1063a091a062, 2010-02-17 (annotated)
- Committer:
- igorsk
- Date:
- Wed Feb 17 16:22:39 2010 +0000
- Revision:
- 0:1063a091a062
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
igorsk | 0:1063a091a062 | 1 | /***********************************************************************//** |
igorsk | 0:1063a091a062 | 2 | * @file : lpc17xx_can.h |
igorsk | 0:1063a091a062 | 3 | * @brief : Contains all macro definitions and function prototypes |
igorsk | 0:1063a091a062 | 4 | * support for CAN firmware library on LPC17xx |
igorsk | 0:1063a091a062 | 5 | * @version : 1.0 |
igorsk | 0:1063a091a062 | 6 | * @date : 1.June.2009 |
igorsk | 0:1063a091a062 | 7 | * @author : NguyenCao |
igorsk | 0:1063a091a062 | 8 | ************************************************************************** |
igorsk | 0:1063a091a062 | 9 | * Software that is described herein is for illustrative purposes only |
igorsk | 0:1063a091a062 | 10 | * which provides customers with programming information regarding the |
igorsk | 0:1063a091a062 | 11 | * products. This software is supplied "AS IS" without any warranties. |
igorsk | 0:1063a091a062 | 12 | * NXP Semiconductors assumes no responsibility or liability for the |
igorsk | 0:1063a091a062 | 13 | * use of the software, conveys no license or title under any patent, |
igorsk | 0:1063a091a062 | 14 | * copyright, or mask work right to the product. NXP Semiconductors |
igorsk | 0:1063a091a062 | 15 | * reserves the right to make changes in the software without |
igorsk | 0:1063a091a062 | 16 | * notification. NXP Semiconductors also make no representation or |
igorsk | 0:1063a091a062 | 17 | * warranty that such application will be suitable for the specified |
igorsk | 0:1063a091a062 | 18 | * use without further testing or modification. |
igorsk | 0:1063a091a062 | 19 | **************************************************************************/ |
igorsk | 0:1063a091a062 | 20 | |
igorsk | 0:1063a091a062 | 21 | /* Peripheral group ----------------------------------------------------------- */ |
igorsk | 0:1063a091a062 | 22 | /** @defgroup CAN |
igorsk | 0:1063a091a062 | 23 | * @ingroup LPC1700CMSIS_FwLib_Drivers |
igorsk | 0:1063a091a062 | 24 | * @{ |
igorsk | 0:1063a091a062 | 25 | */ |
igorsk | 0:1063a091a062 | 26 | |
igorsk | 0:1063a091a062 | 27 | #ifndef LPC17XX_CAN_H_ |
igorsk | 0:1063a091a062 | 28 | #define LPC17XX_CAN_H_ |
igorsk | 0:1063a091a062 | 29 | |
igorsk | 0:1063a091a062 | 30 | /* Includes ------------------------------------------------------------------- */ |
igorsk | 0:1063a091a062 | 31 | #include "cmsis.h" |
igorsk | 0:1063a091a062 | 32 | #include "lpc_types.h" |
igorsk | 0:1063a091a062 | 33 | |
igorsk | 0:1063a091a062 | 34 | #ifdef __cplusplus |
igorsk | 0:1063a091a062 | 35 | extern "C" |
igorsk | 0:1063a091a062 | 36 | { |
igorsk | 0:1063a091a062 | 37 | #endif |
igorsk | 0:1063a091a062 | 38 | |
igorsk | 0:1063a091a062 | 39 | |
igorsk | 0:1063a091a062 | 40 | /* Private Macros ------------------------------------------------------------- */ |
igorsk | 0:1063a091a062 | 41 | /** @defgroup CAN_Private_Macros |
igorsk | 0:1063a091a062 | 42 | * @{ |
igorsk | 0:1063a091a062 | 43 | */ |
igorsk | 0:1063a091a062 | 44 | |
igorsk | 0:1063a091a062 | 45 | #define ID_11 1 |
igorsk | 0:1063a091a062 | 46 | #define MAX_HW_FULLCAN_OBJ 64 |
igorsk | 0:1063a091a062 | 47 | #define MAX_SW_FULLCAN_OBJ 32 |
igorsk | 0:1063a091a062 | 48 | |
igorsk | 0:1063a091a062 | 49 | |
igorsk | 0:1063a091a062 | 50 | /** @defgroup CAN_REGISTER_BIT_DEFINITION |
igorsk | 0:1063a091a062 | 51 | * @{ |
igorsk | 0:1063a091a062 | 52 | */ |
igorsk | 0:1063a091a062 | 53 | |
igorsk | 0:1063a091a062 | 54 | /** CAN Reset mode */ |
igorsk | 0:1063a091a062 | 55 | #define CAN_MOD_RM ((uint32_t)(1)) |
igorsk | 0:1063a091a062 | 56 | /** CAN Listen Only Mode */ |
igorsk | 0:1063a091a062 | 57 | #define CAN_MOD_LOM ((uint32_t)(1<<1)) |
igorsk | 0:1063a091a062 | 58 | /** CAN Self Test mode */ |
igorsk | 0:1063a091a062 | 59 | #define CAN_MOD_STM ((uint32_t)(1<<2)) |
igorsk | 0:1063a091a062 | 60 | /** CAN Transmit Priority mode */ |
igorsk | 0:1063a091a062 | 61 | #define CAN_MOD_TPM ((uint32_t)(1<<3)) |
igorsk | 0:1063a091a062 | 62 | /** CAN Sleep mode */ |
igorsk | 0:1063a091a062 | 63 | #define CAN_MOD_SM ((uint32_t)(1<<4)) |
igorsk | 0:1063a091a062 | 64 | /** CAN Receive Polarity mode */ |
igorsk | 0:1063a091a062 | 65 | #define CAN_MOD_RPM ((uint32_t)(1<<5)) |
igorsk | 0:1063a091a062 | 66 | /** CAN Test mode */ |
igorsk | 0:1063a091a062 | 67 | #define CAN_MOD_TM ((uint32_t)(1<<7)) |
igorsk | 0:1063a091a062 | 68 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 69 | * Macro defines for CAN Command Register |
igorsk | 0:1063a091a062 | 70 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 71 | /** CAN Transmission Request */ |
igorsk | 0:1063a091a062 | 72 | #define CAN_CMR_TR ((uint32_t)(1)) |
igorsk | 0:1063a091a062 | 73 | /** CAN Abort Transmission */ |
igorsk | 0:1063a091a062 | 74 | #define CAN_CMR_AT ((uint32_t)(1<<1)) |
igorsk | 0:1063a091a062 | 75 | /** CAN Release Receive Buffer */ |
igorsk | 0:1063a091a062 | 76 | #define CAN_CMR_RRB ((uint32_t)(1<<2)) |
igorsk | 0:1063a091a062 | 77 | /** CAN Clear Data Overrun */ |
igorsk | 0:1063a091a062 | 78 | #define CAN_CMR_CDO ((uint32_t)(1<<3)) |
igorsk | 0:1063a091a062 | 79 | /** CAN Self Reception Request */ |
igorsk | 0:1063a091a062 | 80 | #define CAN_CMR_SRR ((uint32_t)(1<<4)) |
igorsk | 0:1063a091a062 | 81 | /** CAN Select Tx Buffer 1 */ |
igorsk | 0:1063a091a062 | 82 | #define CAN_CMR_STB1 ((uint32_t)(1<<5)) |
igorsk | 0:1063a091a062 | 83 | /** CAN Select Tx Buffer 2 */ |
igorsk | 0:1063a091a062 | 84 | #define CAN_CMR_STB2 ((uint32_t)(1<<6)) |
igorsk | 0:1063a091a062 | 85 | /** CAN Select Tx Buffer 3 */ |
igorsk | 0:1063a091a062 | 86 | #define CAN_CMR_STB3 ((uint32_t)(1<<7)) |
igorsk | 0:1063a091a062 | 87 | |
igorsk | 0:1063a091a062 | 88 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 89 | * Macro defines for CAN Global Status Register |
igorsk | 0:1063a091a062 | 90 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 91 | /** CAN Receive Buffer Status */ |
igorsk | 0:1063a091a062 | 92 | #define CAN_GSR_RBS ((uint32_t)(1)) |
igorsk | 0:1063a091a062 | 93 | /** CAN Data Overrun Status */ |
igorsk | 0:1063a091a062 | 94 | #define CAN_GSR_DOS ((uint32_t)(1<<1)) |
igorsk | 0:1063a091a062 | 95 | /** CAN Transmit Buffer Status */ |
igorsk | 0:1063a091a062 | 96 | #define CAN_GSR_TBS ((uint32_t)(1<<2)) |
igorsk | 0:1063a091a062 | 97 | /** CAN Transmit Complete Status */ |
igorsk | 0:1063a091a062 | 98 | #define CAN_GSR_TCS ((uint32_t)(1<<3)) |
igorsk | 0:1063a091a062 | 99 | /** CAN Receive Status */ |
igorsk | 0:1063a091a062 | 100 | #define CAN_GSR_RS ((uint32_t)(1<<4)) |
igorsk | 0:1063a091a062 | 101 | /** CAN Transmit Status */ |
igorsk | 0:1063a091a062 | 102 | #define CAN_GSR_TS ((uint32_t)(1<<5)) |
igorsk | 0:1063a091a062 | 103 | /** CAN Error Status */ |
igorsk | 0:1063a091a062 | 104 | #define CAN_GSR_ES ((uint32_t)(1<<6)) |
igorsk | 0:1063a091a062 | 105 | /** CAN Bus Status */ |
igorsk | 0:1063a091a062 | 106 | #define CAN_GSR_BS ((uint32_t)(1<<7)) |
igorsk | 0:1063a091a062 | 107 | /** CAN Current value of the Rx Error Counter */ |
igorsk | 0:1063a091a062 | 108 | #define CAN_GSR_RXERR(n) ((uint32_t)((n&0xFF)<<16)) |
igorsk | 0:1063a091a062 | 109 | /** CAN Current value of the Tx Error Counter */ |
igorsk | 0:1063a091a062 | 110 | #define CAN_GSR_TXERR(n) ((uint32_t)(n&0xFF)<<24)) |
igorsk | 0:1063a091a062 | 111 | |
igorsk | 0:1063a091a062 | 112 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 113 | * Macro defines for CAN Interrupt and Capture Register |
igorsk | 0:1063a091a062 | 114 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 115 | /** CAN Receive Interrupt */ |
igorsk | 0:1063a091a062 | 116 | #define CAN_ICR_RI ((uint32_t)(1)) |
igorsk | 0:1063a091a062 | 117 | /** CAN Transmit Interrupt 1 */ |
igorsk | 0:1063a091a062 | 118 | #define CAN_ICR_TI1 ((uint32_t)(1<<1)) |
igorsk | 0:1063a091a062 | 119 | /** CAN Error Warning Interrupt */ |
igorsk | 0:1063a091a062 | 120 | #define CAN_ICR_EI ((uint32_t)(1<<2)) |
igorsk | 0:1063a091a062 | 121 | /** CAN Data Overrun Interrupt */ |
igorsk | 0:1063a091a062 | 122 | #define CAN_ICR_DOI ((uint32_t)(1<<3)) |
igorsk | 0:1063a091a062 | 123 | /** CAN Wake-Up Interrupt */ |
igorsk | 0:1063a091a062 | 124 | #define CAN_ICR_WUI ((uint32_t)(1<<4)) |
igorsk | 0:1063a091a062 | 125 | /** CAN Error Passive Interrupt */ |
igorsk | 0:1063a091a062 | 126 | #define CAN_ICR_EPI ((uint32_t)(1<<5)) |
igorsk | 0:1063a091a062 | 127 | /** CAN Arbitration Lost Interrupt */ |
igorsk | 0:1063a091a062 | 128 | #define CAN_ICR_ALI ((uint32_t)(1<<6)) |
igorsk | 0:1063a091a062 | 129 | /** CAN Bus Error Interrupt */ |
igorsk | 0:1063a091a062 | 130 | #define CAN_ICR_BEI ((uint32_t)(1<<7)) |
igorsk | 0:1063a091a062 | 131 | /** CAN ID Ready Interrupt */ |
igorsk | 0:1063a091a062 | 132 | #define CAN_ICR_IDI ((uint32_t)(1<<8)) |
igorsk | 0:1063a091a062 | 133 | /** CAN Transmit Interrupt 2 */ |
igorsk | 0:1063a091a062 | 134 | #define CAN_ICR_TI2 ((uint32_t)(1<<9)) |
igorsk | 0:1063a091a062 | 135 | /** CAN Transmit Interrupt 3 */ |
igorsk | 0:1063a091a062 | 136 | #define CAN_ICR_TI3 ((uint32_t)(1<<10)) |
igorsk | 0:1063a091a062 | 137 | /** CAN Error Code Capture */ |
igorsk | 0:1063a091a062 | 138 | #define CAN_ICR_ERRBIT(n) ((uint32_t)((n&0x1F)<<16)) |
igorsk | 0:1063a091a062 | 139 | /** CAN Error Direction */ |
igorsk | 0:1063a091a062 | 140 | #define CAN_ICR_ERRDIR ((uint32_t)(1<<21)) |
igorsk | 0:1063a091a062 | 141 | /** CAN Error Capture */ |
igorsk | 0:1063a091a062 | 142 | #define CAN_ICR_ERRC(n) ((uint32_t)((n&0x3)<<22)) |
igorsk | 0:1063a091a062 | 143 | /** CAN Arbitration Lost Capture */ |
igorsk | 0:1063a091a062 | 144 | #define CAN_ICR_ALCBIT(n) ((uint32_t)((n&0xFF)<<24)) |
igorsk | 0:1063a091a062 | 145 | |
igorsk | 0:1063a091a062 | 146 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 147 | * Macro defines for CAN Interrupt Enable Register |
igorsk | 0:1063a091a062 | 148 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 149 | /** CAN Receive Interrupt Enable */ |
igorsk | 0:1063a091a062 | 150 | #define CAN_IER_RIE ((uint32_t)(1)) |
igorsk | 0:1063a091a062 | 151 | /** CAN Transmit Interrupt Enable for buffer 1 */ |
igorsk | 0:1063a091a062 | 152 | #define CAN_IER_TIE1 ((uint32_t)(1<<1)) |
igorsk | 0:1063a091a062 | 153 | /** CAN Error Warning Interrupt Enable */ |
igorsk | 0:1063a091a062 | 154 | #define CAN_IER_EIE ((uint32_t)(1<<2)) |
igorsk | 0:1063a091a062 | 155 | /** CAN Data Overrun Interrupt Enable */ |
igorsk | 0:1063a091a062 | 156 | #define CAN_IER_DOIE ((uint32_t)(1<<3)) |
igorsk | 0:1063a091a062 | 157 | /** CAN Wake-Up Interrupt Enable */ |
igorsk | 0:1063a091a062 | 158 | #define CAN_IER_WUIE ((uint32_t)(1<<4)) |
igorsk | 0:1063a091a062 | 159 | /** CAN Error Passive Interrupt Enable */ |
igorsk | 0:1063a091a062 | 160 | #define CAN_IER_EPIE ((uint32_t)(1<<5)) |
igorsk | 0:1063a091a062 | 161 | /** CAN Arbitration Lost Interrupt Enable */ |
igorsk | 0:1063a091a062 | 162 | #define CAN_IER_ALIE ((uint32_t)(1<<6)) |
igorsk | 0:1063a091a062 | 163 | /** CAN Bus Error Interrupt Enable */ |
igorsk | 0:1063a091a062 | 164 | #define CAN_IER_BEIE ((uint32_t)(1<<7)) |
igorsk | 0:1063a091a062 | 165 | /** CAN ID Ready Interrupt Enable */ |
igorsk | 0:1063a091a062 | 166 | #define CAN_IER_IDIE ((uint32_t)(1<<8)) |
igorsk | 0:1063a091a062 | 167 | /** CAN Transmit Enable Interrupt for Buffer 2 */ |
igorsk | 0:1063a091a062 | 168 | #define CAN_IER_TIE2 ((uint32_t)(1<<9)) |
igorsk | 0:1063a091a062 | 169 | /** CAN Transmit Enable Interrupt for Buffer 3 */ |
igorsk | 0:1063a091a062 | 170 | #define CAN_IER_TIE3 ((uint32_t)(1<<10)) |
igorsk | 0:1063a091a062 | 171 | |
igorsk | 0:1063a091a062 | 172 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 173 | * Macro defines for CAN Bus Timing Register |
igorsk | 0:1063a091a062 | 174 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 175 | /** CAN Baudrate Prescaler */ |
igorsk | 0:1063a091a062 | 176 | #define CAN_BTR_BRP(n) ((uint32_t)(n&0x3FF)) |
igorsk | 0:1063a091a062 | 177 | /** CAN Synchronization Jump Width */ |
igorsk | 0:1063a091a062 | 178 | #define CAN_BTR_SJM(n) ((uint32_t)((n&0x3)<<14)) |
igorsk | 0:1063a091a062 | 179 | /** CAN Time Segment 1 */ |
igorsk | 0:1063a091a062 | 180 | #define CAN_BTR_TESG1(n) ((uint32_t)(n&0xF)<<16)) |
igorsk | 0:1063a091a062 | 181 | /** CAN Time Segment 2 */ |
igorsk | 0:1063a091a062 | 182 | #define CAN_BTR_TESG2(n) ((uint32_t)(n&0xF)<<20)) |
igorsk | 0:1063a091a062 | 183 | /** CAN Sampling */ |
igorsk | 0:1063a091a062 | 184 | #define CAN_BTR_SAM(n) ((uint32_t)(1<<23)) |
igorsk | 0:1063a091a062 | 185 | |
igorsk | 0:1063a091a062 | 186 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 187 | * Macro defines for CAN Error Warning Limit Register |
igorsk | 0:1063a091a062 | 188 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 189 | /** CAN Error Warning Limit */ |
igorsk | 0:1063a091a062 | 190 | #define CAN_EWL_EWL(n) ((uint32_t)(n&0xFF)) |
igorsk | 0:1063a091a062 | 191 | |
igorsk | 0:1063a091a062 | 192 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 193 | * Macro defines for CAN Status Register |
igorsk | 0:1063a091a062 | 194 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 195 | /** CAN Receive Buffer Status */ |
igorsk | 0:1063a091a062 | 196 | #define CAN_SR_RBS ((uint32_t)(1)) |
igorsk | 0:1063a091a062 | 197 | /** CAN Data Overrun Status */ |
igorsk | 0:1063a091a062 | 198 | #define CAN_SR_DOS ((uint32_t)(1<<1)) |
igorsk | 0:1063a091a062 | 199 | /** CAN Transmit Buffer Status 1 */ |
igorsk | 0:1063a091a062 | 200 | #define CAN_SR_TBS1 ((uint32_t)(1<<2)) |
igorsk | 0:1063a091a062 | 201 | /** CAN Transmission Complete Status of Buffer 1 */ |
igorsk | 0:1063a091a062 | 202 | #define CAN_SR_TCS1 ((uint32_t)(1<<3)) |
igorsk | 0:1063a091a062 | 203 | /** CAN Receive Status */ |
igorsk | 0:1063a091a062 | 204 | #define CAN_SR_RS ((uint32_t)(1<<4)) |
igorsk | 0:1063a091a062 | 205 | /** CAN Transmit Status 1 */ |
igorsk | 0:1063a091a062 | 206 | #define CAN_SR_TS1 ((uint32_t)(1<<5)) |
igorsk | 0:1063a091a062 | 207 | /** CAN Error Status */ |
igorsk | 0:1063a091a062 | 208 | #define CAN_SR_ES ((uint32_t)(1<<6)) |
igorsk | 0:1063a091a062 | 209 | /** CAN Bus Status */ |
igorsk | 0:1063a091a062 | 210 | #define CAN_SR_BS ((uint32_t)(1<<7)) |
igorsk | 0:1063a091a062 | 211 | /** CAN Transmit Buffer Status 2 */ |
igorsk | 0:1063a091a062 | 212 | #define CAN_SR_TBS2 ((uint32_t)(1<<10)) |
igorsk | 0:1063a091a062 | 213 | /** CAN Transmission Complete Status of Buffer 2 */ |
igorsk | 0:1063a091a062 | 214 | #define CAN_SR_TCS2 ((uint32_t)(1<<11)) |
igorsk | 0:1063a091a062 | 215 | /** CAN Transmit Status 2 */ |
igorsk | 0:1063a091a062 | 216 | #define CAN_SR_TS2 ((uint32_t)(1<<13)) |
igorsk | 0:1063a091a062 | 217 | /** CAN Transmit Buffer Status 2 */ |
igorsk | 0:1063a091a062 | 218 | #define CAN_SR_TBS3 ((uint32_t)(1<<18)) |
igorsk | 0:1063a091a062 | 219 | /** CAN Transmission Complete Status of Buffer 2 */ |
igorsk | 0:1063a091a062 | 220 | #define CAN_SR_TCS3 ((uint32_t)(1<<19)) |
igorsk | 0:1063a091a062 | 221 | /** CAN Transmit Status 2 */ |
igorsk | 0:1063a091a062 | 222 | #define CAN_SR_TS3 ((uint32_t)(1<<21)) |
igorsk | 0:1063a091a062 | 223 | |
igorsk | 0:1063a091a062 | 224 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 225 | * Macro defines for CAN Receive Frame Status Register |
igorsk | 0:1063a091a062 | 226 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 227 | /** CAN ID Index */ |
igorsk | 0:1063a091a062 | 228 | #define CAN_RFS_ID_INDEX(n) ((uint32_t)(n&0x3FF)) |
igorsk | 0:1063a091a062 | 229 | /** CAN Bypass */ |
igorsk | 0:1063a091a062 | 230 | #define CAN_RFS_BP ((uint32_t)(1<<10)) |
igorsk | 0:1063a091a062 | 231 | /** CAN Data Length Code */ |
igorsk | 0:1063a091a062 | 232 | #define CAN_RFS_DLC(n) ((uint32_t)((n&0xF)<<16) |
igorsk | 0:1063a091a062 | 233 | /** CAN Remote Transmission Request */ |
igorsk | 0:1063a091a062 | 234 | #define CAN_RFS_RTR ((uint32_t)(1<<30)) |
igorsk | 0:1063a091a062 | 235 | /** CAN control 11 bit or 29 bit Identifier */ |
igorsk | 0:1063a091a062 | 236 | #define CAN_RFS_FF ((uint32_t)(1<<31)) |
igorsk | 0:1063a091a062 | 237 | |
igorsk | 0:1063a091a062 | 238 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 239 | * Macro defines for CAN Receive Identifier Register |
igorsk | 0:1063a091a062 | 240 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 241 | /** CAN 11 bit Identifier */ |
igorsk | 0:1063a091a062 | 242 | #define CAN_RID_ID_11(n) ((uint32_t)(n&0x7FF)) |
igorsk | 0:1063a091a062 | 243 | /** CAN 29 bit Identifier */ |
igorsk | 0:1063a091a062 | 244 | #define CAN_RID_ID_29(n) ((uint32_t)(n&0x1FFFFFFF)) |
igorsk | 0:1063a091a062 | 245 | |
igorsk | 0:1063a091a062 | 246 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 247 | * Macro defines for CAN Receive Data A Register |
igorsk | 0:1063a091a062 | 248 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 249 | /** CAN Receive Data 1 */ |
igorsk | 0:1063a091a062 | 250 | #define CAN_RDA_DATA1(n) ((uint32_t)(n&0xFF)) |
igorsk | 0:1063a091a062 | 251 | /** CAN Receive Data 2 */ |
igorsk | 0:1063a091a062 | 252 | #define CAN_RDA_DATA2(n) ((uint32_t)((n&0xFF)<<8)) |
igorsk | 0:1063a091a062 | 253 | /** CAN Receive Data 3 */ |
igorsk | 0:1063a091a062 | 254 | #define CAN_RDA_DATA3(n) ((uint32_t)((n&0xFF)<<16)) |
igorsk | 0:1063a091a062 | 255 | /** CAN Receive Data 4 */ |
igorsk | 0:1063a091a062 | 256 | #define CAN_RDA_DATA4(n) ((uint32_t)((n&0xFF)<<24)) |
igorsk | 0:1063a091a062 | 257 | |
igorsk | 0:1063a091a062 | 258 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 259 | * Macro defines for CAN Receive Data B Register |
igorsk | 0:1063a091a062 | 260 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 261 | /** CAN Receive Data 5 */ |
igorsk | 0:1063a091a062 | 262 | #define CAN_RDB_DATA5(n) ((uint32_t)(n&0xFF)) |
igorsk | 0:1063a091a062 | 263 | /** CAN Receive Data 6 */ |
igorsk | 0:1063a091a062 | 264 | #define CAN_RDB_DATA6(n) ((uint32_t)((n&0xFF)<<8)) |
igorsk | 0:1063a091a062 | 265 | /** CAN Receive Data 7 */ |
igorsk | 0:1063a091a062 | 266 | #define CAN_RDB_DATA7(n) ((uint32_t)((n&0xFF)<<16)) |
igorsk | 0:1063a091a062 | 267 | /** CAN Receive Data 8 */ |
igorsk | 0:1063a091a062 | 268 | #define CAN_RDB_DATA8(n) ((uint32_t)((n&0xFF)<<24)) |
igorsk | 0:1063a091a062 | 269 | |
igorsk | 0:1063a091a062 | 270 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 271 | * Macro defines for CAN Transmit Frame Information Register |
igorsk | 0:1063a091a062 | 272 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 273 | /** CAN Priority */ |
igorsk | 0:1063a091a062 | 274 | #define CAN_TFI_PRIO(n) ((uint32_t)(n&0xFF)) |
igorsk | 0:1063a091a062 | 275 | /** CAN Data Length Code */ |
igorsk | 0:1063a091a062 | 276 | #define CAN_TFI_DLC(n) ((uint32_t)((n&0xF)<<16)) |
igorsk | 0:1063a091a062 | 277 | /** CAN Remote Frame Transmission */ |
igorsk | 0:1063a091a062 | 278 | #define CAN_TFI_RTR ((uint32_t)(1<<30)) |
igorsk | 0:1063a091a062 | 279 | /** CAN control 11-bit or 29-bit Identifier */ |
igorsk | 0:1063a091a062 | 280 | #define CAN_TFI_FF ((uint32_t)(1<<31)) |
igorsk | 0:1063a091a062 | 281 | |
igorsk | 0:1063a091a062 | 282 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 283 | * Macro defines for CAN Transmit Identifier Register |
igorsk | 0:1063a091a062 | 284 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 285 | /** CAN 11-bit Identifier */ |
igorsk | 0:1063a091a062 | 286 | #define CAN_TID_ID11(n) ((uint32_t)(n&0x7FF)) |
igorsk | 0:1063a091a062 | 287 | /** CAN 11-bit Identifier */ |
igorsk | 0:1063a091a062 | 288 | #define CAN_TID_ID29(n) ((uint32_t)(n&0x1FFFFFFF)) |
igorsk | 0:1063a091a062 | 289 | |
igorsk | 0:1063a091a062 | 290 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 291 | * Macro defines for CAN Transmit Data A Register |
igorsk | 0:1063a091a062 | 292 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 293 | /** CAN Transmit Data 1 */ |
igorsk | 0:1063a091a062 | 294 | #define CAN_TDA_DATA1(n) ((uint32_t)(n&0xFF)) |
igorsk | 0:1063a091a062 | 295 | /** CAN Transmit Data 2 */ |
igorsk | 0:1063a091a062 | 296 | #define CAN_TDA_DATA2(n) ((uint32_t)((n&0xFF)<<8)) |
igorsk | 0:1063a091a062 | 297 | /** CAN Transmit Data 3 */ |
igorsk | 0:1063a091a062 | 298 | #define CAN_TDA_DATA3(n) ((uint32_t)((n&0xFF)<<16)) |
igorsk | 0:1063a091a062 | 299 | /** CAN Transmit Data 4 */ |
igorsk | 0:1063a091a062 | 300 | #define CAN_TDA_DATA4(n) ((uint32_t)((n&0xFF)<<24)) |
igorsk | 0:1063a091a062 | 301 | |
igorsk | 0:1063a091a062 | 302 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 303 | * Macro defines for CAN Transmit Data B Register |
igorsk | 0:1063a091a062 | 304 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 305 | /** CAN Transmit Data 5 */ |
igorsk | 0:1063a091a062 | 306 | #define CAN_TDA_DATA5(n) ((uint32_t)(n&0xFF)) |
igorsk | 0:1063a091a062 | 307 | /** CAN Transmit Data 6 */ |
igorsk | 0:1063a091a062 | 308 | #define CAN_TDA_DATA6(n) ((uint32_t)((n&0xFF)<<8)) |
igorsk | 0:1063a091a062 | 309 | /** CAN Transmit Data 7 */ |
igorsk | 0:1063a091a062 | 310 | #define CAN_TDA_DATA7(n) ((uint32_t)((n&0xFF)<<16)) |
igorsk | 0:1063a091a062 | 311 | /** CAN Transmit Data 8 */ |
igorsk | 0:1063a091a062 | 312 | #define CAN_TDA_DATA8(n) ((uint32_t)((n&0xFF)<<24)) |
igorsk | 0:1063a091a062 | 313 | |
igorsk | 0:1063a091a062 | 314 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 315 | * Macro defines for CAN Sleep Clear Register |
igorsk | 0:1063a091a062 | 316 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 317 | /** CAN1 Sleep mode */ |
igorsk | 0:1063a091a062 | 318 | #define CAN1SLEEPCLR ((uint32_t)(1<<1)) |
igorsk | 0:1063a091a062 | 319 | /** CAN2 Sleep Mode */ |
igorsk | 0:1063a091a062 | 320 | #define CAN2SLEEPCLR ((uint32_t)(1<<2)) |
igorsk | 0:1063a091a062 | 321 | |
igorsk | 0:1063a091a062 | 322 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 323 | * Macro defines for CAN Wake up Flags Register |
igorsk | 0:1063a091a062 | 324 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 325 | /** CAN1 Sleep mode */ |
igorsk | 0:1063a091a062 | 326 | #define CAN_WAKEFLAGES_CAN1WAKE ((uint32_t)(1<<1)) |
igorsk | 0:1063a091a062 | 327 | /** CAN2 Sleep Mode */ |
igorsk | 0:1063a091a062 | 328 | #define CAN_WAKEFLAGES_CAN2WAKE ((uint32_t)(1<<2)) |
igorsk | 0:1063a091a062 | 329 | |
igorsk | 0:1063a091a062 | 330 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 331 | * Macro defines for Central transmit Status Register |
igorsk | 0:1063a091a062 | 332 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 333 | /** CAN Transmit 1 */ |
igorsk | 0:1063a091a062 | 334 | #define CAN_TSR_TS1 ((uint32_t)(1)) |
igorsk | 0:1063a091a062 | 335 | /** CAN Transmit 2 */ |
igorsk | 0:1063a091a062 | 336 | #define CAN_TSR_TS2 ((uint32_t)(1<<1)) |
igorsk | 0:1063a091a062 | 337 | /** CAN Transmit Buffer Status 1 */ |
igorsk | 0:1063a091a062 | 338 | #define CAN_TSR_TBS1 ((uint32_t)(1<<8)) |
igorsk | 0:1063a091a062 | 339 | /** CAN Transmit Buffer Status 2 */ |
igorsk | 0:1063a091a062 | 340 | #define CAN_TSR_TBS2 ((uint32_t)(1<<9)) |
igorsk | 0:1063a091a062 | 341 | /** CAN Transmission Complete Status 1 */ |
igorsk | 0:1063a091a062 | 342 | #define CAN_TSR_TCS1 ((uint32_t)(1<<16)) |
igorsk | 0:1063a091a062 | 343 | /** CAN Transmission Complete Status 2 */ |
igorsk | 0:1063a091a062 | 344 | #define CAN_TSR_TCS2 ((uint32_t)(1<<17)) |
igorsk | 0:1063a091a062 | 345 | |
igorsk | 0:1063a091a062 | 346 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 347 | * Macro defines for Central Receive Status Register |
igorsk | 0:1063a091a062 | 348 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 349 | /** CAN Receive Status 1 */ |
igorsk | 0:1063a091a062 | 350 | #define CAN_RSR_RS1 ((uint32_t)(1)) |
igorsk | 0:1063a091a062 | 351 | /** CAN Receive Status 1 */ |
igorsk | 0:1063a091a062 | 352 | #define CAN_RSR_RS2 ((uint32_t)(1<<1)) |
igorsk | 0:1063a091a062 | 353 | /** CAN Receive Buffer Status 1*/ |
igorsk | 0:1063a091a062 | 354 | #define CAN_RSR_RB1 ((uint32_t)(1<<8)) |
igorsk | 0:1063a091a062 | 355 | /** CAN Receive Buffer Status 2*/ |
igorsk | 0:1063a091a062 | 356 | #define CAN_RSR_RB2 ((uint32_t)(1<<9)) |
igorsk | 0:1063a091a062 | 357 | /** CAN Data Overrun Status 1 */ |
igorsk | 0:1063a091a062 | 358 | #define CAN_RSR_DOS1 ((uint32_t)(1<<16)) |
igorsk | 0:1063a091a062 | 359 | /** CAN Data Overrun Status 1 */ |
igorsk | 0:1063a091a062 | 360 | #define CAN_RSR_DOS2 ((uint32_t)(1<<17)) |
igorsk | 0:1063a091a062 | 361 | |
igorsk | 0:1063a091a062 | 362 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 363 | * Macro defines for Central Miscellaneous Status Register |
igorsk | 0:1063a091a062 | 364 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 365 | /** Same CAN Error Status in CAN1GSR */ |
igorsk | 0:1063a091a062 | 366 | #define CAN_MSR_E1 ((uint32_t)(1)) |
igorsk | 0:1063a091a062 | 367 | /** Same CAN Error Status in CAN2GSR */ |
igorsk | 0:1063a091a062 | 368 | #define CAN_MSR_E2 ((uint32_t)(1<<1)) |
igorsk | 0:1063a091a062 | 369 | /** Same CAN Bus Status in CAN1GSR */ |
igorsk | 0:1063a091a062 | 370 | #define CAN_MSR_BS1 ((uint32_t)(1<<8)) |
igorsk | 0:1063a091a062 | 371 | /** Same CAN Bus Status in CAN2GSR */ |
igorsk | 0:1063a091a062 | 372 | #define CAN_MSR_BS2 ((uint32_t)(1<<9)) |
igorsk | 0:1063a091a062 | 373 | |
igorsk | 0:1063a091a062 | 374 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 375 | * Macro defines for Acceptance Filter Mode Register |
igorsk | 0:1063a091a062 | 376 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 377 | /** CAN Acceptance Filter Off mode */ |
igorsk | 0:1063a091a062 | 378 | #define CAN_AFMR_AccOff ((uint32_t)(1)) |
igorsk | 0:1063a091a062 | 379 | /** CAN Acceptance File Bypass mode */ |
igorsk | 0:1063a091a062 | 380 | #define CAN_AFMR_AccBP ((uint32_t)(1<<1)) |
igorsk | 0:1063a091a062 | 381 | /** FullCAN Mode Enhancements */ |
igorsk | 0:1063a091a062 | 382 | #define CAN_AFMR_eFCAN ((uint32_t)(1<<2)) |
igorsk | 0:1063a091a062 | 383 | |
igorsk | 0:1063a091a062 | 384 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 385 | * Macro defines for Standard Frame Individual Start Address Register |
igorsk | 0:1063a091a062 | 386 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 387 | /** The start address of the table of individual Standard Identifier */ |
igorsk | 0:1063a091a062 | 388 | #define CAN_STT_sa(n) ((uint32_t)((n&1FF)<<2)) |
igorsk | 0:1063a091a062 | 389 | |
igorsk | 0:1063a091a062 | 390 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 391 | * Macro defines for Standard Frame Group Start Address Register |
igorsk | 0:1063a091a062 | 392 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 393 | /** The start address of the table of grouped Standard Identifier */ |
igorsk | 0:1063a091a062 | 394 | #define CAN_SFF_GRP_sa(n) ((uint32_t)((n&3FF)<<2)) |
igorsk | 0:1063a091a062 | 395 | |
igorsk | 0:1063a091a062 | 396 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 397 | * Macro defines for Extended Frame Start Address Register |
igorsk | 0:1063a091a062 | 398 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 399 | /** The start address of the table of individual Extended Identifier */ |
igorsk | 0:1063a091a062 | 400 | #define CAN_EFF_sa(n) ((uint32_t)((n&1FF)<<2)) |
igorsk | 0:1063a091a062 | 401 | |
igorsk | 0:1063a091a062 | 402 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 403 | * Macro defines for Extended Frame Group Start Address Register |
igorsk | 0:1063a091a062 | 404 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 405 | /** The start address of the table of grouped Extended Identifier */ |
igorsk | 0:1063a091a062 | 406 | #define CAN_Eff_GRP_sa(n) ((uint32_t)((n&3FF)<<2)) |
igorsk | 0:1063a091a062 | 407 | |
igorsk | 0:1063a091a062 | 408 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 409 | * Macro defines for End Of AF Table Register |
igorsk | 0:1063a091a062 | 410 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 411 | /** The End of Table of AF LookUp Table */ |
igorsk | 0:1063a091a062 | 412 | #define CAN_EndofTable(n) ((uint32_t)((n&3FF)<<2)) |
igorsk | 0:1063a091a062 | 413 | |
igorsk | 0:1063a091a062 | 414 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 415 | * Macro defines for LUT Error Address Register |
igorsk | 0:1063a091a062 | 416 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 417 | /** CAN Look-Up Table Error Address */ |
igorsk | 0:1063a091a062 | 418 | #define CAN_LUTerrAd(n) ((uint32_t)((n&1FF)<<2)) |
igorsk | 0:1063a091a062 | 419 | |
igorsk | 0:1063a091a062 | 420 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 421 | * Macro defines for LUT Error Register |
igorsk | 0:1063a091a062 | 422 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 423 | /** CAN Look-Up Table Error */ |
igorsk | 0:1063a091a062 | 424 | #define CAN_LUTerr ((uint32_t)(1)) |
igorsk | 0:1063a091a062 | 425 | |
igorsk | 0:1063a091a062 | 426 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 427 | * Macro defines for Global FullCANInterrupt Enable Register |
igorsk | 0:1063a091a062 | 428 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 429 | /** Global FullCANInterrupt Enable */ |
igorsk | 0:1063a091a062 | 430 | #define CAN_FCANIE ((uint32_t)(1)) |
igorsk | 0:1063a091a062 | 431 | |
igorsk | 0:1063a091a062 | 432 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 433 | * Macro defines for FullCAN Interrupt and Capture Register 0 |
igorsk | 0:1063a091a062 | 434 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 435 | /** FullCAN Interrupt and Capture (0-31)*/ |
igorsk | 0:1063a091a062 | 436 | #define CAN_FCANIC0_IntPnd(n) ((uint32_t)(1<<n)) |
igorsk | 0:1063a091a062 | 437 | |
igorsk | 0:1063a091a062 | 438 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 439 | * Macro defines for FullCAN Interrupt and Capture Register 1 |
igorsk | 0:1063a091a062 | 440 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 441 | /** FullCAN Interrupt and Capture (0-31)*/ |
igorsk | 0:1063a091a062 | 442 | #define CAN_FCANIC1_IntPnd(n) ((uint32_t)(1<<(n-32))) |
igorsk | 0:1063a091a062 | 443 | |
igorsk | 0:1063a091a062 | 444 | /** |
igorsk | 0:1063a091a062 | 445 | * @} |
igorsk | 0:1063a091a062 | 446 | */ |
igorsk | 0:1063a091a062 | 447 | |
igorsk | 0:1063a091a062 | 448 | /** |
igorsk | 0:1063a091a062 | 449 | * @} |
igorsk | 0:1063a091a062 | 450 | */ |
igorsk | 0:1063a091a062 | 451 | |
igorsk | 0:1063a091a062 | 452 | |
igorsk | 0:1063a091a062 | 453 | /* Public Types --------------------------------------------------------------- */ |
igorsk | 0:1063a091a062 | 454 | /** @defgroup CAN_Public_Types |
igorsk | 0:1063a091a062 | 455 | * @{ |
igorsk | 0:1063a091a062 | 456 | */ |
igorsk | 0:1063a091a062 | 457 | |
igorsk | 0:1063a091a062 | 458 | /** CAN configuration structure */ |
igorsk | 0:1063a091a062 | 459 | /*********************************************************************** |
igorsk | 0:1063a091a062 | 460 | * CAN device configuration commands (IOCTL commands and arguments) |
igorsk | 0:1063a091a062 | 461 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 462 | /** |
igorsk | 0:1063a091a062 | 463 | * @brief CAN ID format definition |
igorsk | 0:1063a091a062 | 464 | */ |
igorsk | 0:1063a091a062 | 465 | typedef enum { |
igorsk | 0:1063a091a062 | 466 | STD_ID_FORMAT = 0, /**< Use standard ID format (11 bit ID) */ |
igorsk | 0:1063a091a062 | 467 | EXT_ID_FORMAT = 1 /**< Use extended ID format (29 bit ID) */ |
igorsk | 0:1063a091a062 | 468 | } CAN_ID_FORMAT_Type; |
igorsk | 0:1063a091a062 | 469 | |
igorsk | 0:1063a091a062 | 470 | /** |
igorsk | 0:1063a091a062 | 471 | * @brief AFLUT Entry type definition |
igorsk | 0:1063a091a062 | 472 | */ |
igorsk | 0:1063a091a062 | 473 | typedef enum { |
igorsk | 0:1063a091a062 | 474 | FULLCAN_ENTRY = 0, |
igorsk | 0:1063a091a062 | 475 | EXPLICIT_STANDARD_ENTRY, |
igorsk | 0:1063a091a062 | 476 | GROUP_STANDARD_ENTRY, |
igorsk | 0:1063a091a062 | 477 | EXPLICIT_EXTEND_ENTRY, |
igorsk | 0:1063a091a062 | 478 | GROUP_EXTEND_ENTRY, |
igorsk | 0:1063a091a062 | 479 | } AFLUT_ENTRY_Type; |
igorsk | 0:1063a091a062 | 480 | |
igorsk | 0:1063a091a062 | 481 | /** |
igorsk | 0:1063a091a062 | 482 | * @brief Symbolic names for type of CAN message |
igorsk | 0:1063a091a062 | 483 | */ |
igorsk | 0:1063a091a062 | 484 | typedef enum { |
igorsk | 0:1063a091a062 | 485 | DATA_FRAME = 0, /**< Data frame */ |
igorsk | 0:1063a091a062 | 486 | REMOTE_FRAME = 1 /**< Remote frame */ |
igorsk | 0:1063a091a062 | 487 | } CAN_FRAME_Type; |
igorsk | 0:1063a091a062 | 488 | |
igorsk | 0:1063a091a062 | 489 | /** |
igorsk | 0:1063a091a062 | 490 | * @brief CAN Control status definition |
igorsk | 0:1063a091a062 | 491 | */ |
igorsk | 0:1063a091a062 | 492 | typedef enum { |
igorsk | 0:1063a091a062 | 493 | CANCTRL_GLOBAL_STS = 0, /**< CAN Global Status */ |
igorsk | 0:1063a091a062 | 494 | CANCTRL_INT_CAP, /**< CAN Interrupt and Capture */ |
igorsk | 0:1063a091a062 | 495 | CANCTRL_ERR_WRN, /**< CAN Error Warning Limit */ |
igorsk | 0:1063a091a062 | 496 | CANCTRL_STS /**< CAN Control Status */ |
igorsk | 0:1063a091a062 | 497 | } CAN_CTRL_STS_Type; |
igorsk | 0:1063a091a062 | 498 | |
igorsk | 0:1063a091a062 | 499 | /** |
igorsk | 0:1063a091a062 | 500 | * @brief Central CAN status type definition |
igorsk | 0:1063a091a062 | 501 | */ |
igorsk | 0:1063a091a062 | 502 | typedef enum { |
igorsk | 0:1063a091a062 | 503 | CANCR_TX_STS = 0, /**< Central CAN Tx Status */ |
igorsk | 0:1063a091a062 | 504 | CANCR_RX_STS, /**< Central CAN Rx Status */ |
igorsk | 0:1063a091a062 | 505 | CANCR_MS /**< Central CAN Miscellaneous Status */ |
igorsk | 0:1063a091a062 | 506 | } CAN_CR_STS_Type; |
igorsk | 0:1063a091a062 | 507 | |
igorsk | 0:1063a091a062 | 508 | /** |
igorsk | 0:1063a091a062 | 509 | * @brief CAN interrupt enable type definition |
igorsk | 0:1063a091a062 | 510 | */ |
igorsk | 0:1063a091a062 | 511 | typedef enum { |
igorsk | 0:1063a091a062 | 512 | CANINT_RIE = 0, /**< CAN Receiver Interrupt Enable */ |
igorsk | 0:1063a091a062 | 513 | CANINT_TIE1, /**< CAN Transmit Interrupt Enable */ |
igorsk | 0:1063a091a062 | 514 | CANINT_EIE, /**< CAN Error Warning Interrupt Enable */ |
igorsk | 0:1063a091a062 | 515 | CANINT_DOIE, /**< CAN Data Overrun Interrupt Enable */ |
igorsk | 0:1063a091a062 | 516 | CANINT_WUIE, /**< CAN Wake-Up Interrupt Enable */ |
igorsk | 0:1063a091a062 | 517 | CANINT_EPIE, /**< CAN Error Passive Interrupt Enable */ |
igorsk | 0:1063a091a062 | 518 | CANINT_ALIE, /**< CAN Arbitration Lost Interrupt Enable */ |
igorsk | 0:1063a091a062 | 519 | CANINT_BEIE, /**< CAN Bus Error Inter rupt Enable */ |
igorsk | 0:1063a091a062 | 520 | CANINT_IDIE, /**< CAN ID Ready Interrupt Enable */ |
igorsk | 0:1063a091a062 | 521 | CANINT_TIE2, /**< CAN Transmit Interrupt Enable for Buffer2 */ |
igorsk | 0:1063a091a062 | 522 | CANINT_TIE3, /**< CAN Transmit Interrupt Enable for Buffer3 */ |
igorsk | 0:1063a091a062 | 523 | CANINT_FCE /**< FullCAN Interrupt Enable */ |
igorsk | 0:1063a091a062 | 524 | } CAN_INT_EN_Type; |
igorsk | 0:1063a091a062 | 525 | |
igorsk | 0:1063a091a062 | 526 | /** |
igorsk | 0:1063a091a062 | 527 | * @brief Acceptance Filter Mode type definition |
igorsk | 0:1063a091a062 | 528 | */ |
igorsk | 0:1063a091a062 | 529 | typedef enum { |
igorsk | 0:1063a091a062 | 530 | CAN_Normal = 0, /**< Normal Mode */ |
igorsk | 0:1063a091a062 | 531 | CAN_AccOff, /**< Acceptance Filter Off Mode */ |
igorsk | 0:1063a091a062 | 532 | CAN_AccBP, /**< Acceptance Fileter Bypass Mode */ |
igorsk | 0:1063a091a062 | 533 | CAN_eFCAN /**< FullCAN Mode Enhancement */ |
igorsk | 0:1063a091a062 | 534 | } CAN_AFMODE_Type; |
igorsk | 0:1063a091a062 | 535 | |
igorsk | 0:1063a091a062 | 536 | /** |
igorsk | 0:1063a091a062 | 537 | * @brief CAN Mode Type definition |
igorsk | 0:1063a091a062 | 538 | */ |
igorsk | 0:1063a091a062 | 539 | typedef enum { |
igorsk | 0:1063a091a062 | 540 | CAN_OPERATING_MODE = 0, /**< Operating Mode */ |
igorsk | 0:1063a091a062 | 541 | CAN_RESET_MODE, /**< Reset Mode */ |
igorsk | 0:1063a091a062 | 542 | CAN_LISTENONLY_MODE, /**< Listen Only Mode */ |
igorsk | 0:1063a091a062 | 543 | CAN_SELFTEST_MODE, /**< Seft Test Mode */ |
igorsk | 0:1063a091a062 | 544 | CAN_TXPRIORITY_MODE, /**< Transmit Priority Mode */ |
igorsk | 0:1063a091a062 | 545 | CAN_SLEEP_MODE, /**< Sleep Mode */ |
igorsk | 0:1063a091a062 | 546 | CAN_RXPOLARITY_MODE, /**< Receive Polarity Mode */ |
igorsk | 0:1063a091a062 | 547 | CAN_TEST_MODE /**< Test Mode */ |
igorsk | 0:1063a091a062 | 548 | } CAN_MODE_Type; |
igorsk | 0:1063a091a062 | 549 | |
igorsk | 0:1063a091a062 | 550 | /** |
igorsk | 0:1063a091a062 | 551 | * @brief Error values that functions can return |
igorsk | 0:1063a091a062 | 552 | */ |
igorsk | 0:1063a091a062 | 553 | typedef enum { |
igorsk | 0:1063a091a062 | 554 | CAN_OK = 1, /**< No error */ |
igorsk | 0:1063a091a062 | 555 | CAN_OBJECTS_FULL_ERROR, /**< No more rx or tx objects available */ |
igorsk | 0:1063a091a062 | 556 | CAN_FULL_OBJ_NOT_RCV, /**< Full CAN object not received */ |
igorsk | 0:1063a091a062 | 557 | CAN_NO_RECEIVE_DATA, /**< No have receive data available */ |
igorsk | 0:1063a091a062 | 558 | CAN_AF_ENTRY_ERROR, /**< Entry load in AFLUT is unvalid */ |
igorsk | 0:1063a091a062 | 559 | CAN_CONFLICT_ID_ERROR, /**< Conflict ID occur */ |
igorsk | 0:1063a091a062 | 560 | CAN_ENTRY_NOT_EXIT_ERROR /**< Entry remove outo AFLUT is not exit */ |
igorsk | 0:1063a091a062 | 561 | } CAN_ERROR; |
igorsk | 0:1063a091a062 | 562 | |
igorsk | 0:1063a091a062 | 563 | /** |
igorsk | 0:1063a091a062 | 564 | * @brief Pin Configuration structure |
igorsk | 0:1063a091a062 | 565 | */ |
igorsk | 0:1063a091a062 | 566 | typedef struct { |
igorsk | 0:1063a091a062 | 567 | uint8_t RD; /**< Serial Inputs, from CAN transceivers, should be: |
igorsk | 0:1063a091a062 | 568 | ** For CAN1: |
igorsk | 0:1063a091a062 | 569 | - CAN_RD1_P0_0: RD pin is on P0.0 |
igorsk | 0:1063a091a062 | 570 | - CAN_RD1_P0_21 : RD pin is on P0.21 |
igorsk | 0:1063a091a062 | 571 | ** For CAN2: |
igorsk | 0:1063a091a062 | 572 | - CAN_RD2_P0_4: RD pin is on P0.4 |
igorsk | 0:1063a091a062 | 573 | - CAN_RD2_P2_7: RD pin is on P2.7 |
igorsk | 0:1063a091a062 | 574 | */ |
igorsk | 0:1063a091a062 | 575 | uint8_t TD; /**< Serial Outputs, To CAN transceivers, should be: |
igorsk | 0:1063a091a062 | 576 | ** For CAN1: |
igorsk | 0:1063a091a062 | 577 | - CAN_TD1_P0_1: TD pin is on P0.1 |
igorsk | 0:1063a091a062 | 578 | - CAN_TD1_P0_22: TD pin is on P0.22 |
igorsk | 0:1063a091a062 | 579 | ** For CAN2: |
igorsk | 0:1063a091a062 | 580 | - CAN_TD2_P0_5: TD pin is on P0.5 |
igorsk | 0:1063a091a062 | 581 | - CAN_TD2_P2_8: TD pin is on P2.8 |
igorsk | 0:1063a091a062 | 582 | */ |
igorsk | 0:1063a091a062 | 583 | } CAN_PinCFG_Type; |
igorsk | 0:1063a091a062 | 584 | |
igorsk | 0:1063a091a062 | 585 | /** |
igorsk | 0:1063a091a062 | 586 | * @brief CAN message object structure |
igorsk | 0:1063a091a062 | 587 | */ |
igorsk | 0:1063a091a062 | 588 | typedef struct { |
igorsk | 0:1063a091a062 | 589 | uint32_t id; /**< 29 bit identifier, it depend on "format" value |
igorsk | 0:1063a091a062 | 590 | - if format = STD_ID_FORMAT, id should be 11 bit identifier |
igorsk | 0:1063a091a062 | 591 | - if format = EXT_ID_FORMAT, id should be 29 bit identifier |
igorsk | 0:1063a091a062 | 592 | */ |
igorsk | 0:1063a091a062 | 593 | uint8_t dataA[4]; /**< Data field A */ |
igorsk | 0:1063a091a062 | 594 | uint8_t dataB[4]; /**< Data field B */ |
igorsk | 0:1063a091a062 | 595 | uint8_t len; /**< Length of data field in bytes, should be: |
igorsk | 0:1063a091a062 | 596 | - 0000b-0111b: 0-7 bytes |
igorsk | 0:1063a091a062 | 597 | - 1xxxb: 8 bytes |
igorsk | 0:1063a091a062 | 598 | */ |
igorsk | 0:1063a091a062 | 599 | uint8_t format; /**< Identifier Format, should be: |
igorsk | 0:1063a091a062 | 600 | - STD_ID_FORMAT: Standard ID - 11 bit format |
igorsk | 0:1063a091a062 | 601 | - EXT_ID_FORMAT: Extended ID - 29 bit format |
igorsk | 0:1063a091a062 | 602 | */ |
igorsk | 0:1063a091a062 | 603 | uint8_t type; /**< Remote Frame transmission, should be: |
igorsk | 0:1063a091a062 | 604 | - DATA_FRAME: the number of data bytes called out by the DLC |
igorsk | 0:1063a091a062 | 605 | field are send from the CANxTDA and CANxTDB registers |
igorsk | 0:1063a091a062 | 606 | - REMOTE_FRAME: Remote Frame is sent |
igorsk | 0:1063a091a062 | 607 | */ |
igorsk | 0:1063a091a062 | 608 | } CAN_MSG_Type; |
igorsk | 0:1063a091a062 | 609 | |
igorsk | 0:1063a091a062 | 610 | /** |
igorsk | 0:1063a091a062 | 611 | * @brief FullCAN Entry structure |
igorsk | 0:1063a091a062 | 612 | */ |
igorsk | 0:1063a091a062 | 613 | typedef struct { |
igorsk | 0:1063a091a062 | 614 | uint8_t controller; /**< CAN Controller, should be: |
igorsk | 0:1063a091a062 | 615 | - CAN1_CTRL: CAN1 Controller |
igorsk | 0:1063a091a062 | 616 | - CAN2_CTRL: CAN2 Controller |
igorsk | 0:1063a091a062 | 617 | */ |
igorsk | 0:1063a091a062 | 618 | uint8_t disable; /**< Disable bit, should be: |
igorsk | 0:1063a091a062 | 619 | - MSG_ENABLE: disable bit = 0 |
igorsk | 0:1063a091a062 | 620 | - MSG_DISABLE: disable bit = 1 |
igorsk | 0:1063a091a062 | 621 | */ |
igorsk | 0:1063a091a062 | 622 | uint16_t id_11; /**< Standard ID, should be 11-bit value */ |
igorsk | 0:1063a091a062 | 623 | } FullCAN_Entry; |
igorsk | 0:1063a091a062 | 624 | |
igorsk | 0:1063a091a062 | 625 | /** |
igorsk | 0:1063a091a062 | 626 | * @brief Standard ID Frame Format Entry structure |
igorsk | 0:1063a091a062 | 627 | */ |
igorsk | 0:1063a091a062 | 628 | typedef struct { |
igorsk | 0:1063a091a062 | 629 | uint8_t controller; /**< CAN Controller, should be: |
igorsk | 0:1063a091a062 | 630 | - CAN1_CTRL: CAN1 Controller |
igorsk | 0:1063a091a062 | 631 | - CAN2_CTRL: CAN2 Controller |
igorsk | 0:1063a091a062 | 632 | */ |
igorsk | 0:1063a091a062 | 633 | uint8_t disable; /**< Disable bit, should be: |
igorsk | 0:1063a091a062 | 634 | - MSG_ENABLE: disable bit = 0 |
igorsk | 0:1063a091a062 | 635 | - MSG_DISABLE: disable bit = 1 |
igorsk | 0:1063a091a062 | 636 | */ |
igorsk | 0:1063a091a062 | 637 | uint16_t id_11; /**< Standard ID, should be 11-bit value */ |
igorsk | 0:1063a091a062 | 638 | } SFF_Entry; |
igorsk | 0:1063a091a062 | 639 | |
igorsk | 0:1063a091a062 | 640 | /** |
igorsk | 0:1063a091a062 | 641 | * @brief Group of Standard ID Frame Format Entry structure |
igorsk | 0:1063a091a062 | 642 | */ |
igorsk | 0:1063a091a062 | 643 | typedef struct { |
igorsk | 0:1063a091a062 | 644 | uint8_t controller1; /**< First CAN Controller, should be: |
igorsk | 0:1063a091a062 | 645 | - CAN1_CTRL: CAN1 Controller |
igorsk | 0:1063a091a062 | 646 | - CAN2_CTRL: CAN2 Controller |
igorsk | 0:1063a091a062 | 647 | */ |
igorsk | 0:1063a091a062 | 648 | uint8_t disable1; /**< First Disable bit, should be: |
igorsk | 0:1063a091a062 | 649 | - MSG_ENABLE: disable bit = 0) |
igorsk | 0:1063a091a062 | 650 | - MSG_DISABLE: disable bit = 1 |
igorsk | 0:1063a091a062 | 651 | */ |
igorsk | 0:1063a091a062 | 652 | uint16_t lowerID; /**< ID lower bound, should be 11-bit value */ |
igorsk | 0:1063a091a062 | 653 | uint8_t controller2; /**< Second CAN Controller, should be: |
igorsk | 0:1063a091a062 | 654 | - CAN1_CTRL: CAN1 Controller |
igorsk | 0:1063a091a062 | 655 | - CAN2_CTRL: CAN2 Controller |
igorsk | 0:1063a091a062 | 656 | */ |
igorsk | 0:1063a091a062 | 657 | uint8_t disable2; /**< Second Disable bit, should be: |
igorsk | 0:1063a091a062 | 658 | - MSG_ENABLE: disable bit = 0 |
igorsk | 0:1063a091a062 | 659 | - MSG_DISABLE: disable bit = 1 |
igorsk | 0:1063a091a062 | 660 | */ |
igorsk | 0:1063a091a062 | 661 | uint16_t upperID; /**< ID upper bound, should be 11-bit value and |
igorsk | 0:1063a091a062 | 662 | equal or greater than lowerID |
igorsk | 0:1063a091a062 | 663 | */ |
igorsk | 0:1063a091a062 | 664 | } SFF_GPR_Entry; |
igorsk | 0:1063a091a062 | 665 | |
igorsk | 0:1063a091a062 | 666 | /** |
igorsk | 0:1063a091a062 | 667 | * @brief Extended ID Frame Format Entry structure |
igorsk | 0:1063a091a062 | 668 | */ |
igorsk | 0:1063a091a062 | 669 | typedef struct { |
igorsk | 0:1063a091a062 | 670 | uint8_t controller; /**< CAN Controller, should be: |
igorsk | 0:1063a091a062 | 671 | - CAN1_CTRL: CAN1 Controller |
igorsk | 0:1063a091a062 | 672 | - CAN2_CTRL: CAN2 Controller |
igorsk | 0:1063a091a062 | 673 | */ |
igorsk | 0:1063a091a062 | 674 | uint32_t ID_29; /**< Extend ID, shoud be 29-bit value */ |
igorsk | 0:1063a091a062 | 675 | } EFF_Entry; |
igorsk | 0:1063a091a062 | 676 | |
igorsk | 0:1063a091a062 | 677 | |
igorsk | 0:1063a091a062 | 678 | /** |
igorsk | 0:1063a091a062 | 679 | * @brief Group of Extended ID Frame Format Entry structure |
igorsk | 0:1063a091a062 | 680 | */ |
igorsk | 0:1063a091a062 | 681 | typedef struct { |
igorsk | 0:1063a091a062 | 682 | uint8_t controller1; /**< First CAN Controller, should be: |
igorsk | 0:1063a091a062 | 683 | - CAN1_CTRL: CAN1 Controller |
igorsk | 0:1063a091a062 | 684 | - CAN2_CTRL: CAN2 Controller |
igorsk | 0:1063a091a062 | 685 | */ |
igorsk | 0:1063a091a062 | 686 | uint8_t controller2; /**< Second Disable bit, should be: |
igorsk | 0:1063a091a062 | 687 | - MSG_ENABLE: disable bit = 0(default) |
igorsk | 0:1063a091a062 | 688 | - MSG_DISABLE: disable bit = 1 |
igorsk | 0:1063a091a062 | 689 | */ |
igorsk | 0:1063a091a062 | 690 | uint32_t lowerEID; /**< Extended ID lower bound, should be 29-bit value */ |
igorsk | 0:1063a091a062 | 691 | uint32_t upperEID; /**< Extended ID upper bound, should be 29-bit value */ |
igorsk | 0:1063a091a062 | 692 | } EFF_GPR_Entry; |
igorsk | 0:1063a091a062 | 693 | |
igorsk | 0:1063a091a062 | 694 | |
igorsk | 0:1063a091a062 | 695 | /** |
igorsk | 0:1063a091a062 | 696 | * @brief Acceptance Filter Section Table structure |
igorsk | 0:1063a091a062 | 697 | */ |
igorsk | 0:1063a091a062 | 698 | typedef struct { |
igorsk | 0:1063a091a062 | 699 | FullCAN_Entry* FullCAN_Sec; /**< The pointer point to FullCAN_Entry */ |
igorsk | 0:1063a091a062 | 700 | uint8_t FC_NumEntry; /**< FullCAN Entry Number */ |
igorsk | 0:1063a091a062 | 701 | SFF_Entry* SFF_Sec; /**< The pointer point to SFF_Entry */ |
igorsk | 0:1063a091a062 | 702 | uint8_t SFF_NumEntry; /**< Standard ID Entry Number */ |
igorsk | 0:1063a091a062 | 703 | SFF_GPR_Entry* SFF_GPR_Sec; /**< The pointer point to SFF_GPR_Entry */ |
igorsk | 0:1063a091a062 | 704 | uint8_t SFF_GPR_NumEntry; /**< Group Standard ID Entry Number */ |
igorsk | 0:1063a091a062 | 705 | EFF_Entry* EFF_Sec; /**< The pointer point to EFF_Entry */ |
igorsk | 0:1063a091a062 | 706 | uint8_t EFF_NumEntry; /**< Extended ID Entry Number */ |
igorsk | 0:1063a091a062 | 707 | EFF_GPR_Entry* EFF_GPR_Sec; /**< The pointer point to EFF_GPR_Entry */ |
igorsk | 0:1063a091a062 | 708 | uint8_t EFF_GPR_NumEntry; /**< Group Extended ID Entry Number */ |
igorsk | 0:1063a091a062 | 709 | } AF_SectionDef; |
igorsk | 0:1063a091a062 | 710 | |
igorsk | 0:1063a091a062 | 711 | /** |
igorsk | 0:1063a091a062 | 712 | * @brief CAN call-back function type definitions |
igorsk | 0:1063a091a062 | 713 | */ |
igorsk | 0:1063a091a062 | 714 | typedef void ( fnCANCbs_Type)(); |
igorsk | 0:1063a091a062 | 715 | |
igorsk | 0:1063a091a062 | 716 | |
igorsk | 0:1063a091a062 | 717 | /** |
igorsk | 0:1063a091a062 | 718 | * @} |
igorsk | 0:1063a091a062 | 719 | */ |
igorsk | 0:1063a091a062 | 720 | |
igorsk | 0:1063a091a062 | 721 | |
igorsk | 0:1063a091a062 | 722 | /* Public Macros -------------------------------------------------------------- */ |
igorsk | 0:1063a091a062 | 723 | /** @defgroup CAN_Public_Macros |
igorsk | 0:1063a091a062 | 724 | * @{ |
igorsk | 0:1063a091a062 | 725 | */ |
igorsk | 0:1063a091a062 | 726 | |
igorsk | 0:1063a091a062 | 727 | /** Macro to determine if it is valid CAN peripheral */ |
igorsk | 0:1063a091a062 | 728 | #define PARAM_CANx(x) ((((uint32_t*)x)==((uint32_t *)LPC_CAN1)) \ |
igorsk | 0:1063a091a062 | 729 | ||(((uint32_t*)x)==((uint32_t *)LPC_CAN2))) |
igorsk | 0:1063a091a062 | 730 | |
igorsk | 0:1063a091a062 | 731 | #define PARAM_CANAFx(x) (((uint32_t*)x)== ((uint32_t*)LPC_CANAF)) |
igorsk | 0:1063a091a062 | 732 | #define PARAM_CANAFRAMx(x) (((uint32_t*)x)== (uint32_t*)LPC_CANAF_RAM) |
igorsk | 0:1063a091a062 | 733 | #define PARAM_CANCRx(x) (((uint32_t*)x)==((uint32_t*)LPC_CANCR)) |
igorsk | 0:1063a091a062 | 734 | |
igorsk | 0:1063a091a062 | 735 | /** Macro to check Data to send valid */ |
igorsk | 0:1063a091a062 | 736 | #define PARAM_I2S_DATA(data) ((data <= 0xFFFFFFFF)) |
igorsk | 0:1063a091a062 | 737 | #define PRAM_I2S_FREQ(freq) ((freq>=16000)&&(freq <= 96000)) |
igorsk | 0:1063a091a062 | 738 | |
igorsk | 0:1063a091a062 | 739 | /** Macro to check Pin Selection value */ |
igorsk | 0:1063a091a062 | 740 | #define PARAM_RD1_PIN(n) ((n==CAN_RD1_P0_0)||(n==CAN_RD1_P0_21)) |
igorsk | 0:1063a091a062 | 741 | #define PARAM_TD1_PIN(n) ((n==CAN_TD1_P0_1)||(n==CAN_TD1_P0_22)) |
igorsk | 0:1063a091a062 | 742 | #define PARAM_RD2_PIN(n) ((n==CAN_RD2_P0_4)||(n==CAN_RD2_P2_7)) |
igorsk | 0:1063a091a062 | 743 | #define PARAM_TD2_PIN(n) ((n==CAN_TD2_P0_5)||(n==CAN_TD2_P2_8)) |
igorsk | 0:1063a091a062 | 744 | |
igorsk | 0:1063a091a062 | 745 | /** Macro to check Frame Identifier */ |
igorsk | 0:1063a091a062 | 746 | #define PARAM_ID_11(n) ((n>>11)==0) /*-- 11 bit --*/ |
igorsk | 0:1063a091a062 | 747 | #define PARAM_ID_29(n) ((n>>29)==0) /*-- 29 bit --*/ |
igorsk | 0:1063a091a062 | 748 | |
igorsk | 0:1063a091a062 | 749 | #define PARAM_DLC(n) ((n>>4)==0) /*-- 4 bit --*/ |
igorsk | 0:1063a091a062 | 750 | #define PARAM_ID_FORMAT(n) ((n==STD_ID_FORMAT)||(n==EXT_ID_FORMAT)) |
igorsk | 0:1063a091a062 | 751 | #define PARAM_GRP_ID(x, y) ((x<=y)) |
igorsk | 0:1063a091a062 | 752 | #define PARAM_FRAME_TYPE(n) ((n==DATA_FRAME)||(n==REMOTE_FRAME)) |
igorsk | 0:1063a091a062 | 753 | |
igorsk | 0:1063a091a062 | 754 | /** Macro to check Control/Central Status type parameter */ |
igorsk | 0:1063a091a062 | 755 | #define PARAM_CTRL_STS_TYPE(n) ((n==CANCTRL_GLOBAL_STS)||(n==CANCTRL_INT_CAP) \ |
igorsk | 0:1063a091a062 | 756 | ||(n==CANCTRL_ERR_WRN)||(n==CANCTRL_STS)) |
igorsk | 0:1063a091a062 | 757 | #define PARAM_CR_STS_TYPE(n) ((n==CANCR_TX_STS)||(n==CANCR_RX_STS) \ |
igorsk | 0:1063a091a062 | 758 | ||(n==CANCR_MS)) |
igorsk | 0:1063a091a062 | 759 | /** Macro to check AF Mode type parameter */ |
igorsk | 0:1063a091a062 | 760 | #define PARAM_AFMODE_TYPE(n) ((n==CAN_Normal)||(n==CAN_AccOff) \ |
igorsk | 0:1063a091a062 | 761 | ||(n==CAN_AccBP)||(n==CAN_eFCAN)) |
igorsk | 0:1063a091a062 | 762 | /** Macro to check Operation Mode */ |
igorsk | 0:1063a091a062 | 763 | #define PARAM_MODE_TYPE(n) ((n==CAN_OPERATING_MODE)||(n==CAN_RESET_MODE) \ |
igorsk | 0:1063a091a062 | 764 | ||(n==CAN_LISTENONLY_MODE)||(n==CAN_SELFTEST_MODE) \ |
igorsk | 0:1063a091a062 | 765 | ||(n==CAN_TXPRIORITY_MODE)||(n==CAN_SLEEP_MODE) \ |
igorsk | 0:1063a091a062 | 766 | ||(n==CAN_RXPOLARITY_MODE)||(n==CAN_TEST_MODE)) |
igorsk | 0:1063a091a062 | 767 | |
igorsk | 0:1063a091a062 | 768 | /** Macro define for struct AF_Section parameter */ |
igorsk | 0:1063a091a062 | 769 | #define CAN1_CTRL ((uint8_t)(0)) |
igorsk | 0:1063a091a062 | 770 | #define CAN2_CTRL ((uint8_t)(1)) |
igorsk | 0:1063a091a062 | 771 | #define PARAM_CTRL(n) ((n==CAN1_CTRL)|(n==CAN2_CTRL)) |
igorsk | 0:1063a091a062 | 772 | |
igorsk | 0:1063a091a062 | 773 | #define MSG_ENABLE ((uint8_t)(0)) |
igorsk | 0:1063a091a062 | 774 | #define MSG_DISABLE ((uint8_t)(1)) |
igorsk | 0:1063a091a062 | 775 | #define PARAM_MSG_DISABLE(n) ((n==MSG_ENABLE)|(n==MSG_DISABLE)) |
igorsk | 0:1063a091a062 | 776 | |
igorsk | 0:1063a091a062 | 777 | /**Macro to check Interrupt Type parameter */ |
igorsk | 0:1063a091a062 | 778 | #define PARAM_INT_EN_TYPE(n) ((n==CANINT_RIE)||(n==CANINT_TIE1) \ |
igorsk | 0:1063a091a062 | 779 | ||(n==CANINT_EIE)||(n==CANINT_DOIE) \ |
igorsk | 0:1063a091a062 | 780 | ||(n==CANINT_WUIE)||(n==CANINT_EPIE) \ |
igorsk | 0:1063a091a062 | 781 | ||(n==CANINT_ALIE)||(n==CANINT_BEIE) \ |
igorsk | 0:1063a091a062 | 782 | ||(n==CANINT_IDIE)||(n==CANINT_TIE2) \ |
igorsk | 0:1063a091a062 | 783 | ||(n==CANINT_TIE3)||(n==CANINT_FCE)) |
igorsk | 0:1063a091a062 | 784 | |
igorsk | 0:1063a091a062 | 785 | /** Macro to check AFLUT Entry type */ |
igorsk | 0:1063a091a062 | 786 | #define PARAM_AFLUT_ENTRY_TYPE(n) ((n==FULLCAN_ENTRY)||(n==EXPLICIT_STANDARD_ENTRY)\ |
igorsk | 0:1063a091a062 | 787 | ||(n==GROUP_STANDARD_ENTRY)||(n==EXPLICIT_EXTEND_ENTRY) \ |
igorsk | 0:1063a091a062 | 788 | ||(n==GROUP_EXTEND_ENTRY)) |
igorsk | 0:1063a091a062 | 789 | #define PARAM_POSITION(n) ((n<512)) |
igorsk | 0:1063a091a062 | 790 | |
igorsk | 0:1063a091a062 | 791 | /** CAN function pin selection defines */ |
igorsk | 0:1063a091a062 | 792 | #define CAN_RD1_P0_0 ((uint8_t)(0)) |
igorsk | 0:1063a091a062 | 793 | #define CAN_RD1_P0_21 ((uint8_t)(1)) |
igorsk | 0:1063a091a062 | 794 | #define CAN_TD1_P0_1 ((uint8_t)(0)) |
igorsk | 0:1063a091a062 | 795 | #define CAN_TD1_P0_22 ((uint8_t)(1)) |
igorsk | 0:1063a091a062 | 796 | |
igorsk | 0:1063a091a062 | 797 | #define CAN_RD2_P0_4 ((uint8_t)(0)) |
igorsk | 0:1063a091a062 | 798 | #define CAN_RD2_P2_7 ((uint8_t)(1)) |
igorsk | 0:1063a091a062 | 799 | #define CAN_TD2_P0_5 ((uint8_t)(0)) |
igorsk | 0:1063a091a062 | 800 | #define CAN_TD2_P2_8 ((uint8_t)(1)) |
igorsk | 0:1063a091a062 | 801 | |
igorsk | 0:1063a091a062 | 802 | |
igorsk | 0:1063a091a062 | 803 | /** |
igorsk | 0:1063a091a062 | 804 | * @} |
igorsk | 0:1063a091a062 | 805 | */ |
igorsk | 0:1063a091a062 | 806 | |
igorsk | 0:1063a091a062 | 807 | |
igorsk | 0:1063a091a062 | 808 | /* Public Functions ----------------------------------------------------------- */ |
igorsk | 0:1063a091a062 | 809 | /** @defgroup CAN_Public_Functions |
igorsk | 0:1063a091a062 | 810 | * @{ |
igorsk | 0:1063a091a062 | 811 | */ |
igorsk | 0:1063a091a062 | 812 | |
igorsk | 0:1063a091a062 | 813 | void CAN_Init(LPC_CAN_TypeDef *CANx, uint32_t baudrate); |
igorsk | 0:1063a091a062 | 814 | void CAN_DeInit(LPC_CAN_TypeDef *CANx); |
igorsk | 0:1063a091a062 | 815 | |
igorsk | 0:1063a091a062 | 816 | Status CAN_SendMsg(LPC_CAN_TypeDef *CANx, CAN_MSG_Type *CAN_Msg); |
igorsk | 0:1063a091a062 | 817 | Status CAN_ReceiveMsg(LPC_CAN_TypeDef *CANx, CAN_MSG_Type *CAN_Msg); |
igorsk | 0:1063a091a062 | 818 | CAN_ERROR FCAN_ReadObj(LPC_CANAF_TypeDef* CANAFx, CAN_MSG_Type *CAN_Msg); |
igorsk | 0:1063a091a062 | 819 | |
igorsk | 0:1063a091a062 | 820 | uint32_t CAN_GetCTRLStatus(LPC_CAN_TypeDef* CANx, CAN_CTRL_STS_Type arg); |
igorsk | 0:1063a091a062 | 821 | uint32_t CAN_GetCRStatus(LPC_CANCR_TypeDef* CANCRx, CAN_CR_STS_Type arg); |
igorsk | 0:1063a091a062 | 822 | void CAN_ModeConfig(LPC_CAN_TypeDef* CANx, CAN_MODE_Type mode, |
igorsk | 0:1063a091a062 | 823 | FunctionalState NewState); |
igorsk | 0:1063a091a062 | 824 | void CAN_SetBaudRate(LPC_CAN_TypeDef *CANx, uint32_t baudrate); |
igorsk | 0:1063a091a062 | 825 | |
igorsk | 0:1063a091a062 | 826 | void CAN_SetAFMode(LPC_CANAF_TypeDef* CANAFx, CAN_AFMODE_Type AFmode); |
igorsk | 0:1063a091a062 | 827 | CAN_ERROR CAN_SetupAFLUT(LPC_CANAF_TypeDef* CANAFx, AF_SectionDef* AFSection); |
igorsk | 0:1063a091a062 | 828 | CAN_ERROR CAN_LoadFullCANEntry(LPC_CAN_TypeDef* CANx, uint16_t ID); |
igorsk | 0:1063a091a062 | 829 | CAN_ERROR CAN_LoadExplicitEntry(LPC_CAN_TypeDef* CANx, uint32_t ID, |
igorsk | 0:1063a091a062 | 830 | CAN_ID_FORMAT_Type format); |
igorsk | 0:1063a091a062 | 831 | CAN_ERROR CAN_LoadGroupEntry(LPC_CAN_TypeDef* CANx, uint32_t lowerID, |
igorsk | 0:1063a091a062 | 832 | uint32_t upperID, CAN_ID_FORMAT_Type format); |
igorsk | 0:1063a091a062 | 833 | CAN_ERROR CAN_RemoveEntry(AFLUT_ENTRY_Type EntryType, uint16_t position); |
igorsk | 0:1063a091a062 | 834 | |
igorsk | 0:1063a091a062 | 835 | void CAN_SetupCBS(CAN_INT_EN_Type arg, fnCANCbs_Type* pnCANCbs); |
igorsk | 0:1063a091a062 | 836 | void CAN_IRQCmd(LPC_CAN_TypeDef* CANx, CAN_INT_EN_Type arg, |
igorsk | 0:1063a091a062 | 837 | FunctionalState NewState); |
igorsk | 0:1063a091a062 | 838 | void CAN_IntHandler(LPC_CAN_TypeDef* CANx); |
igorsk | 0:1063a091a062 | 839 | |
igorsk | 0:1063a091a062 | 840 | /** |
igorsk | 0:1063a091a062 | 841 | * @} |
igorsk | 0:1063a091a062 | 842 | */ |
igorsk | 0:1063a091a062 | 843 | |
igorsk | 0:1063a091a062 | 844 | |
igorsk | 0:1063a091a062 | 845 | #ifdef __cplusplus |
igorsk | 0:1063a091a062 | 846 | } |
igorsk | 0:1063a091a062 | 847 | #endif |
igorsk | 0:1063a091a062 | 848 | |
igorsk | 0:1063a091a062 | 849 | #endif /* LPC17XX_CAN_H_ */ |
igorsk | 0:1063a091a062 | 850 | |
igorsk | 0:1063a091a062 | 851 | /** |
igorsk | 0:1063a091a062 | 852 | * @} |
igorsk | 0:1063a091a062 | 853 | */ |
igorsk | 0:1063a091a062 | 854 | |
igorsk | 0:1063a091a062 | 855 | /* --------------------------------- End Of File ------------------------------ */ |