/****************************************************************************** �� �� ����Communication_Over_CAN.h ��������������CAN���ߵ��ź��շ�������ͷ�ļ� �� �ߣ����� �� ����V1.3 �� �ڣ�2017.5.31 ******************************************************************************/ #ifndef _COMMUNICATION_OVER_CAN_ #define _COMMUNICATION_OVER_CAN_ #include "API.h" #ifdef _CAN_J1939_ //----hyq--20180717 ����J1939CAN #include "MSCAN0_J1939.h" #include "DoCAN_J1939.h" #else #include "MSCAN0.h" #include "DoCAN_ISO15765.h" #endif //#include "MSCAN0.h" #include "CAN_Communication_Matrix.h" /****************************************************************************** CANͨ�Ų������� ******************************************************************************/ #define CoCAN_RX_MSG_FIFO_MAX_DEPTH 16 //����FIFO��� #define CoCAN_MSG_NUM_CHECK 0 //�����������(Debug��) #define CoCAN_TOTAL_MSG_NUM (sizeof(CANMsgAttrTable) / sizeof(CANMsgAttrStruct)) /****************************************************************************** CANͨ���շ�ʹ��״̬ ******************************************************************************/ #define CoCAN_DISABLE 0 #define COCAN_PSEUDO_DISABLE 1 #define CoCAN_ENABLE 2 /****************************************************************************** CAN���ķ�������״̬ ******************************************************************************/ #define CoCAN_TX_IDLE 0 #define CoCAN_TX_REQ 1 #define CoCAN_TX_ON 2 /****************************************************************************** CAN���ķ�������״̬ ******************************************************************************/ #define CoCAN_MODE_NORMAL 0 #define CoCAN_MODE_INIT 1 /****************************************************************************** CAN���ķ���FIFO�ṹ ******************************************************************************/ typedef struct { uint8_t Index[CAN_TX_MSG_NUM]; uint8_t Iptr; uint8_t Optr; uint8_t Depth; } CoCANTxMsgFIFOStruct; /****************************************************************************** CAN���Ľ���FIFO�ṹ ******************************************************************************/ typedef struct { uint16_t Identifier; uint8_t Data[8]; uint8_t DLC; } CoCANMsgStruct; typedef struct { CoCANMsgStruct Msg[CoCAN_RX_MSG_FIFO_MAX_DEPTH]; uint8_t Iptr; uint8_t Optr; uint8_t Depth; } CoCANRxMsgFIFOStruct; /****************************************************************************** CAN���Ŀ��ٲ��ұ��ṹ ******************************************************************************/ /*** ���ͱ��IJ��ұ��ṹ ***/ typedef struct { uint16_t Identifier; //����ID uint16_t Offset; //���ķ���ʱ��ƫ�� uint16_t Cycle; //���ķ������� uint8_t Rsvd; //���� uint8_t Index; //���ͱ��Ķ�Ӧ�������Ա��ı��е����,0xFF��ʾ�������Ա��� uint8_t TxReq; //�������� uint8_t DLC; //���ij��� volatile uint8_t *pMsg; //���ļĴ��� const uint8_t *pInit; //���ij�ʼ��ֵ volatile uint8_t *pStatus; //״̬�Ĵ��� } CoCANTxMsgIDLookupStruct; /*** ���ձ��IJ��ұ��ṹ ***/ typedef struct { uint16_t Identifier; //����ID uint16_t Cycle; //���ij�ʱ����,���ڵ����ж� uint8_t Rsvd; //���� uint8_t Index; //���ձ��Ķ�Ӧ�������Ա��ı��е����,0xFF��ʾ�������Ա��� uint8_t DLCMax; //������� uint8_t DLCMin; //������С���� volatile uint8_t *pMsg; //���ļĴ��� const uint8_t *pInit; //���ij�ʼ��ֵ const uint8_t *pTimeOut; //���ĵ���ֵ const uint8_t *pMask; //��������λ(����ijһλ�ڵ���ʱ�Ƿ����Ϊ����ֵ) volatile uint8_t *pStatus; //״̬�Ĵ��� } CoCANRxMsgIDLookupStruct; /****************************************************************************** CAN�����Ա��Ĺ����ṹ ******************************************************************************/ typedef struct { uint8_t TxNum; //�����Է��ͱ������� uint8_t TxIndex[CAN_TX_MSG_NUM]; //���Ķ�Ӧ�ڷ��ͱ��IJ��ұ��е���� uint16_t TxTimer[CAN_TX_MSG_NUM]; //���ͱ��Ķ�ʱ�� uint8_t RxNum; //�����Է��ͱ������� uint8_t RxIndex[CAN_RX_MSG_NUM]; //���Ķ�Ӧ�ڷ��ͱ��IJ��ұ��е���� uint16_t RxTimer[CAN_RX_MSG_NUM]; //���ձ��Ķ�ʱ��,���ڵ����ж� } CoCANCycleMsgStruct; /****************************************************************************** CANͨ�ſ��ƽṹ ******************************************************************************/ typedef struct { uint8_t Mode; uint8_t TxEnable; uint8_t RxEnable; uint8_t Prescaler; uint16_t Timer; } CoCANCtrlStruct; /****************************************************************************** �������� ******************************************************************************/ void CoCAN_L_Data_Indication(uint16_t Identifier, uint8_t DLC, uint8_t *Data); //��������һ�㺯������ void CoCAN_L_Data_Request(uint16_t Identifier, uint8_t DLC, uint8_t *Data); void CoCAN_L_Data_Confirm(uint16_t Identifier, uint8_t TransferStatus); //��������һ�㺯������ void CoCAN_Init(void); void CoCAN_Reset(void); void CoCAN_Set_Mode(uint8_t Mode); void CoCAN_Rx_Enable(uint8_t En); void CoCAN_Tx_Enable(uint8_t En); uint8_t CoCAN_Search_Tx_Msg(uint16_t Identifier); uint8_t CoCAN_Search_Rx_Msg(uint16_t Identifier); void CoCAN_Signal_Update_Service(void); //����ÿ1ms������һ�� void CoCAN_Transmit_Message(uint16_t Identifier); void CoCAN_Modify_Tx_Msg_Cycle(uint16_t Identifier, uint16_t Cycle); void CoCAN_Init_Mode_Tx_ISR(void); #endif