can_config.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. /*
  2. * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2022-04-28 CDT first version
  9. */
  10. #ifndef __CAN_CONFIG_H__
  11. #define __CAN_CONFIG_H__
  12. #include <rtthread.h>
  13. #include "irq_config.h"
  14. #ifdef __cplusplus
  15. extern "C" {
  16. #endif
  17. #ifdef BSP_USING_CAN1
  18. #define CAN1_CLOCK_SEL (CAN_CLOCK_SRC_40M)
  19. #ifdef RT_CAN_USING_CANFD
  20. #define CAN1_CANFD_MODE (CAN_FD_MD_ISO)
  21. #endif
  22. #define CAN1_NAME ("can1")
  23. #ifndef CAN1_INIT_PARAMS
  24. #define CAN1_INIT_PARAMS \
  25. { \
  26. .name = CAN1_NAME, \
  27. .single_trans_mode = RT_FALSE \
  28. }
  29. #endif /* CAN1_INIT_PARAMS */
  30. #endif /* BSP_USING_CAN1 */
  31. #ifdef BSP_USING_CAN2
  32. #define CAN2_CLOCK_SEL (CAN_CLOCK_SRC_40M)
  33. #ifdef RT_CAN_USING_CANFD
  34. #define CAN2_CANFD_MODE (CAN_FD_MD_ISO)
  35. #endif
  36. #define CAN2_NAME ("can2")
  37. #ifndef CAN2_INIT_PARAMS
  38. #define CAN2_INIT_PARAMS \
  39. { \
  40. .name = CAN2_NAME, \
  41. .single_trans_mode = RT_FALSE \
  42. }
  43. #endif /* CAN2_INIT_PARAMS */
  44. #endif /* BSP_USING_CAN2 */
  45. /* Bit time config
  46. Restrictions: u32TimeSeg1 >= u32TimeSeg2 + 1, u32TimeSeg2 >= u32SJW.
  47. Baudrate = CANClock/(u32Prescaler*(u32TimeSeg1 + u32TimeSeg2))
  48. TQ = u32Prescaler / CANClock.
  49. Bit time = (u32TimeSeg2 + u32TimeSeg2) x TQ.
  50. The following bit time configures are based on CAN Clock 40M
  51. */
  52. #define CAN_BIT_TIME_CONFIG_1M_BAUD \
  53. { \
  54. .u32Prescaler = 2, \
  55. .u32TimeSeg1 = 16, \
  56. .u32TimeSeg2 = 4, \
  57. .u32SJW = 4 \
  58. }
  59. #define CAN_BIT_TIME_CONFIG_800K_BAUD \
  60. { \
  61. .u32Prescaler = 2, \
  62. .u32TimeSeg1 = 20, \
  63. .u32TimeSeg2 = 5, \
  64. .u32SJW = 4 \
  65. }
  66. #define CAN_BIT_TIME_CONFIG_500K_BAUD \
  67. { \
  68. .u32Prescaler = 4, \
  69. .u32TimeSeg1 = 16, \
  70. .u32TimeSeg2 = 4, \
  71. .u32SJW = 4 \
  72. }
  73. #define CAN_BIT_TIME_CONFIG_250K_BAUD \
  74. { \
  75. .u32Prescaler = 8, \
  76. .u32TimeSeg1 = 16, \
  77. .u32TimeSeg2 = 4, \
  78. .u32SJW = 4 \
  79. }
  80. #define CAN_BIT_TIME_CONFIG_125K_BAUD \
  81. { \
  82. .u32Prescaler = 16, \
  83. .u32TimeSeg1 = 16, \
  84. .u32TimeSeg2 = 4, \
  85. .u32SJW = 4 \
  86. }
  87. #define CAN_BIT_TIME_CONFIG_100K_BAUD \
  88. { \
  89. .u32Prescaler = 20, \
  90. .u32TimeSeg1 = 16, \
  91. .u32TimeSeg2 = 4, \
  92. .u32SJW = 4 \
  93. }
  94. #define CAN_BIT_TIME_CONFIG_50K_BAUD \
  95. { \
  96. .u32Prescaler = 40, \
  97. .u32TimeSeg1 = 16, \
  98. .u32TimeSeg2 = 4, \
  99. .u32SJW = 4 \
  100. }
  101. #define CAN_BIT_TIME_CONFIG_20K_BAUD \
  102. { \
  103. .u32Prescaler = 100, \
  104. .u32TimeSeg1 = 16, \
  105. .u32TimeSeg2 = 4, \
  106. .u32SJW = 4 \
  107. }
  108. #define CAN_BIT_TIME_CONFIG_10K_BAUD \
  109. { \
  110. .u32Prescaler = 200, \
  111. .u32TimeSeg1 = 16, \
  112. .u32TimeSeg2 = 4, \
  113. .u32SJW = 4 \
  114. }
  115. #ifdef __cplusplus
  116. }
  117. #endif
  118. #endif /* __CAN_CONFIG_H__ */