_internal_bxcan.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017 UAVCAN Team
3  *
4  * Distributed under the MIT License, available in the file LICENSE.
5  *
6  * Author: Pavel Kirienko <pavel.kirienko@zubax.com>
7  */
8 
9 #ifndef CANARD_STM32_BXCAN_H
10 #define CANARD_STM32_BXCAN_H
11 
12 #include <stdint.h>
13 
14 
15 typedef struct
16 {
17  volatile uint32_t TIR;
18  volatile uint32_t TDTR;
19  volatile uint32_t TDLR;
20  volatile uint32_t TDHR;
22 
23 typedef struct
24 {
25  volatile uint32_t RIR;
26  volatile uint32_t RDTR;
27  volatile uint32_t RDLR;
28  volatile uint32_t RDHR;
30 
31 typedef struct
32 {
33  volatile uint32_t FR1;
34  volatile uint32_t FR2;
36 
37 typedef struct
38 {
39  volatile uint32_t MCR;
40  volatile uint32_t MSR;
41  volatile uint32_t TSR;
42  volatile uint32_t RF0R;
43  volatile uint32_t RF1R;
44  volatile uint32_t IER;
45  volatile uint32_t ESR;
46  volatile uint32_t BTR;
47  const uint32_t RESERVED0[88];
48  CanardSTM32TxMailboxType TxMailbox[3];
49  CanardSTM32RxMailboxType RxMailbox[2];
50  const uint32_t RESERVED1[12];
51  volatile uint32_t FMR;
52  volatile uint32_t FM1R;
54  volatile uint32_t FS1R;
56  volatile uint32_t FFA1R;
58  volatile uint32_t FA1R;
59  const uint32_t RESERVED5[8];
60  CanardSTM32FilterRegisterType FilterRegister[28];
62 
66 #define CANARD_STM32_CAN1 ((volatile CanardSTM32CANType*)0x40006400U)
67 #define CANARD_STM32_CAN2 ((volatile CanardSTM32CANType*)0x40006800U)
68 
69 // CAN master control register
70 
71 #define CANARD_STM32_CAN_MCR_INRQ (1U << 0U) // Bit 0: Initialization Request
72 #define CANARD_STM32_CAN_MCR_SLEEP (1U << 1U) // Bit 1: Sleep Mode Request
73 #define CANARD_STM32_CAN_MCR_TXFP (1U << 2U) // Bit 2: Transmit FIFO Priority
74 #define CANARD_STM32_CAN_MCR_RFLM (1U << 3U) // Bit 3: Receive FIFO Locked Mode
75 #define CANARD_STM32_CAN_MCR_NART (1U << 4U) // Bit 4: No Automatic Retransmission
76 #define CANARD_STM32_CAN_MCR_AWUM (1U << 5U) // Bit 5: Automatic Wakeup Mode
77 #define CANARD_STM32_CAN_MCR_ABOM (1U << 6U) // Bit 6: Automatic Bus-Off Management
78 #define CANARD_STM32_CAN_MCR_TTCM (1U << 7U) // Bit 7: Time Triggered Communication Mode Enable
79 #define CANARD_STM32_CAN_MCR_RESET (1U << 15U) // Bit 15: bxCAN software master reset
80 #define CANARD_STM32_CAN_MCR_DBF (1U << 16U) // Bit 16: Debug freeze
81 
82 // CAN master status register
83 
84 #define CANARD_STM32_CAN_MSR_INAK (1U << 0U) // Bit 0: Initialization Acknowledge
85 #define CANARD_STM32_CAN_MSR_SLAK (1U << 1U) // Bit 1: Sleep Acknowledge
86 #define CANARD_STM32_CAN_MSR_ERRI (1U << 2U) // Bit 2: Error Interrupt
87 #define CANARD_STM32_CAN_MSR_WKUI (1U << 3U) // Bit 3: Wakeup Interrupt
88 #define CANARD_STM32_CAN_MSR_SLAKI (1U << 4U) // Bit 4: Sleep acknowledge interrupt
89 #define CANARD_STM32_CAN_MSR_TXM (1U << 8U) // Bit 8: Transmit Mode
90 #define CANARD_STM32_CAN_MSR_RXM (1U << 9U) // Bit 9: Receive Mode
91 #define CANARD_STM32_CAN_MSR_SAMP (1U << 10U) // Bit 10: Last Sample Point
92 #define CANARD_STM32_CAN_MSR_RX (1U << 11U) // Bit 11: CAN Rx Signal
93 
94 // CAN transmit status register
95 
96 #define CANARD_STM32_CAN_TSR_RQCP0 (1U << 0U) // Bit 0: Request Completed Mailbox 0
97 #define CANARD_STM32_CAN_TSR_TXOK0 (1U << 1U) // Bit 1 : Transmission OK of Mailbox 0
98 #define CANARD_STM32_CAN_TSR_ALST0 (1U << 2U) // Bit 2 : Arbitration Lost for Mailbox 0
99 #define CANARD_STM32_CAN_TSR_TERR0 (1U << 3U) // Bit 3 : Transmission Error of Mailbox 0
100 #define CANARD_STM32_CAN_TSR_ABRQ0 (1U << 7U) // Bit 7 : Abort Request for Mailbox 0
101 #define CANARD_STM32_CAN_TSR_RQCP1 (1U << 8U) // Bit 8 : Request Completed Mailbox 1
102 #define CANARD_STM32_CAN_TSR_TXOK1 (1U << 9U) // Bit 9 : Transmission OK of Mailbox 1
103 #define CANARD_STM32_CAN_TSR_ALST1 (1U << 10U) // Bit 10 : Arbitration Lost for Mailbox 1
104 #define CANARD_STM32_CAN_TSR_TERR1 (1U << 11U) // Bit 11 : Transmission Error of Mailbox 1
105 #define CANARD_STM32_CAN_TSR_ABRQ1 (1U << 15U) // Bit 15 : Abort Request for Mailbox 1
106 #define CANARD_STM32_CAN_TSR_RQCP2 (1U << 16U) // Bit 16 : Request Completed Mailbox 2
107 #define CANARD_STM32_CAN_TSR_TXOK2 (1U << 17U) // Bit 17 : Transmission OK of Mailbox 2
108 #define CANARD_STM32_CAN_TSR_ALST2 (1U << 18U) // Bit 18: Arbitration Lost for Mailbox 2
109 #define CANARD_STM32_CAN_TSR_TERR2 (1U << 19U) // Bit 19: Transmission Error of Mailbox 2
110 #define CANARD_STM32_CAN_TSR_ABRQ2 (1U << 23U) // Bit 23: Abort Request for Mailbox 2
111 #define CANARD_STM32_CAN_TSR_CODE_SHIFT (24U) // Bits 25-24: Mailbox Code
112 #define CANARD_STM32_CAN_TSR_CODE_MASK (3U << CANARD_STM32_CAN_TSR_CODE_SHIFT)
113 #define CANARD_STM32_CAN_TSR_TME0 (1U << 26U) // Bit 26: Transmit Mailbox 0 Empty
114 #define CANARD_STM32_CAN_TSR_TME1 (1U << 27U) // Bit 27: Transmit Mailbox 1 Empty
115 #define CANARD_STM32_CAN_TSR_TME2 (1U << 28U) // Bit 28: Transmit Mailbox 2 Empty
116 #define CANARD_STM32_CAN_TSR_LOW0 (1U << 29U) // Bit 29: Lowest Priority Flag for Mailbox 0
117 #define CANARD_STM32_CAN_TSR_LOW1 (1U << 30U) // Bit 30: Lowest Priority Flag for Mailbox 1
118 #define CANARD_STM32_CAN_TSR_LOW2 (1U << 31U) // Bit 31: Lowest Priority Flag for Mailbox 2
119 
120 // CAN receive FIFO 0/1 registers
121 
122 #define CANARD_STM32_CAN_RFR_FMP_SHIFT (0U) // Bits 1-0: FIFO Message Pending
123 #define CANARD_STM32_CAN_RFR_FMP_MASK (3U << CANARD_STM32_CAN_RFR_FMP_SHIFT)
124 #define CANARD_STM32_CAN_RFR_FULL (1U << 3U) // Bit 3: FIFO 0 Full
125 #define CANARD_STM32_CAN_RFR_FOVR (1U << 4U) // Bit 4: FIFO 0 Overrun
126 #define CANARD_STM32_CAN_RFR_RFOM (1U << 5U) // Bit 5: Release FIFO 0 Output Mailbox
127 
128 // CAN interrupt enable register
129 
130 #define CANARD_STM32_CAN_IER_TMEIE (1U << 0U) // Bit 0: Transmit Mailbox Empty Interrupt Enable
131 #define CANARD_STM32_CAN_IER_FMPIE0 (1U << 1U) // Bit 1: FIFO Message Pending Interrupt Enable
132 #define CANARD_STM32_CAN_IER_FFIE0 (1U << 2U) // Bit 2: FIFO Full Interrupt Enable
133 #define CANARD_STM32_CAN_IER_FOVIE0 (1U << 3U) // Bit 3: FIFO Overrun Interrupt Enable
134 #define CANARD_STM32_CAN_IER_FMPIE1 (1U << 4U) // Bit 4: FIFO Message Pending Interrupt Enable
135 #define CANARD_STM32_CAN_IER_FFIE1 (1U << 5U) // Bit 5: FIFO Full Interrupt Enable
136 #define CANARD_STM32_CAN_IER_FOVIE1 (1U << 6U) // Bit 6: FIFO Overrun Interrupt Enable
137 #define CANARD_STM32_CAN_IER_EWGIE (1U << 8U) // Bit 8: Error Warning Interrupt Enable
138 #define CANARD_STM32_CAN_IER_EPVIE (1U << 9U) // Bit 9: Error Passive Interrupt Enable
139 #define CANARD_STM32_CAN_IER_BOFIE (1U << 10U) // Bit 10: Bus-Off Interrupt Enable
140 #define CANARD_STM32_CAN_IER_LECIE (1U << 11U) // Bit 11: Last Error Code Interrupt Enable
141 #define CANARD_STM32_CAN_IER_ERRIE (1U << 15U) // Bit 15: Error Interrupt Enable
142 #define CANARD_STM32_CAN_IER_WKUIE (1U << 16U) // Bit 16: Wakeup Interrupt Enable
143 #define CANARD_STM32_CAN_IER_SLKIE (1U << 17U) // Bit 17: Sleep Interrupt Enable
144 
145 // CAN error status register
146 
147 #define CANARD_STM32_CAN_ESR_EWGF (1U << 0U) // Bit 0: Error Warning Flag
148 #define CANARD_STM32_CAN_ESR_EPVF (1U << 1U) // Bit 1: Error Passive Flag
149 #define CANARD_STM32_CAN_ESR_BOFF (1U << 2U) // Bit 2: Bus-Off Flag
150 #define CANARD_STM32_CAN_ESR_LEC_SHIFT (4U) // Bits 6-4: Last Error Code
151 #define CANARD_STM32_CAN_ESR_LEC_MASK (7U << CANARD_STM32_CAN_ESR_LEC_SHIFT)
152 #define CANARD_STM32_CAN_ESR_NOERROR (0U << CANARD_STM32_CAN_ESR_LEC_SHIFT) // 000: No Error
153 #define CANARD_STM32_CAN_ESR_STUFFERROR (1U << CANARD_STM32_CAN_ESR_LEC_SHIFT) // 001: Stuff Error
154 #define CANARD_STM32_CAN_ESR_FORMERROR (2U << CANARD_STM32_CAN_ESR_LEC_SHIFT) // 010: Form Error
155 #define CANARD_STM32_CAN_ESR_ACKERROR (3U << CANARD_STM32_CAN_ESR_LEC_SHIFT) // 011: Acknowledgment Error
156 #define CANARD_STM32_CAN_ESR_BRECERROR (4U << CANARD_STM32_CAN_ESR_LEC_SHIFT) // 100: Bit recessive Error
157 #define CANARD_STM32_CAN_ESR_BDOMERROR (5U << CANARD_STM32_CAN_ESR_LEC_SHIFT) // 101: Bit dominant Error
158 #define CANARD_STM32_CAN_ESR_CRCERRPR (6U << CANARD_STM32_CAN_ESR_LEC_SHIFT) // 110: CRC Error
159 #define CANARD_STM32_CAN_ESR_SWERROR (7U << CANARD_STM32_CAN_ESR_LEC_SHIFT) // 111: Set by software
160 #define CANARD_STM32_CAN_ESR_TEC_SHIFT (16U) // Bits 23-16: LS byte of the 9-bit Transmit Error Counter
161 #define CANARD_STM32_CAN_ESR_TEC_MASK (0xFFU << CANARD_STM32_CAN_ESR_TEC_SHIFT)
162 #define CANARD_STM32_CAN_ESR_REC_SHIFT (24U) // Bits 31-24: Receive Error Counter
163 #define CANARD_STM32_CAN_ESR_REC_MASK (0xFFU << CANARD_STM32_CAN_ESR_REC_SHIFT)
164 
165 // CAN bit timing register
166 
167 #define CANARD_STM32_CAN_BTR_BRP_SHIFT (0U) // Bits 9-0: Baud Rate Prescaler
168 #define CANARD_STM32_CAN_BTR_BRP_MASK (0x03FFU << CANARD_STM32_CAN_BTR_BRP_SHIFT)
169 #define CANARD_STM32_CAN_BTR_TS1_SHIFT (16U) // Bits 19-16: Time Segment 1
170 #define CANARD_STM32_CAN_BTR_TS1_MASK (0x0FU << CANARD_STM32_CAN_BTR_TS1_SHIFT)
171 #define CANARD_STM32_CAN_BTR_TS2_SHIFT (20U) // Bits 22-20: Time Segment 2
172 #define CANARD_STM32_CAN_BTR_TS2_MASK (7U << CANARD_STM32_CAN_BTR_TS2_SHIFT)
173 #define CANARD_STM32_CAN_BTR_SJW_SHIFT (24U) // Bits 25-24: Resynchronization Jump Width
174 #define CANARD_STM32_CAN_BTR_SJW_MASK (3U << CANARD_STM32_CAN_BTR_SJW_SHIFT)
175 #define CANARD_STM32_CAN_BTR_LBKM (1U << 30U) // Bit 30: Loop Back Mode (Debug);
176 #define CANARD_STM32_CAN_BTR_SILM (1U << 31U) // Bit 31: Silent Mode (Debug);
177 
178 #define CANARD_STM32_CAN_BTR_BRP_MAX (1024U) // Maximum BTR value (without decrement);
179 #define CANARD_STM32_CAN_BTR_TSEG1_MAX (16U) // Maximum TSEG1 value (without decrement);
180 #define CANARD_STM32_CAN_BTR_TSEG2_MAX (8U) // Maximum TSEG2 value (without decrement);
181 
182 // TX mailbox identifier register
183 
184 #define CANARD_STM32_CAN_TIR_TXRQ (1U << 0U) // Bit 0: Transmit Mailbox Request
185 #define CANARD_STM32_CAN_TIR_RTR (1U << 1U) // Bit 1: Remote Transmission Request
186 #define CANARD_STM32_CAN_TIR_IDE (1U << 2U) // Bit 2: Identifier Extension
187 #define CANARD_STM32_CAN_TIR_EXID_SHIFT (3U) // Bit 3-31: Extended Identifier
188 #define CANARD_STM32_CAN_TIR_EXID_MASK (0x1FFFFFFFU << CANARD_STM32_CAN_TIR_EXID_SHIFT)
189 #define CANARD_STM32_CAN_TIR_STID_SHIFT (21U) // Bits 21-31: Standard Identifier
190 #define CANARD_STM32_CAN_TIR_STID_MASK (0x07FFU << CANARD_STM32_CAN_TIR_STID_SHIFT)
191 
192 // Mailbox data length control and time stamp register
193 
194 #define CANARD_STM32_CAN_TDTR_DLC_SHIFT (0U) // Bits 3:0: Data Length Code
195 #define CANARD_STM32_CAN_TDTR_DLC_MASK (0x0FU << CANARD_STM32_CAN_TDTR_DLC_SHIFT)
196 #define CANARD_STM32_CAN_TDTR_TGT (1U << 8U) // Bit 8: Transmit Global Time
197 #define CANARD_STM32_CAN_TDTR_TIME_SHIFT (16U) // Bits 31:16: Message Time Stamp
198 #define CANARD_STM32_CAN_TDTR_TIME_MASK (0xFFFFU << CANARD_STM32_CAN_TDTR_TIME_SHIFT)
199 
200 // Rx FIFO mailbox identifier register
201 
202 #define CANARD_STM32_CAN_RIR_RTR (1U << 1U) // Bit 1: Remote Transmission Request
203 #define CANARD_STM32_CAN_RIR_IDE (1U << 2U) // Bit 2: Identifier Extension
204 #define CANARD_STM32_CAN_RIR_EXID_SHIFT (3U) // Bit 3-31: Extended Identifier
205 #define CANARD_STM32_CAN_RIR_EXID_MASK (0x1FFFFFFFU << CANARD_STM32_CAN_RIR_EXID_SHIFT)
206 #define CANARD_STM32_CAN_RIR_STID_SHIFT (21U) // Bits 21-31: Standard Identifier
207 #define CANARD_STM32_CAN_RIR_STID_MASK (0x07FFU << CANARD_STM32_CAN_RIR_STID_SHIFT)
208 
209 // Receive FIFO mailbox data length control and time stamp register
210 
211 #define CANARD_STM32_CAN_RDTR_DLC_SHIFT (0U) // Bits 3:0: Data Length Code
212 #define CANARD_STM32_CAN_RDTR_DLC_MASK (0x0FU << CANARD_STM32_CAN_RDTR_DLC_SHIFT)
213 #define CANARD_STM32_CAN_RDTR_FM_SHIFT (8U) // Bits 15-8: Filter Match Index
214 #define CANARD_STM32_CAN_RDTR_FM_MASK (0xFFU << CANARD_STM32_CAN_RDTR_FM_SHIFT)
215 #define CANARD_STM32_CAN_RDTR_TIME_SHIFT (16U) // Bits 31:16: Message Time Stamp
216 #define CANARD_STM32_CAN_RDTR_TIME_MASK (0xFFFFU << CANARD_STM32_CAN_RDTR_TIME_SHIFT)
217 
218 // CAN filter master register
219 
220 #define CANARD_STM32_CAN_FMR_FINIT (1U << 0U) // Bit 0: Filter Init Mode
221 
222 #endif // CANARD_STM32_BXCAN_H
CanardSTM32TxMailboxType::TDLR
volatile uint32_t TDLR
Definition: _internal_bxcan.h:19
CanardSTM32CANType::RESERVED3
const uint32_t RESERVED3
Reserved 0x210.
Definition: _internal_bxcan.h:55
CanardSTM32CANType
Definition: _internal_bxcan.h:37
CanardSTM32TxMailboxType::TIR
volatile uint32_t TIR
Definition: _internal_bxcan.h:17
CanardSTM32RxMailboxType::RDLR
volatile uint32_t RDLR
Definition: _internal_bxcan.h:27
uavcan::uint32_t
std::uint32_t uint32_t
Definition: std.hpp:26
CanardSTM32RxMailboxType
Definition: _internal_bxcan.h:23
CanardSTM32TxMailboxType::TDHR
volatile uint32_t TDHR
Definition: _internal_bxcan.h:20
CanardSTM32RxMailboxType::RDTR
volatile uint32_t RDTR
Definition: _internal_bxcan.h:26
CanardSTM32CANType::RESERVED2
const uint32_t RESERVED2
Reserved 0x208.
Definition: _internal_bxcan.h:53
CanardSTM32FilterRegisterType::FR2
volatile uint32_t FR2
Definition: _internal_bxcan.h:34
CanardSTM32CANType::MCR
volatile uint32_t MCR
CAN master control register 0x000.
Definition: _internal_bxcan.h:39
CanardSTM32CANType::TSR
volatile uint32_t TSR
CAN transmit status register 0x008.
Definition: _internal_bxcan.h:41
CanardSTM32CANType::IER
volatile uint32_t IER
CAN interrupt enable register 0x014.
Definition: _internal_bxcan.h:44
CanardSTM32CANType::BTR
volatile uint32_t BTR
CAN bit timing register 0x01C.
Definition: _internal_bxcan.h:46
CanardSTM32FilterRegisterType
Definition: _internal_bxcan.h:31
CanardSTM32CANType::FMR
volatile uint32_t FMR
CAN filter master register 0x200.
Definition: _internal_bxcan.h:51
CanardSTM32TxMailboxType::TDTR
volatile uint32_t TDTR
Definition: _internal_bxcan.h:18
CanardSTM32CANType::FA1R
volatile uint32_t FA1R
CAN filter activation register 0x21C.
Definition: _internal_bxcan.h:58
CanardSTM32CANType::FFA1R
volatile uint32_t FFA1R
CAN filter FIFO assignment register 0x214.
Definition: _internal_bxcan.h:56
CanardSTM32CANType::FM1R
volatile uint32_t FM1R
CAN filter mode register 0x204.
Definition: _internal_bxcan.h:52
CanardSTM32CANType::RF1R
volatile uint32_t RF1R
CAN receive FIFO 1 register 0x010.
Definition: _internal_bxcan.h:43
CanardSTM32TxMailboxType
Definition: _internal_bxcan.h:15
CanardSTM32CANType::MSR
volatile uint32_t MSR
CAN master status register 0x004.
Definition: _internal_bxcan.h:40
CanardSTM32RxMailboxType::RIR
volatile uint32_t RIR
Definition: _internal_bxcan.h:25
CanardSTM32CANType::RESERVED4
const uint32_t RESERVED4
Reserved 0x218.
Definition: _internal_bxcan.h:57
CanardSTM32RxMailboxType::RDHR
volatile uint32_t RDHR
Definition: _internal_bxcan.h:28
CanardSTM32CANType::RF0R
volatile uint32_t RF0R
CAN receive FIFO 0 register 0x00C.
Definition: _internal_bxcan.h:42
CanardSTM32FilterRegisterType::FR1
volatile uint32_t FR1
Definition: _internal_bxcan.h:33
CanardSTM32CANType::ESR
volatile uint32_t ESR
CAN error status register 0x018.
Definition: _internal_bxcan.h:45
CanardSTM32CANType::FS1R
volatile uint32_t FS1R
CAN filter scale register 0x20C.
Definition: _internal_bxcan.h:54


uavcan_communicator
Author(s):
autogenerated on Fri Dec 13 2024 03:10:02