drv_can.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. #ifndef DRV_CAN_H
  2. #define DRV_CAN_H
  3. #include "shark_types.h"
  4. #define FRAME_PRO_0 (0)
  5. #define FRAME_PRO_1 (1)
  6. #define FRAME_PRO_2 (2)
  7. #define FRAME_PRO_3 (3)
  8. #define FRAME_PRO_4 (4)
  9. #define FRAME_PRO_5 (5)
  10. #define FRAME_PRO_6 (6)
  11. #define FRAME_PRO_7 (7)
  12. #define FRAME_PRO_D (FRAME_PRO_0)
  13. #define FRAME_PT_NEED_RSP (1)
  14. #define FRAME_PT_RSP (2)
  15. #define FRAME_PT_NO_RSP (3)
  16. #define PRINTF_TER_ID (0x45UL)
  17. #define SELF_ID (0x42UL)
  18. #define CTR_ID (0x43UL)
  19. #define BROCAST_ID (0x7FUL)
  20. #define CAN_TX_BUF_MAX (256)
  21. #define CAN_RX_BUF_MAX (256)
  22. #define CAN_RX_CTR_BRO_BUF_MAX (256)
  23. #define CAN_RX_TEST_BRO_BUF_MAX (256)
  24. #define get_index_total_value(x) ((x)?(x):(32))
  25. #define Silent_Enable(x) gpio_bit_write(GPIOA,GPIO_PIN_7,(bit_status)(x))
  26. typedef union {
  27. u32 value;
  28. struct {
  29. u32 dest :7;
  30. u32 src :7;
  31. u32 index :5;
  32. u32 total :5;
  33. u32 type :2;
  34. u32 priority :3;
  35. u32 length :3;
  36. };
  37. } shark_can_efid_t;
  38. typedef struct {
  39. shark_can_efid_t efid;
  40. union {
  41. u16 key;
  42. u8 data[8];
  43. u32 values[2];
  44. };
  45. } shark_can_frame_t;
  46. #pragma pack (push,1)
  47. typedef struct
  48. {
  49. uint32_t other:3;
  50. uint32_t dest:7;
  51. uint32_t sour:7;
  52. uint32_t index:5;
  53. uint32_t total:5;
  54. uint32_t rsp:2;
  55. uint32_t pro:3;
  56. }HEAD;
  57. typedef struct
  58. {
  59. HEAD head;
  60. uint8_t* data;
  61. uint16_t len;
  62. }CAN_FRAME;
  63. #pragma pack(pop)
  64. extern CAN_FRAME can_ctr_self;
  65. extern CAN_FRAME can_ctr_bro;
  66. extern CAN_FRAME can_test_bro;
  67. enum
  68. {
  69. BMS_1_SELF,
  70. BMS_1_CUR_VOL_SELF,
  71. BMS_1_RSP,
  72. BMS_1_RESEND,
  73. TIMEOUT_BMS_1_RESEND,
  74. BMS_2_SELF,
  75. BMS_2_CUR_VOL_SELF,
  76. BMS_2_RSP,
  77. BMS_2_RESEND,
  78. TIMEOUT_BMS_2_RESEND,
  79. CTR_SELF,
  80. CTR_RSP,
  81. CTR_RESEND,
  82. TIMEOUT_CTR_RESEND,
  83. ADAS_SELF,
  84. ADAS_RSP,
  85. ADAS_RESEND,
  86. TIMEOUT_ADAS_RESEND,
  87. OTHER_SEND,
  88. CAN_TEST
  89. };
  90. void CAN_Config_HW(void);
  91. void CAN_Config(void);
  92. uint16_t Get_Data_Can(CAN_FRAME*app_can_frame);
  93. int8_t Send_Data_Can(CAN_FRAME*app_can_frame,uint8_t from);
  94. void Check_Can_Poll(void);
  95. void Can_Stop_Send(void);
  96. shark_bool shark_can_send_frame(shark_can_efid_t efid, const void *buff, u8 length);
  97. shark_bool shark_can_send(u8 dest, u8 src, u8 type, const u8 *buff, u16 length);
  98. void shark_can_tx_flush(void);
  99. #endif