can.h
上传用户:wealth48
上传日期:2022-06-24
资源大小:1701k
文件大小:2k
源码类别:

uCOS

开发平台:

C/C++

  1. #ifndef __CAN_H__
  2. #define __CAN_H__
  3. #include "includes.h"
  4. #include "../inc/macro.h"
  5. //CAN poll 函数的返回值
  6. #define CANPOLL_Rev 1 //接收到数据
  7. #define CANPOLL_SendEnd 2 //发送完毕
  8. typedef enum{
  9. BandRate_125kbps,
  10. BandRate_250kbps,
  11. BandRate_500kbps,
  12. BandRate_1Mbps
  13. }CanBandRate;
  14. typedef struct {
  15. unsigned int id; //CAN总线ID
  16. unsigned char data[8]; //CAN总线数据
  17. unsigned int dlc; //数据长度
  18. BOOL IsExt;  //是否是扩展总线
  19. BOOL rxRTR; //是否是远程帧
  20. }CanData, *PCanData;
  21. /*********************************************************************
  22. CAN设备设置接收过滤器结构体
  23. 参数: IdMask,Mask
  24. IdFilter,Filter
  25. 是否接收数据按照如下规律:
  26. Mask Filter RevID Receive
  27. 0 x x yes
  28. 1 0 0 yes
  29. 1 0 1 no
  30. 1 1 0 no
  31. 1 1 1 yes
  32. *********************************************************************/
  33. typedef struct{
  34. unsigned int Mask;
  35. unsigned int Filter;
  36. BOOL IsExt; //是否是扩展ID
  37. }CanFilter,*PCanFilter;
  38. #define CAN_REVBUFFER_SIZE 100
  39. typedef struct{
  40. CanData buffer[CAN_REVBUFFER_SIZE];
  41. OS_EVENT *Rev_mbox;                   //receive mail box
  42. int nCanRevpos; //接收缓冲区位置
  43. int nCanReadpos; //读取缓冲区位置
  44. }struct_CAN_Buffer;
  45. /*********************************************************************
  46. CAN设备初始化函数
  47. 参数: bandrate,CAN波特率
  48. LoopBack,是否是LoopBack模式
  49. pfilter,CAN过滤器结构体指针,
  50. 如果为NULL,则接受所有数据
  51. *********************************************************************/
  52. typedef int (*can_init_func_t)(CanBandRate bandrate, BOOL LoopBack, PCanFilter pfilter);
  53. typedef void (*can_Open_func_t)(void);
  54. typedef void (*can_Close_func_t)(void);
  55. typedef int (*can_Poll_func_t)(void);
  56. typedef int (*can_read_func_t)(PCanData data);
  57. typedef int (*can_write_func_t)(PCanData data);
  58. typedef int (*can_flush_input_func_t)(void);
  59. typedef int (*can_flush_output_func_t)(void);
  60. typedef struct {
  61. can_init_func_t init;
  62. can_Open_func_t Open;
  63. can_Close_func_t Close;
  64. can_read_func_t read;
  65. can_write_func_t write;
  66. can_Poll_func_t poll;
  67. can_flush_input_func_t flush_input;
  68. can_flush_output_func_t flush_output;
  69. int nIsr;
  70. } can_driver_t;
  71. void Init_Can(int ndev, CanBandRate bandrate, PCanFilter pfilter);
  72. void Open_Can(int ndev);
  73. void Close_Can(int ndev);
  74. BOOL CanRead(int ndev, PCanData data, int ntimeout);
  75. void CanSend(int ndev, PCanData data);
  76. #endif