📄 can_unit.h
字号:
/************************************************************************
*
* Freescale Semicondactor
* ALL RIGHTS RESERVED
* (c) Copyright 2004Freescale Semiconductor
*
*************************************************************************
*
* FILE NAME: can_unit.h
*
* PURPOSE: Header file for can_init.c and can_routine.c
*
* AUTHOR(s): Igor Byeda
*
*************************************************************************/
#ifndef CAN_unit_H
#define CAN_unit_H
#include PROCESSOR_H
#include INIT_H
#include "stdlib.h"
//#define CAN_DEBUG_MSG
// VERSION
#define CAN_VERSION ("2.1.0") // char[5] "x.x.x" format
#define RECEIVE_ALIEN_MESSAGES_ONLY
#define CAN_UNIT_TX_RX_BUFFER_SIZE (201) // 10ms buffering on 1Mbps CAN bus speed
#define CAN_UNIT_HW_BUFFER_NUMBER (16)
#define CAN_UNIT_MESSAGE_DATA_LENGTH (8)
#define CAN_UNIT_ERROR_DESCRIP_STRING_SIZE (256)
#define CAN_UNIT_ERROR_DESCRIP_BUFFER_SIZE (5)
#define CAN_UNIT_GLOBAL_PARAM_NAME_SIZE (16)
#define PARAM_CAN_SPEED (0)
#define TX (0)
#define REMOTE (1)
#define RX (2)
#define MCF5282_FLEXCAN_MBUF_CTRL(id) (*(vuint8 *)(void *)(&__IPSBAR[0x1C0081+16*(id)]))
#define MCF5282_FLEXCAN_MBUF_CTRL_ADDR(id) (&__IPSBAR[0x1C0080+16*(id)])
#define MCF5282_FLEXCAN_MBUF_CTRL_CODE(bufferNumber) (MCF5282_FLEXCAN_MBUF_CTRL(bufferNumber) & 0xF0)
#define MCF5282_FLEXCAN_MBUF_IDH(id) (*(vuint16 *)(void *)(&__IPSBAR[0x1C0082+16*(id)]))
#define MCF5282_FLEXCAN_MBUF_IDL(id) (*(vuint16 *)(void *)(&__IPSBAR[0x1C0084+16*(id)]))
//HW Buffer codes
#define BUFFER_RX_CODE_NOT_ACTIVE (0x00)
#define BUFFER_RX_CODE_FULL (0x20)
#define BUFFER_RX_CODE_EMPTY (0x40)
#define BUFFER_RX_CODE_OVERRUN (0x60)
#define BUFFER_TX_CODE_DATA (0x80)
#define BUFFER_TX_CODE_REMOTE (0xC0)
#define MCF5282_FLEXCAN_IDH_IDE (0x08)
#define MCF5282_FLEXCAN_IDH_RTR (0x10)
#define TX_BUFFER_DATA (11)
#define TX_BUFFER_REMOTE_1 (12)
#define TX_BUFFER_REMOTE_2 (13)
#define NUMBER_OF_BYTES_IN_HW_BUFFER (14)
#define TIME_OUT_TIME (1000000)
#define CAN_START_TIMEOUT (1000) // in [ms]
//!***! need to be move in another *.h file
enum can_ErrorLevel_t {INFO, WARNING, ERROR};
typedef enum can_ErrorLevel_t can_ErrorLevel;
//!***!
enum can_unit_IntegrationState_t { can_Waiting,
can_MessageSuccesfullyReceived,
can_ErrorOccured
};
enum can_unit_PlugInState_t { can_CanOpenServer,
can_CanOpenClient,
can_DeviceNet,
can_None
};
enum can_unit_Mode_t { can_ModeStop = 0,
can_ModeIntegration,
can_ModeRunListenOnly,
can_ModeRunTransmitOnly,
can_ModeRunFull
};
enum can_unit_CurrentOperation_t { can_StatusIdle = 0,
can_StatusCanTransmittingData,
can_StatusCanReceivingData,
can_StatusFIFOCopingTo,
can_StatusFIFOCopingFrom
};
/************************************************************************
* Can Unit bus speed and bit timing parameters Strucrure
*************************************************************************/
typedef struct
{
uint32 CanSpeed;
uint8 PREScalerDIVision;
uint8 NumberOfTQ;
uint8 PROPagationSEG;
uint8 PhaseSEG1;
uint8 PhaseSEG2;
uint8 ResyncJumpWidth;
uint8 SAMPlingMode;
uint8 isStandartSpeed;
} can_SpeedParam_t;
/************************************************************************
* Can Unit Hardware Buffer Parameters Strucrure
*************************************************************************/
typedef struct
{
uint8 BufferType;
uint16 Id_H;
uint16 Id_L;
uint16 IFlag;
uint8 canBufferTxtName[CAN_UNIT_GLOBAL_PARAM_NAME_SIZE];
}can_HWBufferParam_t;
/************************************************************************
* Can Unit Message Internal Buffer Strucrure
*************************************************************************/
typedef struct
{
uint16 Ctrl;
uint16 IDH;
uint16 IDL;
uint8 data[CAN_UNIT_MESSAGE_DATA_LENGTH];
uint16 reserved; // just for structure alignment
// uint32 absDate;
uint32 absTime;
} can_Message_t;
#define CAN_MSG_LEN (sizeof(can_Message_t)/sizeof(char))
/************************************************************************
* Can Unit Errors Buffer Strucrure
*************************************************************************/
typedef struct
{
uint16 canErrCode;
uint8 canErrTxtDescription[CAN_UNIT_ERROR_DESCRIP_STRING_SIZE];
} can_err_ErrorTable_t;
/************************************************************************
* Can Unit Errors Buffer Strucrure
*************************************************************************/
typedef struct
{
uint16 canErrNumber;
can_err_ErrorTable_t* canErrTxtDescriptionPtr;
uint32 sysErrTime;
uint16 canFunctionId;
} can_err_ErrorDescript_t;
/************************************************************************
* Can Unit Errors Buffer Pointer Strucrure
*************************************************************************/
typedef struct
{
can_err_ErrorDescript_t *ptr;
can_err_ErrorDescript_t *head;
can_err_ErrorDescript_t *tail;
can_err_ErrorDescript_t *end;
uint8 count;
uint8 length;
} can_err_ErrorPointer_t;
// #pragma section CAN_SRAM_BUFFERS begin
extern uint8 can_unit_IsSpeedAutodetected;
extern can_SpeedParam_t can_CurrentSettings;
extern can_SpeedParam_t can_SpeedParam[];
extern can_HWBufferParam_t can_HWBufferParam[];
extern can_err_ErrorTable_t can_err_ErrorTable[];
extern can_err_ErrorDescript_t can_err_ErrorDescript[CAN_UNIT_ERROR_DESCRIP_BUFFER_SIZE];
extern can_err_ErrorPointer_t can_err_ErrorPointer;
extern enum can_unit_IntegrationState_t can_unit_IntegrationState;
extern enum can_unit_PlugInState_t can_unit_PlugInState;
extern uint8 can_unit_Mode;
extern volatile uint8 can_unit_CurrentOperation;
// #pragma section CAN_SRAM_BUFFERS end
/************************************************************************
* NAME: memcpy16
*
* DESCRIPTION Copies "n" bytes from "*src" location
* into "*dest" location
************************************************************************/
inline
void *
memcpy16 (void *dest, const void *src, unsigned n)
{
int longs, bytes;
uint16 *dpl = (uint16 *)dest;
uint16 *spl = (uint16 *)src;
uint8 *dpb, *spb;
if ((dest != NULL) && (src != NULL) && (n > 0))
{
bytes = (n & 0x1);
longs = (n - bytes) >> 1;
// 2 bytes copying
while (longs--)
*dpl++ = *spl++;
dpb = (uint8 *)dpl;
spb = (uint8 *)spl;
// 1 byte copying
while (bytes--)
*dpb++ = *spb++;
}
return dest;
}
/************************************************************************
* Function Prototypes
*************************************************************************/
#define can_unitInit_Id 1
#define can_get_hGlobalParamList_Id 2
#define can_set_GlobalParam_Id 3
#define can_unit_getMode_Id 4
#define can_unit_getStatus_Id 5
#define can_get_TxBufferFreeSpace_Id 6
#define can_get_TxBufferWaitingMessages_Id 7
#define can_get_RxBufferWaitingMessages_Id 8
#define can_get_IsRxBufferEmpty_Id 9
#define can_err_GetLastError_Id 10
#define can_data_CopyRxToFIFO_Id 11
#define can_data_CopyTxFromFIFO_Id 12
#define can_unit_Run_Id 13
#define can_unit_Stop_Id 14
#define can_data_SendDataToCANbus_Id 15
#define can_err_SendError_Id 16
#define can_Remote_Id 17
#define can_Rx_Id 18
uint8 can_unitInit(void);
uint8 can_unit_Run(void);
void can_unit_Stop(void);
uint8 can_unit_Auto_Integration(void);
uint8 can_unit_getMode(void);
vuint8 can_unit_getStatus(void);
void can_flexcan_init(void);
uint8 can_flexcan_setBitRate(can_SpeedParam_t*);
uint8 can_flexcan_getBitRate(can_SpeedParam_t*);
uint32 can_calcSpeedFromParams(can_SpeedParam_t*);
uint32 can_set_GlobalParam(uint8, uint32);
uint32 can_data_CopyRxToFIFO(void);
uint32 can_data_CopyTxFromFIFO(void);
uint32 can_data_SendDataToCANbus(void);
uint8 can_data_IsSelfMsgWasRecv(can_Message_t* , uint8);
can_err_ErrorDescript_t* can_err_GetLastError(void);
uint32 can_err_SendError(can_err_ErrorTable_t*, uint32, uint16);
#endif //CAN_unit_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -