1 /*
2  * Copyright (c) 2006-2023, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2023-03-30     luobeihai    first version
9  */
10 
11 #ifndef __DRV_CAN_H__
12 #define __DRV_CAN_H__
13 
14 #include <rtdevice.h>
15 #include <rtthread.h>
16 #include <board.h>
17 
18 #ifdef __cplusplus
19 extern "C" {
20 #endif
21 
22 #if defined(APM32F10X_HD) || defined(APM32E10X_HD) || defined(APM32S10X_MD)
23 /* Aliases for __IRQn */
24 #define CAN1_TX_IRQn                  USBD1_HP_CAN1_TX_IRQn
25 #define CAN1_RX0_IRQn                 USBD1_LP_CAN1_RX0_IRQn
26 #define CAN2_TX_IRQn                  USBD2_HP_CAN2_TX_IRQn
27 #define CAN2_RX0_IRQn                 USBD2_LP_CAN2_RX0_IRQn
28 
29 /* Aliases for __IRQHandler */
30 #define CAN1_TX_IRQHandler            USBD1_HP_CAN1_TX_IRQHandler
31 #define CAN1_RX0_IRQHandler           USBD1_LP_CAN1_RX0_IRQHandler
32 #define CAN2_TX_IRQHandler            USBD2_HP_CAN2_TX_IRQHandler
33 #define CAN2_RX0_IRQHandler           USBD2_LP_CAN2_RX0_IRQHandler
34 #endif /* APM32F10X_HD || APM32E10X_HD || APM32S10X_MD */
35 
36 struct apm32_baud_rate_tab
37 {
38     uint32_t             baud_rate;
39     uint16_t             prescaler;
40     CAN_SJW_T            syncJumpWidth;
41     CAN_TIME_SEGMENT1_T  timeSegment1;
42     CAN_TIME_SEGMENT2_T  timeSegment2;
43 };
44 
45 #define APM32_CAN_BAUD_DEF(rate, sjw, tbs1, tbs2, prescale) \
46 {                                                           \
47     .baud_rate = rate,                                      \
48     .syncJumpWidth = sjw,                                   \
49     .timeSegment1 = tbs1,                                   \
50     .timeSegment2 = tbs2,                                   \
51     .prescaler = prescale                                   \
52 }
53 
54 /* apm32 can device */
55 struct apm32_can
56 {
57     char *name;
58     CAN_T *CANx;
59     CAN_Config_T can_init;
60     CAN_FilterConfig_T FilterConfig;
61     struct rt_can_device device;     /* inherit from can device */
62 };
63 
64 int rt_hw_can_init(void);
65 
66 #ifdef __cplusplus
67 }
68 #endif
69 
70 #endif /* __DRV_CAN_H__ */
71