⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zlg_can.h

📁 LPC11C14 CAN 代码
💻 H
字号:
/****************************************Copyright (c)****************************************************
**                               Guangzhou ZHIYUAN electronics Co.,LTD.
**
**                                 http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File Name:               zlg_can.h
** Last modified Date:      2010.02.25
** Version:                 1.0
** Description:             zlg_can.c的接口文件
**--------------------------------------------------------------------------------------------------------
** Created By:              张展威
** Created date:            2010.02.25
** Version:                 1.0
** Descriptions:            The original version 初始版本
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
#ifndef __ZLG_CAN_H
#define __ZLG_CAN_H

#include "dataType.h"
/*********************************************************************************************************
选择CAN 模块时钟
*********************************************************************************************************/
#define FCAN8M          8000000UL
#define FCAN6M          6000000UL
#define FCAN2M          2000000UL
#define FCAN48M         48000000UL
#define FCAN            FCAN48M                                          /* 定义CAN模块时钟              */

/*********************************************************************************************************
宏定义接收、发送报文对象
*********************************************************************************************************/
#define RE_DATA_SN              0x00FFFFFFUL                            /* 按位选择接收数据帧的报文对象 */
#define RE_REMOTE_SN            0x7F000000UL                            /* 按位选择接收远程帧的报文对象 */
#define TX_MSG_SN               32                                      /* 发送报文对象编号             */

/*********************************************************************************************************
宏定义CAN报文缓冲区长度
*********************************************************************************************************/
#define CAN_BUF_RE_LENGTH       50
#define CAN_BUF_TX_LENGTH       50

/*********************************************************************************************************
CAN 引脚连接配置(通常不需要更改)
*********************************************************************************************************/
#define CAN0_GPIO_PERIPH     SYSCTL_PERIPH_GPIOD                        /* CAN0Rx = PD0 CAN0Tx = PD1    */
#define CAN0_GPIO_BASE       GPIO_PORTD_BASE
#define CAN0_GPIO_PIN        GPIO_PIN_0 | GPIO_PIN_1

#define CAN1_GPIO_PERIPH     SYSCTL_PERIPH_GPIOF                        /* CAN1Rx = PF0 CAN1Tx = PF1    */
#define CAN1_GPIO_BASE       GPIO_PORTF_BASE
#define CAN1_GPIO_PIN        GPIO_PIN_0 | GPIO_PIN_1

#define CAN2_GPIO_PERIPH     SYSCTL_PERIPH_GPIOE                        /* CAN2Rx = PE4 CAN2Tx = PE5    */
#define CAN2_GPIO_BASE       GPIO_PORTE_BASE
#define CAN2_GPIO_PIN        GPIO_PIN_4 | GPIO_PIN_5

/*********************************************************************************************************
函数返回值
*********************************************************************************************************/
#define CAN_ERROR               0
#define CAN_OK                  1
#define BUSY                    2                                       /* 表示当前队列正在发送         */


/*********************************************************************************************************
CAN中断回调函数的消息类型(CAN节点状态)
*********************************************************************************************************/
#define CAN_FRAM_RECV           0x01                                    /* 成功接收到数据帧或远程帧     */
#define CAN_FRAM_SEND           0x02                                    /* 发送完成                     */
#define CAN_BUS_OFF             0x04                                    /* 节点脱离总线                 */
#define CAN_SEND_FAIL           0x08                                     /* 发送失败                     */
#define CAN_NO_ERROR            0x00                                    /* 没有错误                     */

/*********************************************************************************************************
定义验收过滤验收方式
*********************************************************************************************************/
#define EXT_ID_FILTER           1                                       /* 验收扩展帧                   */
#define STD_ID_FILTER           2                                       /* 验收标准帧                   */
#define STD_EXT_FILTER          3                                       /* 验收标准帧和扩展帧           */

#define UNMASK                  0x00000000UL                            /* 不使用ID滤波                 */
#define MASK                    0x1FFFFFFFUL                            /* 所有ID均参与验收滤波         */


/*********************************************************************************************************
波特率表索引宏定义
*********************************************************************************************************/
#define CANBAUD_1M              0
#define CANBAUD_500K            1
#define CANBAUD_250K            2
#define CANBAUD_125K            3
#define CANBAUD_100K            4
#define CANBAUD_50K             5
#define CANBAUD_25K             6
#define CANBAUD_20K             7
#define CANBAUD_10K             8
#define CANBAUD_5K              9
#define CANBAUD_2K5            10


/*********************************************************************************************************
帧类型及格式
*********************************************************************************************************/
#define STD_DATA               0xF0                                     /* 标准格式数据帧               */
#define XTD_DATA               0xF2                                     /* 扩展格式数据帧               */

#define STD_RMRQS              0xF1                                     /* 标准格式远程帧               */
#define XTD_RMRQS              0xF3                                     /* 扩展格式远程帧               */

#define XTD_MASK               0x02                                     /* 扩展帧掩码                   */
#define RMRQS_MASK             0x01                                     /* 远程帧掩码                   */

#define BUF_BLANK              0x00                                     /* 标记空白帧,用于队列写保护   */

/*********************************************************************************************************
定义CAN报文结构体
*********************************************************************************************************/
typedef struct {
    unsigned char ucTtypeFormat;                                        /* 0~3 帧类型及格式            */
    unsigned char ucDLC;                                                /* 数据场长度                   */
    unsigned long ulID;                                                 /* CAN报文ID                    */
    unsigned char ucDatBuf[8];                                          /* 报文数据场                   */
}CANFRAME;


/*********************************************************************************************************
定义CAN接收环形缓冲区结构
*********************************************************************************************************/
typedef struct {
    unsigned long ulWriteIndex;                                         /* 缓存Buffer[]写下标           */
    unsigned long ulReadIndex;                                          /* 缓存Buffer[]读下标           */
    BOOLEAN       bIsFull;
    unsigned long ulLength;                                             /* 记录缓存深度                 */
    CANFRAME *ptCanFramBuf;                                             /* 指向数据场缓冲区             */
}CANCIRBUF;


/*********************************************************************************************************
定义CAN控制器外设结构
*********************************************************************************************************/
typedef struct {
    unsigned long ulSysPeriph;                                          /* CAN控制器系统外设            */
    unsigned long ulBase;                                               /* CAN控制器基址                */

    unsigned long ulGpioPeriph;                                         /* GPIO外设                     */
    unsigned long ulGpioBase;                                           /* GPIO对应基址                 */
    unsigned long ulGpioPin;                                            /* 对应引脚连接                 */
} CANHARDWARE;


/*********************************************************************************************************
定义CAN节点结构体
*********************************************************************************************************/
typedef struct {
    unsigned long ulBaseAddr;                                           /* CAN控制器基址                */
    unsigned char ucNodeState;                                          /* 用于记录节点状态             */
    unsigned char ucBaudIndex;                                          /* 波特率参数索引               */
    unsigned long ulBofTimer;                                           /* 本节点脱离总线后的计时变量   */
    unsigned long ulDaReObjMsk;                                         /* 接收数据帧的报文对象,按位选通*/
    unsigned long ulRmReObjMsk;                                         /* 接收远程帧的报文对象,按位选通*/
    unsigned long ulTxMsgObjNr;                                         /* 按位标记发送报文对象         */
    CANCIRBUF *ptCanReCirBuf;                                           /* 指向本节点的接收缓冲区       */
    CANCIRBUF *ptCanTxCirBuf;                                           /* 指向本节点的发送缓冲区       */
    void (*pfCanHandlerCallBack)(unsigned long ulMessage, long lParam1, long lParam2);
    //提供给中断处理函数canHandler()的回调函数,在收到数据帧或远程帧时调用
    void (*pfIsrHandler)(void);                                         /* CAN节点的中断服务函数        */
}CANNODEINFO;

/*********************************************************************************************************
用于定义并初始化CAN节点结构体变量的宏
*********************************************************************************************************/
#define CANNODE(ulBaseAddr, ucBaudIndex, ulDaReObjMsk, ulRmReObjMsk,    \
                ulTxMsgObjNr,ptReCirBuf, pfCanHandlerCallBack,          \
                pfIsrHandler)                                           \
        {                                                               \
           ulBaseAddr,                                                  \
           0,                                                           \
           ucBaudIndex,                                                 \
           0,                                                           \
           ulDaReObjMsk,                                                \
           ulRmReObjMsk,                                                \
           ulTxMsgObjNr,                                                \
           (CANCIRBUF *)ptReCirBuf,                                      \
           (CANCIRBUF *)0,                                               \
           pfCanHandlerCallBack,                                        \
           pfIsrHandler,                                                \
        }


/*********************************************************************************************************
接口函数
*********************************************************************************************************/
extern INT8U canCirBufRead(CANCIRBUF *ptCanCirBuf, CANFRAME  *ptCanFrame);
extern INT8U canCirBufWrite(CANCIRBUF *ptCanCirBuf, CANFRAME *ptCanFrame);
extern INT8U canCirBufSend(CANNODEINFO *ptCanNode, CANCIRBUF *ptCanCirBuf);
extern void canFrameSend(CANNODEINFO *ptCanNode, CANFRAME  *pCANFrame);
extern void canIntEnable (CANNODEINFO *ptCanNode);
extern void canHandler(CANNODEINFO *ptCanNode);
extern void canNodeBusOn(CANNODEINFO *ptCanNode);
extern void canNodeCreate(CANNODEINFO *ptCanNode,
                          unsigned long ulBaseAddr,
                          unsigned char ucBaudIndex,
                          unsigned long ulDaReObjMsk,
                          unsigned long ulRmReObjMsk,
                          unsigned long ulTxMsgObjNr,
                          CANCIRBUF *ptReCirBuf,
                          void (*pfCanHandlerCallBack)(unsigned long ulMessage, long lParam1, long lParam2),
                          void (*pfIsrHandler)(void));
extern void canNodeCallBackSet(CANNODEINFO *ptCanNode,
                               void (*pfHandlerCallBack)(unsigned long ulMessage,
                                                         long lParam1, long lParam2));
extern void canAcceptFilterSet(CANNODEINFO *ptCanNode,
                               unsigned long ulFrameID,
                               unsigned long ulFrameIDMask,
                               unsigned char ucFramType);
extern void canReMsgObjSet(CANNODEINFO *ptCanNode,
                           unsigned long ulMsgObjMask,
                           unsigned long ulFrameID,
                           unsigned long ulFrameIDMask,
                           unsigned char ucFramType,
                           unsigned char ucMsgType);
extern INT8U canApplyInit(CANNODEINFO *ptCanNode,
                          unsigned long ulFrameID,
                          unsigned long ulFrameIDMsk,
                          unsigned char ucFramType);

/*********************************************************************************************************
提供给外部引用的结构体常量
*********************************************************************************************************/
extern const CANFRAME GtCanFrameInit;                                   /* 已初始化为空白的CAN缓存块    */

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -