📄 canapp.h
字号:
/****************************************Copyright (c)**************************************************
** 广州周立功单片机发展有限公司
** 研 究 所
** 产品一部
** http://www.zlgmcu.com
**-----------------------------------------------------------文件信息--------------------------------------------------------------------------------
** 文 件 名: CANAPP.H
** 版 本: v1.0
** 日 期: 2004年2月23日
** 描 述: CAN模块应用接口函数定义头文件。
********************************************************************************************************/
#ifndef _CANAPP_H_
#define _CANAPP_H_
#ifndef _CANAPP_GLOBAL_
#define CANAPP_GLOBAL extern
#else
#define CANAPP_GLOBAL
#endif
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include "canfunc.h"
//数据类型定义
/**********************************************************************************************************
** 在本驱动里应用一个接收环形缓冲区,来存放接收到的邋錍AN数据数据,环形缓冲区的大小在CUSTOM.H中定义,下
** 面是环形缓冲区的数据结构
************************************************************************************************************/
typedef struct _RcvCANDataCycleBuf_
{
UINT32 WritePoint1 :8; //CAN1的写指针
UINT32 WritePoint2 :8;
UINT32 WritePoint3 :8;
UINT32 WritePoint4 :8;
UINT32 ReadPoint1 :8; //CAN1的读指针
UINT32 ReadPoint2 :8;
UINT32 ReadPoint3 :8;
UINT32 ReadPoint4 :8;
UINT32 FullFlag1 :8; //CAN1缓冲区满标志
UINT32 FullFlag2 :8;
UINT32 FullFlag3 :8;
UINT32 FullFlag4 :8;
stcRxBUF RcvBuf[CAN_MAX_NUM][USE_CAN_RCV_BUF_SIZE];
}stcRcvCANCyBuf,*P_stcRcvCANCyBuf;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<更改的地方<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//告警数据的信号结构
//告警数据结构的第一个字节
typedef union _infoalarm_1_
{
UINT8 Word;
struct
{
UINT8 lim_current :2; //限流状态
UINT8 close :2; //关闭状态
UINT8 water_press :2; //冷却状态
UINT8 reserve :2; //保留
}Bits;
}infotAlarm_1, *P_infotAlarm_1;
//告警数据结构的第二个字节
typedef union _infoalarm_2_
{
UINT8 Word;
struct
{
UINT8 pengzhuang :2; //碰撞状态
UINT8 shidu :2; //湿度过高状态
UINT8 loudian :2; //车身漏电状态
UINT8 shuiwen :2; //保留
}Bits;
}infotAlarm_2, *P_infotAlarm_2;
//告警数据结构的第二个字节
typedef union _infoalarm_3_
{
UINT8 Word;
struct
{
UINT8 vacuum_sta :2; //真空压力状态
UINT8 reserve1 :6; //保留
}Bits;
}infotAlarm_3, *P_infotAlarm_3;
//状态和命令信号结构1:
typedef union _coMMand_1_
{
UINT8 Word;
struct
{
UINT8 zhujiechuqi :2;
UINT8 fengjidi :2;
UINT8 fengjigao :2;
UINT8 zhenkongbeng :2;
}Bits;
}Comstate_1, *P_Comstate_1;
//状态报文结构2:
typedef union _coMMand_2_
{
UINT8 Word;
struct
{
UINT8 airjidianqi :2;
UINT8 rsv1 :2;
UINT8 shuibeng :2;
UINT8 lengning :2;
}Bits;
}Comstate_2, *P_Comstate_2;
//=====================对接受到的数据进行2位处理=============
typedef union _rcv_data_
{
char Word;
struct
{
char bit_1 :2;
char bit_2 :2;
char bit_3 :2;
char bit_4 :2;
}RCV_bit;
}RCV_candata,*pRCV_candata;
CANAPP_GLOBAL pRCV_candata pcanData;
//===========================================================================
//应用环形缓冲区定义
CANAPP_GLOBAL stcRcvCANCyBuf CANRcvBufApp;
//<<<<<<<<<<<<<<<<<<<<<<<add struct data in here<<<<<<<<<<<<<<<<<<<<<<<<<<<<
CANAPP_GLOBAL infotAlarm_1 infoalarm_1;
CANAPP_GLOBAL infotAlarm_2 infoalarm_2;
CANAPP_GLOBAL infotAlarm_3 infoalarm_3;
CANAPP_GLOBAL Comstate_1 comstate_1;
CANAPP_GLOBAL Comstate_2 comstate_2;
CANAPP_GLOBAL uint8 vacuum_pressure;//真空度值
CANAPP_GLOBAL uint8 water_temp;//水温值
CANAPP_GLOBAL uint8 module_num;//DA值
CANAPP_GLOBAL uint32 rec_canPGN;
CANAPP_GLOBAL uint8 banben_flag;
CANAPP_GLOBAL uint8 MOTO_sta;
CANAPP_GLOBAL uint8 MOTO_temp;
CANAPP_GLOBAL uint8 flag_airqingqiu;
CANAPP_GLOBAL uint8 zhongya;
CANAPP_GLOBAL uint8 outtemp;
CANAPP_GLOBAL uint8 DTC_flag;
CANAPP_GLOBAL uint8 DTC_num;
CANAPP_GLOBAL uint8 DTC_type[3];
CANAPP_GLOBAL uint8 DTC_array[3];
CANAPP_GLOBAL uint8 DTC_module;
CANAPP_GLOBAL uint8 vin_flag;
CANAPP_GLOBAL uint32 rec_dlc ;
CANAPP_GLOBAL uint8 rec_flag;
//应用常量定义
CANAPP_GLOBAL const UINT32 USE_MOD_CAN[CAN_MAX_NUM];
CANAPP_GLOBAL const UINT32 USE_EWL_CAN[CAN_MAX_NUM];
CANAPP_GLOBAL const UINT32 USE_INT_CAN[CAN_MAX_NUM];
CANAPP_GLOBAL const UINT32 USE_TPM_CAN[CAN_MAX_NUM];
CANAPP_GLOBAL const UINT32 USE_BTR_CAN[CAN_MAX_NUM];
CANAPP_GLOBAL const UINT32 USE_SLP_MOD_CAN[CAN_MAX_NUM];
/*<<<<<<<<<<<<<<<<<<<<<更改的地方>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
/*********************************************************************************************************
**函数原型 : void InitCAN_byd(eCANNUM CanNum,unsigned int boud)
**参数说明 : CanNum -->> CAN控制器,值不能大于CAN_MAX_NUM 规定的值
* unsigned int boud_k -->> CAN的初始化波特率值.unit:kbps
**返回值 : 无
**说 明 ; 在初始化CAN函数的基础上增加设定波特率的功能
* : 对于波特率的使用只需要在主函数中修改就行,此出无须改动
* : 给定特定的波特率的值就行了
***********************************************************************************************************/
CANAPP_GLOBAL void InitCAN_byd(eCANNUM CanNum,unsigned int boud_kbps_1) ;
/*
***********************************************************************************************************
**函数原型 : UINT32 CANSendData(eCANNUM CanNum,UINT32 Cmd,P_stcTxBUF Buf)
**参数说明 : CanNum -->> CAN控制器,值不能大于CAN_MAX_NUM 规定的值
Cmd à> 发送命令字
Buf à> 要发送的数据
**返回值 : 无
**说 明 : 本函数用于将数据发送到CAN总线
************************************************************************************************************/
CANAPP_GLOBAL UINT32 CANSendData(eCANNUM CanNum,UINT32 Cmd,P_stcTxBUF Buf);
/*
***********************************************************************************************************
**函数原型 : void CANIntPrg(void)
**参数说明 : 无
**返回值 : 无
**说 明 : CAN控制器中断处理函数
************************************************************************************************************/
CANAPP_GLOBAL __irq void CANIntPrg(void);
/*
***********************************************************************************************************
**函数原型 : UINT32 ReadCANRcvCyBuf(eCANNUM CanNum,stcRxBUF *Buf)
**参数说明 : CanNum -->> CAN控制器,值不能大于CAN_MAX_NUM 规定的值
Buf à> 使用驱动接收到的缓冲区数据
**返回值 : =0,驱动接收到数据。
!=0,驱动没接收到数据。
**说 明 : 本函数用于用户调用使用CAN驱动接收到的数据。
************************************************************************************************************/
CANAPP_GLOBAL UINT32 ReadCANRcvCyBuf(eCANNUM CanNum,stcRxBUF *Buf);
/*
***********************************************************************************************************
**函数原型 : void WriteCANRcvCyBuf(eCANNUM CanNum)
**参数说明 : CanNum -->> CAN控制器,值不能大于CAN_MAX_NUM 规定的值
**返回值 :
**说 明 : 本函数用于驱动将收到的CAN数据写入环形缓冲区
************************************************************************************************************/
CANAPP_GLOBAL void WriteCANRcvCyBuf(eCANNUM CanNum);
/*<<<<<<<<<<<<<<<<<<<<<更改的地方>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
/****************************************************************************************
*
*old_Filename :V1
*date :20050114
*author :fufengwei
*UINT32 CANSendData_byd(eCANNUM CanNum, int InfoType, UINT32L data)
*
*new_Filename :V1.1
*data :20050406
*author :luolin && zhangjia
*UINT32 CANSendData_byd(eCANNUM CanNum, UINT32 InfoType,UINT32L sendId, UINT32L data)
*description :主控ECU CAN 发送专用函数。
* 基于byd CAN协议---EF3 CAN总线协议(草案).doc
* 发送时,默认使用mode 0。
* 帧格式为标准帧
* 帧类型为数据帧
*input :eCANNUM CanNum----:要发送的CAN 端口
* int InfoType----------:要发送的CAN数据类型.具体如下:
* ==0, 电池电压
* ==1, 车速
* ==2, 里程
* UINT32L data---------:实际数据值。根据InfoType值的不同,
* 可以是电池电压、车速、里程etc....
* data中接受的数据为扩展比例之后的
* eg.电池电压为312.2V, 则传递给data的数据
* 应该时312.2 * 100, 也就是31220.
*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*increase : UINT32L sendID-------:
*
*
*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*return :UINT32--即调用CANSendData函数的返回值
****************************************************************************************/
UINT32 CANSendData_bydold(eCANNUM CanNum, UINT32 InfoType,UINT32L sendId, UINT32L data);
UINT32 CANSendData_byd(eCANNUM CanNum, UINT32 InfoType,UINT32L sendId, UINT32L data,UINT32L data1);
/*<<<<<<<<<<<<<<<<<<<<<更改的地方>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
/****************************************************************************************
*
*Filename :
*date :20050115
*author :fufengwei
*
*UINT32 CANReadData_byd(eCANNUM CanNum, unsigned long int* pIdCAN,
* unsigned int* pLengthOfData, char* pData)
*description :主控ECU CAN 接收专用function.
* 基于byd CAN协议---EF3 CAN总线协议(草案).doc
*input :eCANNUM CanNum--------:要接收的CAN 端口
* unsigned long int* pIdCAN--:存放接收到的CAN数据的ID。默认为11位。
* cunsigned intr* pLengthOfData-------:存放接收的CAN数据长度-DLC
* char* pData--------------:存放接收到的CAN数据。调用者应该使
* 此指针指向一个8 Bytes的char数组
*return :UINT32--即调用ReadCANRcvCyBuf函数的返回值
* ==0,驱动接收到数据。
* !=0,驱动没接收到数据.
****************************************************************************************/
UINT32 CANReadData_byd(eCANNUM CanNum, unsigned long int* pIdCAN,
unsigned int* pLengthOfData, char* pData);
/****************************************************************************************
**函数名:UINT32 CANSendData_29bit(eCANNUM CanNum,UINT32L Pgn ,UINT32L data,UINT32L data1)
**时间:2006-4-25
**输入:CANSendData(CanNum, 0, &SendData)函数
**返回:
**说明:用于29位ID的数据的发送
******************************************************************************************/
UINT32 CANSendData_29bit(eCANNUM CanNum,UINT32L Pgn ,UINT32L data,UINT32L data1);
/*<<<<<<<<<<<<<<<<<<<<<更改的地方>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
/****************************************************************************************
*
*UINT32 CANReadData_29bit(eCANNUM CanNum, unsigned long int* pIdCAN,
* unsigned int* pLengthOfData, char* pData)
*description :主控ECU CAN 接收专用function.
****************************************************************************************/
UINT32 CANReadData_29bit(eCANNUM CanNum, uint32* CANPGN,
uint32* pLengthOfData, pRCV_candata pData);
#endif
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -