reg_can.h 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532
  1. ////////////////////////////////////////////////////////////////////////////////
  2. /// @file reg_can.h
  3. /// @author AE TEAM
  4. /// @brief THIS FILE CONTAINS ALL THE FUNCTIONS PROTOTYPES FOR THE SERIES OF
  5. /// MM32 FIRMWARE LIBRARY.
  6. ////////////////////////////////////////////////////////////////////////////////
  7. /// @attention
  8. ///
  9. /// THE EXISTING FIRMWARE IS ONLY FOR REFERENCE, WHICH IS DESIGNED TO PROVIDE
  10. /// CUSTOMERS WITH CODING INFORMATION ABOUT THEIR PRODUCTS SO THEY CAN SAVE
  11. /// TIME. THEREFORE, MINDMOTION SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT OR
  12. /// CONSEQUENTIAL DAMAGES ABOUT ANY CLAIMS ARISING OUT OF THE CONTENT OF SUCH
  13. /// HARDWARE AND/OR THE USE OF THE CODING INFORMATION CONTAINED HEREIN IN
  14. /// CONNECTION WITH PRODUCTS MADE BY CUSTOMERS.
  15. ///
  16. /// <H2><CENTER>&COPY; COPYRIGHT MINDMOTION </CENTER></H2>
  17. ////////////////////////////////////////////////////////////////////////////////
  18. // Define to prevent recursive inclusion
  19. #ifndef __REG_CAN_H
  20. #define __REG_CAN_H
  21. // Files includes
  22. #include <stdint.h>
  23. #include <stdbool.h>
  24. #include "types.h"
  25. #if defined ( __CC_ARM )
  26. #pragma anon_unions
  27. #endif
  28. ////////////////////////////////////////////////////////////////////////////////
  29. /// @brief CAN Base Address Definition
  30. ////////////////////////////////////////////////////////////////////////////////
  31. #define CAN1_BASE (APB1PERIPH_BASE + 0x6400) ///< Base Address: 0x40006400
  32. ////////////////////////////////////////////////////////////////////////////////
  33. /// @brief CAN Register Structure Definition
  34. ////////////////////////////////////////////////////////////////////////////////
  35. ////////////////////////////////////////////////////////////////////////////////
  36. /// @brief CAN basic
  37. ////////////////////////////////////////////////////////////////////////////////
  38. typedef struct {
  39. __IO u32 CR; ///< Control register, offset: 0x00
  40. __IO u32 CMR; ///< Command register, offset: 0x04
  41. __IO u32 SR; ///< <Status register, offset: 0x08
  42. __IO u32 IR; ///< Interrupt register, offset: 0x0c
  43. __IO u32 ACR; ///< Acceptance Code register, offset: 0x10
  44. __IO u32 AMR; ///< Acceptance Mask register, offset: 0x14
  45. __IO u32 BTR0; ///< Bus Timing register 0, offset: 0x18
  46. __IO u32 BTR1; ///< Bus Timing register 1, offset: 0x1C
  47. __IO u32 RESERVED0;
  48. __IO u32 RESERVED1;
  49. __IO u32 TXID0; ///< Send ID register 0, offset: 0x28
  50. __IO u32 TXID1; ///< Send ID register 1, offset: 0x2c
  51. __IO u32 TXDR0; ///< Send Data register 0, offset: 0x30
  52. __IO u32 TXDR1; ///< Send Data register 1, offset: 0x34
  53. __IO u32 TXDR2; ///< Send Data register 2, offset: 0x38
  54. __IO u32 TXDR3; ///< Send Data register 3, offset: 0x3c
  55. __IO u32 TXDR4; ///< Send Data register 4, offset: 0x40
  56. __IO u32 TXDR5; ///< Send Data register 5, offset: 0x44
  57. __IO u32 TXDR6; ///< Send Data register 6, offset: 0x48
  58. __IO u32 TXDR7; ///< Send Data register 7, offset: 0x4c
  59. __IO u32 RXID0; ///< Mode register, offset: 0x50
  60. __IO u32 RXID1; ///< Mode register, offset: 0x54
  61. __IO u32 RXDR0; ///< Mode register, offset: 0x58
  62. __IO u32 RXDR1; ///< Mode register, offset: 0x5C
  63. __IO u32 RXDR2; ///< Mode register, offset: 0x60
  64. __IO u32 RXDR3; ///< Mode register, offset: 0x64
  65. __IO u32 RXDR4; ///< Mode register, offset: 0x68
  66. __IO u32 RXDR5; ///< Mode register, offset: 0x6c
  67. __IO u32 RXDR6; ///< Mode register, offset: 0x70
  68. __IO u32 RXDR7; ///< Mode register, offset: 0x74
  69. __IO u32 RESERVED2;
  70. __IO u32 CDR; ///< Clock Divider register, offset: 0x7c
  71. } CAN_TypeDef;
  72. ////////////////////////////////////////////////////////////////////////////////
  73. /// @brief CAN Peli
  74. ////////////////////////////////////////////////////////////////////////////////
  75. typedef struct {
  76. __IO u32 MOD; ///< Mode register, offset: 0x00
  77. __IO u32 CMR; ///< Command register, offset: 0x04
  78. __IO u32 SR; ///< Status register, offset: 0x08
  79. __IO u32 IR; ///< Interrupt Enable register, offset: 0x0c
  80. __IO u32 IER; ///< Mode register, offset: 0x10
  81. __IO u32 RESERVED0;
  82. __IO u32 BTR0; ///< Bus Timing register 0, offset: 0x18
  83. __IO u32 BTR1; ///< Bus Timing register 1, offset: 0x1C
  84. __IO u32 RESERVED1;
  85. __IO u32 RESERVED2;
  86. __IO u32 RESERVED3;
  87. __IO u32 ALC; ///< Arbitration Lost Capture register, offset: 0x2c
  88. __IO u32 ECC; ///< Error Code Capture register, offset: 0x30
  89. __IO u32 EWLR; ///< Error Warning Limit register, offset: 0x34
  90. __IO u32 RXERR; ///< RX Error Counter register, offset: 0x38
  91. __IO u32 TXERR; ///< TX Error Counter register, offset: 0x3c
  92. __IO u32 FF; ///< Frame Format register, offset: 0x40
  93. __IO u32 ID0; ///< ID register 0, offset: 0x44
  94. __IO u32 ID1; ///< ID register 1, offset: 0x48
  95. __IO u32 DATA0; ///< Data register 0, offset: 0x4c
  96. __IO u32 DATA1; ///< Data register 1, offset: 0x50
  97. __IO u32 DATA2; ///< Data register 2, offset: 0x54
  98. __IO u32 DATA3; ///< Data register 3, offset: 0x58
  99. __IO u32 DATA4; ///< Data register 4, offset: 0x5c
  100. __IO u32 DATA5; ///< Data register 5, offset: 0x60
  101. __IO u32 DATA6; ///< Data register 6, offset: 0x64
  102. __IO u32 DATA7; ///< Data register 7, offset: 0x68
  103. __IO u32 DATA8; ///< Data register 8, offset: 0x6c
  104. __IO u32 DATA9; ///< Data register 9, offset: 0x70
  105. __IO u32 RMC; ///< RMC register, offset: 0x74
  106. __IO u32 RBSA; ///< RBSA register, offset: 0x78
  107. __IO u32 CDR; ///< Clock Divider register offset: 0x7c
  108. } CAN_Peli_TypeDef;
  109. ////////////////////////////////////////////////////////////////////////////////
  110. /// @brief CAN type pointer Definition
  111. ////////////////////////////////////////////////////////////////////////////////
  112. typedef struct {
  113. __IO u32 ACR0;
  114. __IO u32 ACR1;
  115. __IO u32 ACR2;
  116. __IO u32 ACR3;
  117. __IO u32 AMR0;
  118. __IO u32 AMR1;
  119. __IO u32 AMR2;
  120. __IO u32 AMR3;
  121. } CAN_FLT_GROUP;
  122. typedef struct {
  123. CAN_FLT_GROUP GROUP0; //Address offset: 0x40
  124. u32 RESERVED[8]; //Address offset: 0x60
  125. __IO u32 AFM0; //Address offset: 0x80
  126. __IO u32 AFM1; //Address offset: 0x84
  127. __IO u32 AFM2; //Address offset: 0x88
  128. __IO u32 FGA0; //Address offset: 0x8C
  129. __IO u32 FGA1; //Address offset: 0x90
  130. __IO u32 FGA2; //Address offset: 0x94
  131. CAN_FLT_GROUP GROUP1; //Address offset: 0x98
  132. CAN_FLT_GROUP GROUP2; //Address offset: 0xB8
  133. CAN_FLT_GROUP GROUP3; //Address offset: 0xD8
  134. CAN_FLT_GROUP GROUP4; //Address offset: 0xF8
  135. CAN_FLT_GROUP GROUP5; //Address offset: 0x118
  136. CAN_FLT_GROUP GROUP6; //Address offset: 0x138
  137. CAN_FLT_GROUP GROUP7; //Address offset: 0x158
  138. CAN_FLT_GROUP GROUP8; //Address offset: 0x178
  139. CAN_FLT_GROUP GROUP9; //Address offset: 0x198
  140. CAN_FLT_GROUP GROUP10; //Address offset: 0x1B8
  141. CAN_FLT_GROUP GROUP11; //Address offset: 0x1D8
  142. CAN_FLT_GROUP GROUP12; //Address offset: 0x1F8
  143. CAN_FLT_GROUP GROUP13; //Address offset: 0x218
  144. CAN_FLT_GROUP GROUP14; //Address offset: 0x238
  145. CAN_FLT_GROUP GROUP15; //Address offset: 0x258
  146. CAN_FLT_GROUP GROUP16; //Address offset: 0x278
  147. CAN_FLT_GROUP GROUP17; //Address offset: 0x298
  148. CAN_FLT_GROUP GROUP18; //Address offset: 0x2B8
  149. CAN_FLT_GROUP GROUP19; //Address offset: 0x2D8
  150. } CAN_Peli_FLT_TypeDef;
  151. ////////////////////////////////////////////////////////////////////////////////
  152. /// @brief CAN type pointer Definition
  153. ////////////////////////////////////////////////////////////////////////////////
  154. #define CAN1 ((CAN_TypeDef*) CAN1_BASE)
  155. #define CAN1_PELI ((CAN_Peli_TypeDef*) CAN1_BASE)
  156. #define CAN_Peli_FLT ((CAN_Peli_FLT_TypeDef*)(CAN1_BASE + 0x40))
  157. ////////////////////////////////////////////////////////////////////////////////
  158. /// @brief CAN basic
  159. ////////////////////////////////////////////////////////////////////////////////
  160. ////////////////////////////////////////////////////////////////////////////////
  161. /// @brief CAN_CR register Bit definition
  162. ////////////////////////////////////////////////////////////////////////////////
  163. #define CAN_CR_RR_Pos (0)
  164. #define CAN_CR_RR (0x01U << CAN_CR_RR_Pos) ///< CAN reset request
  165. #define CAN_CR_RIE_Pos (1)
  166. #define CAN_CR_RIE (0x01U << CAN_CR_RIE_Pos) ///< CAN receive interrupt enable
  167. #define CAN_CR_TIE_Pos (2)
  168. #define CAN_CR_TIE (0x01U << CAN_CR_TIE_Pos) ///< CAN transmit interrupt enable
  169. #define CAN_CR_EIE_Pos (3)
  170. #define CAN_CR_EIE (0x01U << CAN_CR_EIE_Pos) ///< CAN error interrupt enable
  171. #define CAN_CR_OIE_Pos (4)
  172. #define CAN_CR_OIE (0x01U << CAN_CR_OIE_Pos) ///< CAN overflow interrupt enable
  173. ////////////////////////////////////////////////////////////////////////////////
  174. /// @brief CAN_CMR register Bit definition
  175. ////////////////////////////////////////////////////////////////////////////////
  176. #define CAN_CMR_TR_Pos (0)
  177. #define CAN_CMR_TR (0x01U << CAN_CMR_TR_Pos ) ///< CAN transmission request
  178. #define CAN_CMR_AT_Pos (1)
  179. #define CAN_CMR_AT (0x01U << CAN_CMR_AT_Pos ) ///< CAN abort transmission
  180. #define CAN_CMR_RRB_Pos (2)
  181. #define CAN_CMR_RRB (0x01U << CAN_CMR_RRB_Pos) ///< CAN release receive buffer
  182. #define CAN_CMR_CDO_Pos (3)
  183. #define CAN_CMR_CDO (0x01U << CAN_CMR_CDO_Pos) ///< CAN clear data overrun
  184. #define CAN_CMR_GTS_Pos (4)
  185. #define CAN_CMR_GTS (0x01U << CAN_CMR_GTS_Pos) ///< CAN go to sleep
  186. ////////////////////////////////////////////////////////////////////////////////
  187. /// @brief CAN_SR register Bit definition
  188. ////////////////////////////////////////////////////////////////////////////////
  189. #define CAN_SR_RBS_Pos (0)
  190. #define CAN_SR_RBS (0x01U << CAN_SR_RBS_Pos) ///< CAN receive buffer status
  191. #define CAN_SR_DOS_Pos (1)
  192. #define CAN_SR_DOS (0x01U << CAN_SR_DOS_Pos) ///< CAN data overrun status
  193. #define CAN_SR_TBS_Pos (2)
  194. #define CAN_SR_TBS (0x01U << CAN_SR_TBS_Pos) ///< CAN transmit buffer status
  195. #define CAN_SR_TCS_Pos (3)
  196. #define CAN_SR_TCS (0x01U << CAN_SR_TCS_Pos) ///< CAN transmission complete status
  197. #define CAN_SR_RS_Pos (4)
  198. #define CAN_SR_RS (0x01U << CAN_SR_RS_Pos) ///< CAN receive status
  199. #define CAN_SR_TS_Pos (5)
  200. #define CAN_SR_TS (0x01U << CAN_SR_TS_Pos) ///< CAN transmit status
  201. #define CAN_SR_ES_Pos (6)
  202. #define CAN_SR_ES (0x01U << CAN_SR_ES_Pos) ///< CAN error status
  203. #define CAN_SR_BS_Pos (7)
  204. #define CAN_SR_BS (0x01U << CAN_SR_BS_Pos) ///< CAN bus status
  205. ////////////////////////////////////////////////////////////////////////////////
  206. /// @brief CAN_ACR register Bit definition
  207. ////////////////////////////////////////////////////////////////////////////////
  208. #define CAN_ACR_AC (0xFFU << 0) ///< CAN acceptance code
  209. ////////////////////////////////////////////////////////////////////////////////
  210. /// @brief CAN_AMR register Bit definition
  211. ////////////////////////////////////////////////////////////////////////////////
  212. #define CAN_AMR_AM_Pos (0)
  213. #define CAN_AMR_AM (0xFFU << CAN_AMR_AM_Pos) ///< CAN acceptance mask
  214. ////////////////////////////////////////////////////////////////////////////////
  215. /// @brief CAN_BTR0 register Bit definition
  216. ////////////////////////////////////////////////////////////////////////////////
  217. #define CAN_BTR0_BRP_Pos (0)
  218. #define CAN_BTR0_BRP (0x003FU << CAN_BTR0_BRP_Pos) ///< CAN baud rate prescaler
  219. #define CAN_BTR0_SJW_Pos (6)
  220. #define CAN_BTR0_SJW (0x03U << CAN_BTR0_SJW_Pos) ///< CAN synchronization jump width
  221. ////////////////////////////////////////////////////////////////////////////////
  222. /// @brief CAN_BTR1 register Bit definition
  223. ////////////////////////////////////////////////////////////////////////////////
  224. #define CAN_BTR1_TESG1_Pos (0)
  225. #define CAN_BTR1_TESG1 (0x000FU << CAN_BTR1_TESG1_Pos) ///< CAN Time segment 1
  226. #define CAN_BTR1_TESG2_Pos (4)
  227. #define CAN_BTR1_TESG2 (0x07U << CAN_BTR1_TESG2_Pos) ///< CAN Time segment 2
  228. #define CAN_BTR1_SAM_Pos (7)
  229. #define CAN_BTR1_SAM (0x01U << CAN_BTR1_SAM_Pos) ///< CAN sampling
  230. ////////////////////////////////////////////////////////////////////////////////
  231. /// @brief CAN_TXID0 register Bit definition
  232. ////////////////////////////////////////////////////////////////////////////////
  233. #define CAN_TXID0_ID_3_Pos (0)
  234. #define CAN_TXID0_ID_3 (0x01U << CAN_TXID0_ID_3_Pos) ///< CAN identifier byte 3
  235. #define CAN_TXID0_ID_4_Pos (1)
  236. #define CAN_TXID0_ID_4 (0x01U << CAN_TXID0_ID_4_Pos) ///< CAN identifier byte 4
  237. #define CAN_TXID0_ID_5_Pos (2)
  238. #define CAN_TXID0_ID_5 (0x01U << CAN_TXID0_ID_5_Pos) ///< CAN identifier byte 5
  239. #define CAN_TXID0_ID_6_Pos (3)
  240. #define CAN_TXID0_ID_6 (0x01U << CAN_TXID0_ID_6_Pos) ///< CAN identifier byte 6
  241. #define CAN_TXID0_ID_7_Pos (4)
  242. #define CAN_TXID0_ID_7 (0x01U << CAN_TXID0_ID_7_Pos) ///< CAN identifier byte 7
  243. #define CAN_TXID0_ID_8_Pos (5)
  244. #define CAN_TXID0_ID_8 (0x01U << CAN_TXID0_ID_8_Pos) ///< CAN identifier byte 8
  245. #define CAN_TXID0_ID_9_Pos (6)
  246. #define CAN_TXID0_ID_9 (0x01U << CAN_TXID0_ID_9_Pos) ///< CAN identifier byte 9
  247. #define CAN_TXID0_ID_10_Pos (7)
  248. #define CAN_TXID0_ID_10 (0x01U << CAN_TXID0_ID_10_Pos) ///< CAN identifier byte 10
  249. ////////////////////////////////////////////////////////////////////////////////
  250. /// @brief CAN_TXID1 register Bit definition
  251. ////////////////////////////////////////////////////////////////////////////////
  252. #define CAN_TXID1_DLC0_Pos (0)
  253. #define CAN_TXID1_DLC0 (0x01U << CAN_TXID1_DLC0_Pos) ///< CAN data length code 0 ~ 8
  254. #define CAN_TXID1_DLC1_Pos (1)
  255. #define CAN_TXID1_DLC1 (0x01U << CAN_TXID1_DLC1_Pos) ///< CAN data length code 0 ~ 8
  256. #define CAN_TXID1_DLC2_Pos (2)
  257. #define CAN_TXID1_DLC2 (0x01U << CAN_TXID1_DLC2_Pos) ///< CAN data length code 0 ~ 8
  258. #define CAN_TXID1_DLC3_Pos (3)
  259. #define CAN_TXID1_DLC3 (0x01U << CAN_TXID1_DLC3_Pos) ///< CAN data length code 0 ~ 8
  260. #define CAN_TXID1_RTR_Pos (4)
  261. #define CAN_TXID1_RTR (0x01U << CAN_TXID1_RTR_Pos ) ///< CAN remote transmission request
  262. #define CAN_TXID1_ID_0_Pos (5)
  263. #define CAN_TXID1_ID_0 (0x01U << CAN_TXID1_ID_0_Pos) ///< CAN identifier byte 0
  264. #define CAN_TXID1_ID_1_Pos (6)
  265. #define CAN_TXID1_ID_1 (0x01U << CAN_TXID1_ID_1_Pos) ///< CAN identifier byte 1
  266. #define CAN_TXID1_ID_2_Pos (7)
  267. #define CAN_TXID1_ID_2 (0x01U << CAN_TXID1_ID_2_Pos) ///< CAN identifier byte 2
  268. ////////////////////////////////////////////////////////////////////////////////
  269. /// @brief CAN_TXDRn register Bit definition
  270. ////////////////////////////////////////////////////////////////////////////////
  271. #define CAN_TXDRn (0x00FFU) // (n = 0..7) ///< CAN send data
  272. ////////////////////////////////////////////////////////////////////////////////
  273. /// @brief CAN_CDR register Bit definition
  274. ////////////////////////////////////////////////////////////////////////////////
  275. #define CAN_CDR_MODE_Pos (7)
  276. #define CAN_CDR_MODE (0x01U << CAN_CDR_MODE_Pos) ///< CAN mode
  277. ////////////////////////////////////////////////////////////////////////////////
  278. /// @brief CAN Peli
  279. ////////////////////////////////////////////////////////////////////////////////
  280. ////////////////////////////////////////////////////////////////////////////////
  281. /// @brief CAN_MOD register Bit definition
  282. ////////////////////////////////////////////////////////////////////////////////
  283. #define CAN_MOD_RM_Pos (0)
  284. #define CAN_MOD_RM (0x01U << CAN_MOD_RM_Pos) ///< CAN reset mode
  285. #define CAN_MOD_LOM_Pos (1)
  286. #define CAN_MOD_LOM (0x01U << CAN_MOD_LOM_Pos) ///< CAN listen only mode
  287. #define CAN_MOD_STM_Pos (2)
  288. #define CAN_MOD_STM (0x01U << CAN_MOD_STM_Pos) ///< CAN self test mode
  289. #define CAN_MOD_AFM_Pos (3)
  290. #define CAN_MOD_AFM (0x01U << CAN_MOD_AFM_Pos) ///< CAN acceptance filter mode
  291. ////////////////////////////////////////////////////////////////////////////////
  292. /// @brief CAN_CMR register Bit definition
  293. ////////////////////////////////////////////////////////////////////////////////
  294. #define CAN_CMR_TR_Pos (0)
  295. #define CAN_CMR_TR (0x01U << CAN_CMR_TR_Pos ) ///< CAN transmission request
  296. #define CAN_CMR_AT_Pos (1)
  297. #define CAN_CMR_AT (0x01U << CAN_CMR_AT_Pos ) ///< CAN abort transmission
  298. #define CAN_CMR_RRB_Pos (2)
  299. #define CAN_CMR_RRB (0x01U << CAN_CMR_RRB_Pos) ///< CAN release receive buffer
  300. #define CAN_CMR_CDO_Pos (3)
  301. #define CAN_CMR_CDO (0x01U << CAN_CMR_CDO_Pos) ///< CAN clear data overrun
  302. #define CAN_CMR_SRR_Pos (4)
  303. #define CAN_CMR_SRR (0x01U << CAN_CMR_SRR_Pos) ///< CAN self reset request
  304. ////////////////////////////////////////////////////////////////////////////////
  305. /// @brief CAN_SR register Bit definition
  306. ////////////////////////////////////////////////////////////////////////////////
  307. #define CAN_SR_RBS_Pos (0)
  308. #define CAN_SR_RBS (0x01U << CAN_SR_RBS_Pos) ///< CAN receive buffer status
  309. #define CAN_SR_DOS_Pos (1)
  310. #define CAN_SR_DOS (0x01U << CAN_SR_DOS_Pos) ///< CAN data overrun status
  311. #define CAN_SR_TBS_Pos (2)
  312. #define CAN_SR_TBS (0x01U << CAN_SR_TBS_Pos) ///< CAN transmit buffer status
  313. #define CAN_SR_TCS_Pos (3)
  314. #define CAN_SR_TCS (0x01U << CAN_SR_TCS_Pos) ///< CAN transmission complete status
  315. #define CAN_SR_RS_Pos (4)
  316. #define CAN_SR_RS (0x01U << CAN_SR_RS_Pos) ///< CAN receive status
  317. #define CAN_SR_TS_Pos (5)
  318. #define CAN_SR_TS (0x01U << CAN_SR_TS_Pos) ///< CAN transmit status
  319. #define CAN_SR_ES_Pos (6)
  320. #define CAN_SR_ES (0x01U << CAN_SR_ES_Pos) ///< CAN error status
  321. #define CAN_SR_BS_Pos (7)
  322. #define CAN_SR_BS (0x01U << CAN_SR_BS_Pos) ///< CAN bus status
  323. ////////////////////////////////////////////////////////////////////////////////
  324. /// @brief CAN_IR register Bit definition
  325. ////////////////////////////////////////////////////////////////////////////////
  326. #define CAN_IR_RI_Pos (0)
  327. #define CAN_IR_RI (0x01U << CAN_IR_RI_Pos) ///< CAN receive interrupt
  328. #define CAN_IR_TI_Pos (1)
  329. #define CAN_IR_TI (0x01U << CAN_IR_TI_Pos) ///< CAN transmit interrupt
  330. #define CAN_IR_EI_Pos (2)
  331. #define CAN_IR_EI (0x01U << CAN_IR_EI_Pos) ///< CAN error interrupt
  332. #define CAN_IR_DOI_Pos (3)
  333. #define CAN_IR_DOI (0x01U << CAN_IR_DOI_Pos) ///< CAN data overrun interrupt
  334. #define CAN_IR_EPI_Pos (5)
  335. #define CAN_IR_EPI (0x01U << CAN_IR_EPI_Pos) ///< CAN error passive interrupt
  336. #define CAN_IR_ALI_Pos (6)
  337. #define CAN_IR_ALI (0x01U << CAN_IR_ALI_Pos) ///< CAN arbitration lost interrupt
  338. #define CAN_IR_BEI_Pos (7)
  339. #define CAN_IR_BEI (0x01U << CAN_IR_BEI_Pos) ///< CAN bus error interrupt
  340. ////////////////////////////////////////////////////////////////////////////////
  341. /// @brief CAN_IR register Bit definition
  342. ////////////////////////////////////////////////////////////////////////////////
  343. #define CAN_IER_RIE_Pos (0)
  344. #define CAN_IER_RIE (0x01U << CAN_IER_RIE_Pos) ///< CAN receive interrupt enable
  345. #define CAN_IER_TIE_Pos (1)
  346. #define CAN_IER_TIE (0x01U << CAN_IER_TIE_Pos) ///< CAN transmit interrupt enable
  347. #define CAN_IER_EIE_Pos (2)
  348. #define CAN_IER_EIE (0x01U << CAN_IER_EIE_Pos) ///< CAN error interrupt enable
  349. #define CAN_IER_DOIE_Pos (3)
  350. #define CAN_IER_DOIE (0x01U << CAN_IER_DOIE_Pos) ///< CAN data overrun interrupt enable
  351. #define CAN_IER_EPIE_Pos (5)
  352. #define CAN_IER_EPIE (0x01U << CAN_IER_EPI_Pos) ///< CAN error passive interrupt enable
  353. #define CAN_IER_ALIE_Pos (6)
  354. #define CAN_IER_ALIE (0x01U << CAN_IER_ALIE_Pos) ///< CAN arbitration lost interrupt enable
  355. #define CAN_IER_BEIE_Pos (7)
  356. #define CAN_IER_BEIE (0x01U << CAN_IER_BEIE_Pos) ///< CAN bus error interrupt enable
  357. ////////////////////////////////////////////////////////////////////////////////
  358. /// @brief CAN_ACRn register Bit definition
  359. ////////////////////////////////////////////////////////////////////////////////
  360. #define CAN_ACRn_AC_Pos (0)
  361. #define CAN_ACRn_AC (0xFFU << CAN_ACRn_AC_Pos) ///< CAN acceptance code
  362. ////////////////////////////////////////////////////////////////////////////////
  363. /// @brief CAN_AMRn register Bit definition
  364. ////////////////////////////////////////////////////////////////////////////////
  365. #define CAN_AMRn_AM_Pos (0)
  366. #define CAN_AMRn_AM (0xFFU << CAN_AMRn_AM_Pos) ///< CAN acceptance mask
  367. ////////////////////////////////////////////////////////////////////////////////
  368. /// @brief CAN_BTR0 register Bit definition
  369. ////////////////////////////////////////////////////////////////////////////////
  370. #define CAN_BTR0_BRP_Pos (0)
  371. #define CAN_BTR0_BRP (0x003FU << CAN_BTR0_BRP_Pos) ///< CAN baud rate prescaler
  372. #define CAN_BTR0_SJW_Pos (6)
  373. #define CAN_BTR0_SJW (0x03U << CAN_BTR0_SJW_Pos) ///< CAN synchronization jump width
  374. ////////////////////////////////////////////////////////////////////////////////
  375. /// @brief CAN_ALC register Bit definition
  376. ////////////////////////////////////////////////////////////////////////////////
  377. #define CAN_ALC_BITNO_Pos (0)
  378. #define CAN_ALC_BITNO (0x001FU << CAN_ALC_BITNO_Pos) ///< CAN bit number
  379. ////////////////////////////////////////////////////////////////////////////////
  380. /// @brief CAN_ECC register Bit definition
  381. ////////////////////////////////////////////////////////////////////////////////
  382. #define CAN_ECC_SEG_Pos (0)
  383. #define CAN_ECC_SEG (0x001FU <<CAN_ECC_SEG_Pos) ///< CAN error code capture
  384. #define CAN_ECC_DIR_Pos (5)
  385. #define CAN_ECC_DIR (0x01U << CAN_ECC_DIR_Pos) ///< CAN direction
  386. #define CAN_ECC_ERRC_Pos (6)
  387. #define CAN_ECC_ERRC (0x03U << CAN_ECC_ERRC_Pos) ///< CAN error code
  388. ////////////////////////////////////////////////////////////////////////////////
  389. /// @brief CAN_EWLR register Bit definition
  390. ////////////////////////////////////////////////////////////////////////////////
  391. #define CAN_EWLR_EWL_Pos (0)
  392. #define CAN_EWLR_EWL (0x00FFU << CAN_EWLR_EWL_Pos) ///< CAN programmable error warning limit
  393. ////////////////////////////////////////////////////////////////////////////////
  394. /// @brief CAN_RXERR register Bit definition
  395. ////////////////////////////////////////////////////////////////////////////////
  396. #define CAN_RXERR_RXERR_Pos (0)
  397. #define CAN_RXERR_RXERR (0x00FFU << CAN_RXERR_RXERR_Pos) ///< CAN RX error counter register
  398. ////////////////////////////////////////////////////////////////////////////////
  399. /// @brief CAN_TXERR register Bit definition
  400. ////////////////////////////////////////////////////////////////////////////////
  401. #define CAN_TXERR_TXERR_Pos (0)
  402. #define CAN_TXERR_TXERR (0x00FFU << CAN_TXERR_TXERR_Pos) ///< CAN TX error counter register
  403. ////////////////////////////////////////////////////////////////////////////////
  404. /// @brief CAN_FF register Bit definition
  405. ////////////////////////////////////////////////////////////////////////////////
  406. #define CAN_FF_DLC_0_Pos (0)
  407. #define CAN_FF_DLC_0 (0x01U << CAN_FF_DLC_0_Pos) ///< CAN data length code bit
  408. #define CAN_FF_DLC_1_Pos (1)
  409. #define CAN_FF_DLC_1 (0x01U << CAN_FF_DLC_1_Pos) ///< CAN data length code bit
  410. #define CAN_FF_DLC_2_Pos (2)
  411. #define CAN_FF_DLC_2 (0x01U << CAN_FF_DLC_2_Pos) ///< CAN data length code bit
  412. #define CAN_FF_DLC_3_Pos (3)
  413. #define CAN_FF_DLC_3 (0x01U << CAN_FF_DLC_3_Pos) ///< CAN data length code bit
  414. #define CAN_FF_RTR_Pos (6)
  415. #define CAN_FF_RTR (0x01U << CAN_FF_RTR_Pos) ///< CAN remote transmission request
  416. #define CAN_FF_FF_Pos (7)
  417. #define CAN_FF_FF (0x01U << CAN_FF_FF_Pos) ///< CAN frame format
  418. ////////////////////////////////////////////////////////////////////////////////
  419. /// @brief CAN_TXID0 register Bit definition
  420. ////////////////////////////////////////////////////////////////////////////////
  421. #define CAN_TXID0_ID_21_Pos (0)
  422. #define CAN_TXID0_ID_21 (0x01U << CAN_TXID0_ID_21_Pos) ///< CAN identifier bit 21
  423. #define CAN_TXID0_ID_22_Pos (1)
  424. #define CAN_TXID0_ID_22 (0x01U << CAN_TXID0_ID_22_Pos) ///< CAN identifier bit 22
  425. #define CAN_TXID0_ID_23_Pos (2)
  426. #define CAN_TXID0_ID_23 (0x01U << CAN_TXID0_ID_23_Pos) ///< CAN identifier bit 23
  427. #define CAN_TXID0_ID_24_Pos (3)
  428. #define CAN_TXID0_ID_24 (0x01U << CAN_TXID0_ID_24_Pos) ///< CAN identifier bit 24
  429. #define CAN_TXID0_ID_25_Pos (4)
  430. #define CAN_TXID0_ID_25 (0x01U << CAN_TXID0_ID_25_Pos) ///< CAN identifier bit 25
  431. #define CAN_TXID0_ID_26_Pos (5)
  432. #define CAN_TXID0_ID_26 (0x01U << CAN_TXID0_ID_26_Pos) ///< CAN identifier bit 26
  433. #define CAN_TXID0_ID_27_Pos (6)
  434. #define CAN_TXID0_ID_27 (0x01U << CAN_TXID0_ID_27_Pos) ///< CAN identifier bit 27
  435. #define CAN_TXID0_ID_28_Pos (7)
  436. #define CAN_TXID0_ID_28 (0x01U << CAN_TXID0_ID_28_Pos) ///< CAN identifier bit 28
  437. ////////////////////////////////////////////////////////////////////////////////
  438. /// @brief CAN_TXID1 register Bit definition
  439. ////////////////////////////////////////////////////////////////////////////////
  440. #define CAN_TXID1_ID_13_Pos (0)
  441. #define CAN_TXID1_ID_13 (0x01U << CAN_TXID1_ID_13_Pos) ///< CAN identifier bit 13
  442. #define CAN_TXID1_ID_14_Pos (1)
  443. #define CAN_TXID1_ID_14 (0x01U << CAN_TXID1_ID_14_Pos) ///< CAN identifier bit 14
  444. #define CAN_TXID1_ID_15_Pos (2)
  445. #define CAN_TXID1_ID_15 (0x01U << CAN_TXID1_ID_15_Pos) ///< CAN identifier bit 15
  446. #define CAN_TXID1_ID_16_Pos (3)
  447. #define CAN_TXID1_ID_16 (0x01U << CAN_TXID1_ID_16_Pos) ///< CAN identifier bit 16
  448. #define CAN_TXID1_ID_17_Pos (4)
  449. #define CAN_TXID1_ID_17 (0x01U << CAN_TXID1_ID_17_Pos) ///< CAN identifier bit 17
  450. #define CAN_TXID1_ID_18_Pos (5)
  451. #define CAN_TXID1_ID_18 (0x01U << CAN_TXID1_ID_18_Pos) ///< CAN identifier bit 18
  452. #define CAN_TXID1_ID_19_Pos (6)
  453. #define CAN_TXID1_ID_19 (0x01U << CAN_TXID1_ID_19_Pos) ///< CAN identifier bit 19
  454. #define CAN_TXID1_ID_20_Pos (7)
  455. #define CAN_TXID1_ID_20 (0x01U << CAN_TXID1_ID_20_Pos) ///< CAN identifier bit 20
  456. ////////////////////////////////////////////////////////////////////////////////
  457. /// @brief CAN_TXDATAn register Bit definition
  458. ////////////////////////////////////////////////////////////////////////////////
  459. #define CAN_TXDATAn_Pos (0)
  460. #define CAN_TXDATAn (0x00FFU << CAN_TXDATAn_Pos) ///< CAN transmit data n
  461. ////////////////////////////////////////////////////////////////////////////////
  462. /// @brief CAN_CDR register Bit definition
  463. ////////////////////////////////////////////////////////////////////////////////
  464. #define CAN_CDR_MODE_Pos (7)
  465. #define CAN_CDR_MODE (0x01U << CAN_CDR_MODE_Pos) ///< CAN mode
  466. /// @}
  467. /// @}
  468. /// @}
  469. ////////////////////////////////////////////////////////////////////////////////
  470. #endif
  471. ////////////////////////////////////////////////////////////////////////////////