| 1 | /*-----------------------------------------------------------------------------
|
|---|
| 2 | bcan.h -- Interface to Basic CAN Controller Chip PCA82C200
|
|---|
| 3 |
|
|---|
| 4 | Copyright (c) 1994 JANZ Computer AG
|
|---|
| 5 | All Rights Reserved
|
|---|
| 6 |
|
|---|
| 7 | Created 94/10/11 by Soenke Hansen
|
|---|
| 8 | Version 1.18 of 00/03/30
|
|---|
| 9 |
|
|---|
| 10 | Prototypes for functions in bcan.c.
|
|---|
| 11 | Macros for descriptor word, CAN identifiers, RTR bits, and data length codes.
|
|---|
| 12 | Defintions of register addresses and values for the Basic CAN controller.
|
|---|
| 13 |
|
|---|
| 14 | -----------------------------------------------------------------------------*/
|
|---|
| 15 |
|
|---|
| 16 | #ifndef bcan_DEFINED
|
|---|
| 17 | #define bcan_DEFINED
|
|---|
| 18 |
|
|---|
| 19 | #ifdef __cplusplus
|
|---|
| 20 | extern "C" {
|
|---|
| 21 | #endif
|
|---|
| 22 |
|
|---|
| 23 | #include "defs.h"
|
|---|
| 24 | #include "msg.h"
|
|---|
| 25 |
|
|---|
| 26 | /*-------- COBs CAN Communication Objects ----------------------------------*/
|
|---|
| 27 |
|
|---|
| 28 | /* COBs (CAN Communication Objects) consists of the following data:
|
|---|
| 29 | WORD_t desc;
|
|---|
| 30 | BYTE_t data[8];
|
|---|
| 31 | The format of the descriptor word follows that of the PCA82C200 controller:
|
|---|
| 32 | desc >> 5 is the 11-bit identifier
|
|---|
| 33 | desc & 0x0010 is set iff the RTR bit is set
|
|---|
| 34 | desc & 0x000f is the data length code DLC
|
|---|
| 35 | There are at most 8 data bytes in data[] (DLC <= 8).
|
|---|
| 36 | */
|
|---|
| 37 |
|
|---|
| 38 | /* RTR bit in COB descriptor */
|
|---|
| 39 | #define COBD_RTR 0x0010
|
|---|
| 40 |
|
|---|
| 41 | /* Get RTR bit from COB descriptor */
|
|---|
| 42 | #define cobd_get_rtr(desc) ((desc) & COBD_RTR)
|
|---|
| 43 |
|
|---|
| 44 | /* Get data length code from COB descriptor */
|
|---|
| 45 | #define cobd_get_dlc(desc) ((desc) & 0x000f)
|
|---|
| 46 |
|
|---|
| 47 | /* Get real data length */
|
|---|
| 48 | #define cobd_get_len(desc) (((desc) & COBD_RTR) ? 0 : \
|
|---|
| 49 | (((desc) & 0x08) ? 8 : (desc) & 0x07))
|
|---|
| 50 |
|
|---|
| 51 | /* Get id and RTR bit from COB descriptor */
|
|---|
| 52 | #define cobd_get_id_rtr(desc) ((desc) & 0xfff0)
|
|---|
| 53 |
|
|---|
| 54 | /* Get RTR bit and data length code from COB descriptor */
|
|---|
| 55 | #define cobd_get_rtr_dlc(desc) ((desc) & 0x001f)
|
|---|
| 56 |
|
|---|
| 57 | /* Get identifier from COB descriptor */
|
|---|
| 58 | #define cobd_get_id(desc) ((desc) >> 5) /* numerical value of id */
|
|---|
| 59 |
|
|---|
| 60 | /* Shift identifier for oring into COB descriptor */
|
|---|
| 61 | #define cobd_id_to_desc(id) ((id) << 5)
|
|---|
| 62 |
|
|---|
| 63 | /* Set COB descriptor from Id, and data length code, with or without RTR */
|
|---|
| 64 | #define cobd_set(id, dlc) (((id) << 5) | (0x000f & (WORD_t)(dlc)))
|
|---|
| 65 | #define cobd_setrtr(id, dlc) (((id) << 5) | COBD_RTR | (0x000f & (WORD_t)(dlc)))
|
|---|
| 66 |
|
|---|
| 67 |
|
|---|
| 68 | /*-------- Definitions of registers ----------------------------------------*/
|
|---|
| 69 |
|
|---|
| 70 | /*
|
|---|
| 71 | * 82C200 and SJA1000 in BasicCAN Mode
|
|---|
| 72 | */
|
|---|
| 73 |
|
|---|
| 74 | /* PCA82C200 Address Allocation */
|
|---|
| 75 | #define BCAN_CR 0 /* control register */
|
|---|
| 76 | #define BCAN_CMR 1 /* command register */
|
|---|
| 77 | #define BCAN_SR 2 /* status register */
|
|---|
| 78 | #define BCAN_IR 3 /* interrupt register */
|
|---|
| 79 | #define BCAN_AC 4 /* acceptance code register */
|
|---|
| 80 | #define BCAN_AM 5 /* acceptance mask register */
|
|---|
| 81 | #define BCAN_BT0 6 /* bus timing register 0 */
|
|---|
| 82 | #define BCAN_BT1 7 /* bus timing register 1 */
|
|---|
| 83 | #define BCAN_OCR 8 /* output control register */
|
|---|
| 84 | #define BCAN_TDESC1 10 /* first descriptor transmit buffer */
|
|---|
| 85 | #define BCAN_TDESC2 11 /* second descriptor transmit buffer */
|
|---|
| 86 | #define BCAN_TDATA 12 /* start data transmit buffer */
|
|---|
| 87 | #define BCAN_RDESC1 20 /* first descriptor receive buffer */
|
|---|
| 88 | #define BCAN_RDESC2 21 /* second descriptor receive buffer */
|
|---|
| 89 | #define BCAN_RDATA 22 /* start data receive buffer */
|
|---|
| 90 | #define BCAN_CDR 31 /* clock divider */
|
|---|
| 91 |
|
|---|
| 92 |
|
|---|
| 93 | /* Control Register Bits */
|
|---|
| 94 | #define BCAN_CR_OIE 0x10 /* Overrun Interrupt Enable */
|
|---|
| 95 | #define BCAN_CR_EIE 0x08 /* Error Interrupt Enable */
|
|---|
| 96 | #define BCAN_CR_TIE 0x04 /* Transmit Interrupt Enable */
|
|---|
| 97 | #define BCAN_CR_RIE 0x02 /* Receive Interrupt Enable */
|
|---|
| 98 | #define BCAN_CR_RR 0x01 /* Reset Request */
|
|---|
| 99 |
|
|---|
| 100 | /* Command Register Bits */
|
|---|
| 101 | #define BCAN_CMR_GTS 0x10 /* Goto Sleep */
|
|---|
| 102 | #define BCAN_CMR_COS 0x08 /* Clear Overrun Status */
|
|---|
| 103 | #define BCAN_CMR_RRB 0x04 /* Release Receive Buffer */
|
|---|
| 104 | #define BCAN_CMR_AT 0x02 /* Abort Transmission */
|
|---|
| 105 | #define BCAN_CMR_TR 0x01 /* Transmission Request */
|
|---|
| 106 |
|
|---|
| 107 | /* Status Register Bits */
|
|---|
| 108 | #define BCAN_SR_BS 0x80 /* Bus Status */
|
|---|
| 109 | #define BCAN_SR_ES 0x40 /* Error Status */
|
|---|
| 110 | #define BCAN_SR_TS 0x20 /* Transmit Status */
|
|---|
| 111 | #define BCAN_SR_RS 0x10 /* Receive Status */
|
|---|
| 112 | #define BCAN_SR_TCS 0x08 /* Transmission Complete Status */
|
|---|
| 113 | #define BCAN_SR_TBS 0x04 /* Transmit Buffer Status */
|
|---|
| 114 | #define BCAN_SR_DO 0x02 /* Data Overrun */
|
|---|
| 115 | #define BCAN_SR_RBS 0x01 /* Receive Buffer Status */
|
|---|
| 116 |
|
|---|
| 117 | /* Interrupt Register Bits */
|
|---|
| 118 | #define BCAN_IR_WUI 0x10 /* Wake-Up Interrupt */
|
|---|
| 119 | #define BCAN_IR_OI 0x08 /* Overrun Interrupt */
|
|---|
| 120 | #define BCAN_IR_EI 0x04 /* Error Interrupt */
|
|---|
| 121 | #define BCAN_IR_TI 0x02 /* Transmit Interrupt */
|
|---|
| 122 | #define BCAN_IR_RI 0x01 /* Receive Interrupt */
|
|---|
| 123 |
|
|---|
| 124 |
|
|---|
| 125 | /*
|
|---|
| 126 | * JSA1000 in PeliCAN mode
|
|---|
| 127 | */
|
|---|
| 128 |
|
|---|
| 129 | /* PeliCAN mode address allocation */
|
|---|
| 130 | #define PCAN_MODR 0 /* Mode register (rw) */
|
|---|
| 131 | #define PCAN_CMR 1 /* Command register (wo) */
|
|---|
| 132 | #define PCAN_SR 2 /* Status register (ro) */
|
|---|
| 133 | #define PCAN_IR 3 /* Interrupt register (ro) */
|
|---|
| 134 | #define PCAN_IER 4 /* Interrupt enable register (rw) */
|
|---|
| 135 | #define PCAN_BTR0 6 /* Bus timing register 0 (ro, rw) */
|
|---|
| 136 | #define PCAN_BTR1 7 /* Bus timing register 1 (ro, rw) */
|
|---|
| 137 | #define PCAN_OCR 8 /* Output control register 1 (ro, rw) */
|
|---|
| 138 | #define PCAN_TESTR 9 /* Test register */
|
|---|
| 139 | #define PCAN_ALCR 11 /* Arbitration lost capture reg (ro) */
|
|---|
| 140 | #define PCAN_ECCR 12 /* Error code capture register (ro) */
|
|---|
| 141 | #define PCAN_EWLR 13 /* Error warning limit register (ro, rw) */
|
|---|
| 142 | #define PCAN_RXERR 14 /* Rx error counter register (ro, rw) */
|
|---|
| 143 | #define PCAN_TXERR 15 /* Tx error counter register (ro, rw) */
|
|---|
| 144 | #define PCAN_ACR0 16 /* acceptance code register 0 (-, rw) */
|
|---|
| 145 | #define PCAN_ACR1 17 /* acceptance code register 1 (-, rw) */
|
|---|
| 146 | #define PCAN_ACR2 18 /* acceptance code register 2 (-, rw) */
|
|---|
| 147 | #define PCAN_ACR3 19 /* acceptance code register 3 (-, rw) */
|
|---|
| 148 | #define PCAN_AMR0 20 /* acceptance mask register 0 (-, rw) */
|
|---|
| 149 | #define PCAN_AMR1 21 /* acceptance mask register 1 (-, rw) */
|
|---|
| 150 | #define PCAN_AMR2 22 /* acceptance mask register 2 (-, rw) */
|
|---|
| 151 | #define PCAN_AMR3 23 /* acceptance mask register 3 (-, rw) */
|
|---|
| 152 | #define PCAN_RXFI 16 /* Rx Frame info SFF, EFF (ro, -) */
|
|---|
| 153 | #define PCAN_RXID1 17 /* Rx Identifier 1 SFF, EFF (ro, -) */
|
|---|
| 154 | #define PCAN_RXID2 18 /* Rx Identifier 2 SFF, EFF (ro, -) */
|
|---|
| 155 | #define PCAN_RXID3 19 /* Rx Identifier 3 EFF (ro, -) */
|
|---|
| 156 | #define PCAN_RXID4 20 /* Rx Identifier 4 EFF (ro, -) */
|
|---|
| 157 | #define PCAN_RXSFFD 19 /* Rx standard frame data (ro, -) */
|
|---|
| 158 | #define PCAN_RXEFFD 21 /* Rx extended frame data (ro, -) */
|
|---|
| 159 | #define PCAN_TXFI 16 /* Tx Frame info SFF, EFF (wo, -) */
|
|---|
| 160 | #define PCAN_TXID1 17 /* Tx Identifier 1 SFF, EFF (wo, -) */
|
|---|
| 161 | #define PCAN_TXID2 18 /* Tx Identifier 2 SFF, EFF (wo, -) */
|
|---|
| 162 | #define PCAN_TXID3 19 /* Tx Identifier 3 EFF (wo, -) */
|
|---|
| 163 | #define PCAN_TXID4 20 /* Tx Identifier 4 EFF (wo, -) */
|
|---|
| 164 | #define PCAN_TXSFFD 19 /* Tx standard frame data (wo, -) */
|
|---|
| 165 | #define PCAN_TXEFFD 21 /* Tx extended frame data (wo, -) */
|
|---|
| 166 | #define PCAN_RXMCR 29 /* Rx message counter register (ro) */
|
|---|
| 167 | #define PCAN_RXBSAR 30 /* Rx buffer start address register (ro, rw) */
|
|---|
| 168 | #define PCAN_CDR 31 /* Clock divider register ('rw', rw)*/
|
|---|
| 169 |
|
|---|
| 170 | #define PCAN_RXFI_RAM 96 /* RAM mirror of RXFI */
|
|---|
| 171 | #define PCAN_TXFI_RAM 96 /* RAM mirror of TXFI */
|
|---|
| 172 | #define PCAN_TXID1_RAM 97 /* RAM mirror Tx Identifier 1 SFF, EFF */
|
|---|
| 173 | #define PCAN_TXID2_RAM 98 /* RAM mirror Tx Identifier 2 SFF, EFF */
|
|---|
| 174 | #define PCAN_TXID3_RAM 99 /* RAM mirror Tx Identifier 3 EFF */
|
|---|
| 175 | #define PCAN_TXID4_RAM 100 /* RAM mirror Tx Identifier 4 EFF */
|
|---|
| 176 | #define PCAN_TXSFFD_RAM 99 /* RAM mirror Tx standard frame data */
|
|---|
| 177 | #define PCAN_TXEFFD_RAM 101 /* RAM mirror Tx extended frame data */
|
|---|
| 178 |
|
|---|
| 179 |
|
|---|
| 180 | /* Mode Register Bits */
|
|---|
| 181 | #define PCAN_MODR_SM (1<<4) /* Sleep mode */
|
|---|
| 182 | #define PCAN_MODR_AFM (1<<3) /* Acceptance filter mode */
|
|---|
| 183 | #define PCAN_MODR_STM (1<<2) /* Self test mode */
|
|---|
| 184 | #define PCAN_MODR_LOM (1<<1) /* Listen only mode */
|
|---|
| 185 | #define PCAN_MODR_RM (1<<0) /* Reset mode */
|
|---|
| 186 |
|
|---|
| 187 | /* Command Register Bits */
|
|---|
| 188 | #define PCAN_CMR_SRR (1<<4) /* Self reception request */
|
|---|
| 189 | #define PCAN_CMR_CDO (1<<3) /* Clear data overrun */
|
|---|
| 190 | #define PCAN_CMR_RRB (1<<2) /* Release receive buffer */
|
|---|
| 191 | #define PCAN_CMR_AT (1<<1) /* Abort transmission */
|
|---|
| 192 | #define PCAN_CMR_TR (1<<0) /* Transmission request */
|
|---|
| 193 |
|
|---|
| 194 | /* Status Register Bits */
|
|---|
| 195 | #define PCAN_SR_BS (1<<7) /* Bus status */
|
|---|
| 196 | #define PCAN_SR_ES (1<<6) /* Error status */
|
|---|
| 197 | #define PCAN_SR_TS (1<<5) /* Transmit status */
|
|---|
| 198 | #define PCAN_SR_RS (1<<4) /* Receive status */
|
|---|
| 199 | #define PCAN_SR_TCS (1<<3) /* Transmission complete status */
|
|---|
| 200 | #define PCAN_SR_TBS (1<<2) /* Transmit buffer status */
|
|---|
| 201 | #define PCAN_SR_DOS (1<<1) /* Data overrun status */
|
|---|
| 202 | #define PCAN_SR_RBS (1<<0) /* Receive buffer status */
|
|---|
| 203 |
|
|---|
| 204 | /* Interrupt Register Bits */
|
|---|
| 205 | #define PCAN_IR_BEI (1<<7) /* Bus-eror interrupt */
|
|---|
| 206 | #define PCAN_IR_ALI (1<<6) /* Arbitration lost interrupt */
|
|---|
| 207 | #define PCAN_IR_EPI (1<<5) /* Error-passive interrupt */
|
|---|
| 208 | #define PCAN_IR_WUI (1<<4) /* Wake-up interrupt */
|
|---|
| 209 | #define PCAN_IR_DOI (1<<3) /* Data-overrun interrupt */
|
|---|
| 210 | #define PCAN_IR_EI (1<<2) /* Error interrupt */
|
|---|
| 211 | #define PCAN_IR_TI (1<<1) /* Transmit interrupt */
|
|---|
| 212 | #define PCAN_IR_RI (1<<0) /* Receive interrupt */
|
|---|
| 213 |
|
|---|
| 214 | /* Interrupt enable register bits */
|
|---|
| 215 | #define PCAN_IER_BEIE (1<<7) /* Bus-eror interrupt enable */
|
|---|
| 216 | #define PCAN_IER_ALIE (1<<6) /* Arbitration lost interrupt enable */
|
|---|
| 217 | #define PCAN_IER_EPIE (1<<5) /* Error-passive interrupt enable */
|
|---|
| 218 | #define PCAN_IER_WUIE (1<<4) /* Wake-up interrupt enable */
|
|---|
| 219 | #define PCAN_IER_DOIE (1<<3) /* Data-overrun interrupt enable */
|
|---|
| 220 | #define PCAN_IER_EIE (1<<2) /* Error warning interrupt enable */
|
|---|
| 221 | #define PCAN_IER_TIE (1<<1) /* Transmit interrupt enable */
|
|---|
| 222 | #define PCAN_IER_RIE (1<<0) /* Receive interrupt enable */
|
|---|
| 223 |
|
|---|
| 224 | /* Clock divider register bits */
|
|---|
| 225 | #define PCAN_CDR_PCAN (1<<7) /* Enable PCAN mode */
|
|---|
| 226 | #define PCAN_CDR_CBP (1<<6) /* Enable Rx input comparator bypass */
|
|---|
| 227 | #define PCAN_CDR_RXINTEN (1<<5) /* Enable RXINT output at TX1 */
|
|---|
| 228 | #define PCAN_CDR_CLKOFF (1<<3) /* Disable clock output */
|
|---|
| 229 |
|
|---|
| 230 | /* Bit definitions for Rx/Tx Frame info */
|
|---|
| 231 | #define PCAN_FINFO_FF (1<<7) /* Frame format bit */
|
|---|
| 232 | #define PCAN_FINFO_EFF (1<<7) /* Extended frame indication */
|
|---|
| 233 | #define PCAN_FINFO_RTR (1<<6) /* RTR frame bit */
|
|---|
| 234 | #define PCAN_FINFO_DLC_MASK (0x0f) /* Data length code mask */
|
|---|
| 235 |
|
|---|
| 236 |
|
|---|
| 237 |
|
|---|
| 238 | /*
|
|---|
| 239 | * BasicCAN, PeliCAN common definitions.
|
|---|
| 240 | */
|
|---|
| 241 |
|
|---|
| 242 | /* Values of acceptance code/mask registers */
|
|---|
| 243 | #define ACM_ALL word_from_bytes(0x00,0xff) /* accept all ids */
|
|---|
| 244 |
|
|---|
| 245 | /* Values of output control register */
|
|---|
| 246 | #define OCR_PUSHPULL 0xfa /* push/pull */
|
|---|
| 247 |
|
|---|
| 248 | /* Admissable bus timing values (BTR1=msb, BTR0=lsb) */
|
|---|
| 249 | #ifdef OSC_16MHZ /* if using a 16 MHz oscillator */
|
|---|
| 250 | #define BTR_1MB 0x2300 /* 1 MBaud */
|
|---|
| 251 | #if 0
|
|---|
| 252 | #define BTR_1MB 0x1400 /* 1 MBaud */ /* The better value */
|
|---|
| 253 | #endif
|
|---|
| 254 | #define BTR_800KB 0x2500 /* 800 KBaud */
|
|---|
| 255 | #define BTR_500KB 0x1c00 /* 500 KBaud */
|
|---|
| 256 | #define BTR_250KB 0x1c01 /* 250 KBaud */
|
|---|
| 257 | #define BTR_125KB 0x1c03 /* 125 KBaud */
|
|---|
| 258 | #define BTR_100KB 0x34c7 /* 100 KBaud */
|
|---|
| 259 | #define BTR_62_5KB 0xbac7 /* 62.5 KBaud */
|
|---|
| 260 | #define BTR_50KB 0x34cf /* 50 KBaud */
|
|---|
| 261 | #define BTR_20KB 0x7fcf /* 20 KBaud */
|
|---|
| 262 | #define BTR_10KB 0x7fdf /* 10 KBaud */
|
|---|
| 263 | #endif
|
|---|
| 264 |
|
|---|
| 265 | /* Admissable values in clock divider register */
|
|---|
| 266 | #ifdef OSC_16MHZ /* if using a 16 MHz oscillator */
|
|---|
| 267 | #define CDR_16MHZ 0x07 /* 16 MHz output */
|
|---|
| 268 | #define CDR_8MHZ 0x00 /* 8 MHz output (division by 2) */
|
|---|
| 269 | #define CDR_4MHZ 0x01 /* 4 MHz output (division by 4) */
|
|---|
| 270 | #define CDR_2MHZ 0x03 /* 2 MHz output (division by 8) */
|
|---|
| 271 | #endif
|
|---|
| 272 |
|
|---|
| 273 | /*-------- Gloal variables in bcan.c ---------------------------------------*/
|
|---|
| 274 |
|
|---|
| 275 | /* Indicates that we are using SJA1000 in pelican mode */
|
|---|
| 276 | extern short pcan_mode;
|
|---|
| 277 |
|
|---|
| 278 | /* ----------------------- BulkBuffer-Stuff --------------------------*/
|
|---|
| 279 | /* must be greater than length of biggest message type!!! */
|
|---|
| 280 | #define BULK_LEFT_FREE 14
|
|---|
| 281 |
|
|---|
| 282 | #define DEFAULT_MAX_BULK_BUF_BYTE_COUNT MSGLEN
|
|---|
| 283 | /* we need a minimum size of bulk buffer to generate messages */
|
|---|
| 284 | /* of a certain format (not bounde, but allocated buffer!) */
|
|---|
| 285 | /* to satisfy the message-handling inside the asm isr */
|
|---|
| 286 | #define DEFAULT_MIN_BULK_BUF_BYTE_COUNT 20
|
|---|
| 287 | #define DEFAULT_BULK_PREALLOC_COUNT 20
|
|---|
| 288 |
|
|---|
| 289 | /* Timer value for elapsed (e.g.) ms to determine */
|
|---|
| 290 | /* if it is time to send current BulkBuffer. Will */
|
|---|
| 291 | /* be maintained in timer.c */
|
|---|
| 292 | extern LWORD_t bulkBufTim;
|
|---|
| 293 |
|
|---|
| 294 | void configBulkBuffer(unsigned short, unsigned char, unsigned char);
|
|---|
| 295 |
|
|---|
| 296 | /* ----------------------- SniffBuffer-Stuff --------------------------*/
|
|---|
| 297 | /* must be greater than length of biggest message type!!! */
|
|---|
| 298 | #define SNIFF_LEFT_FREE 26
|
|---|
| 299 |
|
|---|
| 300 | #define DEFAULT_MAX_SNIFF_BUF_BYTE_COUNT MSGLEN
|
|---|
| 301 | /* we need a minimum size of sniff buffer to generate messages */
|
|---|
| 302 | /* of a certain format (not bounde, but allocated buffer!) */
|
|---|
| 303 | /* to satisfy the message-handling inside the asm isr */
|
|---|
| 304 | #define DEFAULT_MIN_SNIFF_BUF_BYTE_COUNT 20
|
|---|
| 305 | #define DEFAULT_SNIFF_PREALLOC_COUNT 20
|
|---|
| 306 |
|
|---|
| 307 | /* Timer value for elapsed (e.g.) ms to determine */
|
|---|
| 308 | /* if it is time to send current SniffBuffer. Will */
|
|---|
| 309 | /* be maintained in timer.c */
|
|---|
| 310 | extern LWORD_t sniffBufTim;
|
|---|
| 311 |
|
|---|
| 312 | void configSniffBuffer(unsigned short, unsigned char, unsigned char);
|
|---|
| 313 | void configSniffBufferEcho(unsigned short);
|
|---|
| 314 | /* valid values for echo2sniff, configured by configSniffBufferEcho: */
|
|---|
| 315 | #define SNIFF_ECHO_FROM_CANLOOK (1 << 0)
|
|---|
| 316 | #define SNIFF_ECHO_FROM_PLAINQ (1 << 1)
|
|---|
| 317 | #define SNIFF_ECHO_FROM_FASTQ (1 << 2)
|
|---|
| 318 | #define SNIFF_RX_FROM_CAN (1 << 3)
|
|---|
| 319 |
|
|---|
| 320 |
|
|---|
| 321 | /* message-commands inside sniff-message */
|
|---|
| 322 | #define SNIFF_MS_ECHO_FROM_PLAIN_STD 3
|
|---|
| 323 | #define SNIFF_MS_ECHO_FROM_PLAIN_XTD 4 /* not yet used */
|
|---|
| 324 | #define SNIFF_MS_ECHO_FROM_FAST_STD 5
|
|---|
| 325 | #define SNIFF_MS_ECHO_FROM_FAST_XTD 6
|
|---|
| 326 | #define SNIFF_MS_ECHO_FROM_CANLOOK_STD 7
|
|---|
| 327 | #define SNIFF_MS_ECHO_FROM_CANLOOK_XTD 8
|
|---|
| 328 | #define SNIFF_MS_CAN_RX_STD 9
|
|---|
| 329 | #define SNIFF_MS_CAN_RX_XTD 10
|
|---|
| 330 | #define SNIFF_MS_MSG_LOST 0x80
|
|---|
| 331 | #define SNIFF_MS_UNKNOWN 0xff
|
|---|
| 332 |
|
|---|
| 333 |
|
|---|
| 334 | /* -----------------------Busload-Statistic-Stuff --------------------------*/
|
|---|
| 335 | #define BUS_LOAD_STAT_SEND_TO_HOST (1 << 0)
|
|---|
| 336 | #define BUS_LOAD_STAT_INTEGR_TIME_ELAPSED (1 << 1)
|
|---|
| 337 | #define BUS_LOAD_STAT_ENABLED (1 << 7)
|
|---|
| 338 |
|
|---|
| 339 | #define BUS_LOAD_REQUEST_ALL 0
|
|---|
| 340 | #define BUS_LOAD_REQUEST_STD 1
|
|---|
| 341 | #define BUS_LOAD_REQUEST_XTD 2
|
|---|
| 342 | #define BUS_LOAD_REQUEST_RX 3
|
|---|
| 343 | #define BUS_LOAD_REQUEST_TX 4
|
|---|
| 344 |
|
|---|
| 345 | void resetBusLoad(void);
|
|---|
| 346 | void configBusLoad(WORD_t, BYTE_t);
|
|---|
| 347 | void sendBusLoadToHost(void);
|
|---|
| 348 | void busLoadUpdate(void);
|
|---|
| 349 | void checkBusLoadStatistic(void);
|
|---|
| 350 |
|
|---|
| 351 | void resetBusLoadSniff(void);
|
|---|
| 352 | void configBusLoadSniff(WORD_t, BYTE_t);
|
|---|
| 353 | void sendBusLoadToHostSniff(void);
|
|---|
| 354 | void busLoadUpdateSniff(void);
|
|---|
| 355 | void checkBusLoadStatisticSniff(void);
|
|---|
| 356 |
|
|---|
| 357 | /*-------- Functions in bcan.c ---------------------------------------------*/
|
|---|
| 358 |
|
|---|
| 359 | /* Switch to bus-on state */
|
|---|
| 360 | extern void buson_bcan(void);
|
|---|
| 361 |
|
|---|
| 362 | /* Reset: Switch to bus-off state */
|
|---|
| 363 | extern void busoff_bcan(void);
|
|---|
| 364 |
|
|---|
| 365 | /* Set bus timing registers (assumed state: bus-off) */
|
|---|
| 366 | extern void write_btr_bcan(WORD_t);
|
|---|
| 367 |
|
|---|
| 368 | /* Set error waring limit */
|
|---|
| 369 | void write_ewl_bcan( BYTE_t ewl);
|
|---|
| 370 |
|
|---|
| 371 | /* Control bus-error reporting */
|
|---|
| 372 | void switch_berr_bcan( BYTE_t state);
|
|---|
| 373 |
|
|---|
| 374 | /* provide access to berrs_to_go outside bcan.c */
|
|---|
| 375 | BYTE_t getBerrsToGo(void);
|
|---|
| 376 |
|
|---|
| 377 | /* Control listen only mode */
|
|---|
| 378 | void switch_lom_bcan( BYTE_t state);
|
|---|
| 379 |
|
|---|
| 380 | /* Control self test mode */
|
|---|
| 381 | void switch_stm_bcan( BYTE_t state);
|
|---|
| 382 |
|
|---|
| 383 | /* Set hardware acceptance filter */
|
|---|
| 384 | extern void write_acm_bcan(WORD_t);
|
|---|
| 385 |
|
|---|
| 386 | /* Set extended hardware acceptance filter */
|
|---|
| 387 | void write_ext_acm_bcan(int mode, LWORD_t ac, LWORD_t am);
|
|---|
| 388 |
|
|---|
| 389 | /* Abort current transmission */
|
|---|
| 390 | extern void sendabort_bcan(void);
|
|---|
| 391 |
|
|---|
| 392 | /* Flush the transmit queue. */
|
|---|
| 393 | extern void flush_tx_bcan(void);
|
|---|
| 394 |
|
|---|
| 395 | /* Initialize the BCAN controller. The controller is left in the bus-off
|
|---|
| 396 | state. To start communication buson_bcan() must be called.
|
|---|
| 397 | All interrupt sources are accepted. All messages pass the acceptance
|
|---|
| 398 | filter. The bus timing and the clock divider registers are initialized
|
|---|
| 399 | with the parameters to the function. */
|
|---|
| 400 | extern void init_bcan(WORD_t, WORD_t, WORD_t, WORD_t);
|
|---|
| 401 |
|
|---|
| 402 | /* Service of BCAN message pool -- to be called cyclically */
|
|---|
| 403 | extern void serv_bcan(void);
|
|---|
| 404 |
|
|---|
| 405 | /* Interrupt service for PCA82C200. */
|
|---|
| 406 | extern void isr_bcan(void);
|
|---|
| 407 | #ifdef ASSHACK
|
|---|
| 408 | extern void a_isr_bcan(void);
|
|---|
| 409 | extern void a_isr_bcan_end(void);
|
|---|
| 410 | #endif
|
|---|
| 411 |
|
|---|
| 412 |
|
|---|
| 413 | /* Request to send a CAN message: Fill the transmit buffer of the
|
|---|
| 414 | CAN chip and issue a transmit request.
|
|---|
| 415 | Return values: 1 okay, transmit request accepted by controller
|
|---|
| 416 | 0 remote request successful
|
|---|
| 417 | -1 transmit request failed (no buffer, no mem)
|
|---|
| 418 | */
|
|---|
| 419 | extern int sendreq_bcan(
|
|---|
| 420 | int, /* transmit request specifier */
|
|---|
| 421 | WORD_t, /* request id */
|
|---|
| 422 | WORD_t, /* descriptor (id, rtr, dlc) */
|
|---|
| 423 | BYTE_t * /* data bytes */
|
|---|
| 424 | );
|
|---|
| 425 |
|
|---|
| 426 | #ifdef __cplusplus
|
|---|
| 427 | }
|
|---|
| 428 | #endif
|
|---|
| 429 |
|
|---|
| 430 | #endif /* !bcan_DEFINED */
|
|---|