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