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

📄 my_can.c

📁 ICAN协议例程
💻 C
字号:
/****************************************Copyright (c)****************************************************
**                               Guangzhou ZHIYUAN electronics Co.,LTD.
**                                     
**                                 http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File Name:               CANRcv_snd.c
** Last modified Date:      2007.01.18
** Last Version:            1.0
** Description:             CAN 通信程序
** 
**--------------------------------------------------------------------------------------------------------
** Created By:              曾维勇
** Created date:            2007.09.16
** Version:                 1.0
** Descriptions:            The original version 初始版本
**
**--------------------------------------------------------------------------------------------------------
** Modified by:             Ni Likao 倪力考
** Modified date:           2007.11.02
** Version:                 1.1
** Description:             The second version 第二版
**
*********************************************************************************************************/
#include "config.h"
/*********************************************************************************************************
  声明全局变量
*********************************************************************************************************/
/*********************************************************************************************************
** Function name:           CreateCAN
** Descriptions:            创建一个节点信息结构体
** input parameters:        *pCAN           指向节点结构的空指针
**                          ulChannelNr     节点通道号
**                          ulBaud          节点通信波特率
**			                ulRxMsgObj      节点接收数据MO
**			                ulTxMsgObj      节点发送数据MO
**			                *pReceBuff      节点接收数据缓冲区
**                          *pSendBuff      节点发送数据缓冲区
** output parameters:       无
** Returned value:          无
** Created By:              曾维勇
** Created date:            2007.09.16
**--------------------------------------------------------------------------------------------------------
** Modified by:             Ni Likao 倪力考
** Modified date:           2007.11.02
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
/*void CreateCAN (void  *pCAN,tCANFrameBuff  *pReceBuff, tCANFrameBuff  *pSendBuff)
{
    tCANNodeInfo *pCAN_Info;
	pCAN_Info = (tCANNodeInfo *)pCAN;
	pCAN_Info->pReceFrameBuff = pReceBuff;
    pCAN_Info->pSendFrameBuff = pSendBuff;

	return;
}*/		 //将其屏蔽掉,因为没有用到,

/*********************************************************************************************************
** Function name:           CAN_ucWriteBuffer
** Descriptions:            写帧接收缓冲区
** input parameters:        *pBuf           指向接收缓冲区的指针
**                          *pWrite         写数据块指针
** output parameters:       无
** Returned value:          FULL,          缓冲区已满
**                          NOT_FULL        缓冲区未满
** Created By:              曾维勇
** Created date:            2007.09.16
**--------------------------------------------------------------------------------------------------------
** Modified by:             Ni Likao 倪力考
** Modified date:           2007.11.02
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/

unsigned char CAN_ucWriteBuffer (void  *pBuf, void  *pWrite)
{
    tCANFrameBuff xdata *pRecBuf;
 	static	tCANFrame xdata *pWriteBuf;

	pRecBuf   = (tCANFrameBuff *)pBuf;
	pWriteBuf = (tCANFrame *)pWrite;
	
	if (pRecBuf->ucBufEmpty  == FULL) {                                 /*  接收缓冲区已满              */
	               
	   return FULL;
	}

	pRecBuf->ucSize ++;
	pRecBuf->ucBufFull = NOT_FULL;  
    pRecBuf->Buffer[pRecBuf->ucWrite] = *pWriteBuf;				        /*  向接收缓冲区写数据          */
    
	pRecBuf->ucWrite = (pRecBuf->ucWrite + 1) % CAN_MAX_Buffer;    
	                                                                                                           
	if (pRecBuf->ucSize == CAN_MAX_Buffer) {                            /*  接收缓冲区已满              */
        pRecBuf->ucBufFull  = FULL;
	    pRecBuf->ucBufEmpty = NOT_EMPTY;

	    return FULL;
	}

    return NOT_FULL;
}

/*********************************************************************************************************
** Function name:           CAN_ucReadBuffer
** Descriptions:            读数据缓冲区
** input parameters:        *pBuf           指向数据缓冲区指针
**                          *pRead          读数据块指针
** output parameters:       无
** Returned value:          EMPTY ,        缓冲区为空
**                          NOT_EMPTY,      缓冲区非空
** Created By:              曾维勇
** Created date:            2007.09.16
**--------------------------------------------------------------------------------------------------------
** Modified by:             Ni Likao 倪力考
** Modified date:           2007.11.02
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
unsigned char CAN_ucReadBuffer (void  *pBuf, void  *pRead)
{
    tCANFrameBuff xdata *pRecBuf;
	tCANFrame xdata *pReadBuf;

	pRecBuf  = (tCANFrameBuff *)pBuf;
	pReadBuf = (tCANFrame *)pRead;

	if (pRecBuf->ucSize == 0 ) {//缓冲内没有数据
	    pRecBuf->ucBufEmpty = EMPTY;
	    pRecBuf->ucBufFull  = NOT_FULL;

	    return EMPTY;
	}

	pRecBuf->ucSize --;
	*pReadBuf = pRecBuf->Buffer[pRecBuf->ucRead];
	pRecBuf->ucRead = (pRecBuf->ucRead + 1) % CAN_MAX_Buffer;
  
	return NOT_EMPTY;
}


/*********************************************************************************************************
** Function name:           InitCANController
** Descriptions:            初始化CAN控制器,设定波特率
** input parameters:        *pCAN           指向节点的空指针
** output parameters:       无
** Returned value:          无
** Created By:              曾维勇
** Created date:            2007.09.16
**--------------------------------------------------------------------------------------------------------
** Modified by:             Ni Likao 倪力考
** Modified date:           2007.11.02
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
/*void InitCANController (void  *pCAN)
{   
	pCAN=pCAN;
}  */   //将其屏蔽掉,因为没有用到,
/*********************************************************************************************************
** Function name:           SendBuffToBus
** Descriptions:            发送缓冲区数据至外部总线
** input parameters:        *pCAN       指向节点结构的空指针
** output parameters:       无
** Returned value:          1           发送缓冲区不空,有可数据发送
**                          0           发送缓冲区为空,无可发数据
** Created By:              曾维勇
** Created date:            2007.09.16
**--------------------------------------------------------------------------------------------------------
** Modified by:             Ni Likao 倪力考
** Modified date:           2007.11.02
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
/*unsigned char SendBuffToBus (void  *pCAN)		 
{
    tCANFrame  CANFrame;
	tCANNodeInfo *pCAN_Info;

	pCAN_Info = (tCANNodeInfo *)pCAN;
	
	if (CAN_ucReadBuffer(pCAN_Info->pSendFrameBuff, &CANFrame) != EMPTY) {
       SendCANFrame(pCAN_Info, &CANFrame);
	   return 1;
	}  
	/*
     *  发送一帧数据,启动缓冲区数据发送服务程序 
	 */
//	return 0; 
//}  */ 
 
unsigned char SendBuffToBus (void  *pCAN)
{
    tCANFrame xdata  CANFrame;
	tCANFrameBuff  * xdata pSendFrameBuff;

	pSendFrameBuff=(tCANFrameBuff *)pCAN;
	if (CAN_ucReadBuffer(pSendFrameBuff, &CANFrame) != EMPTY) {
       SendCANFrame(pSendFrameBuff, &CANFrame);
	   return 1;
	}  
	/*
     *  发送一帧数据,启动缓冲区数据发送服务程序 
	 */
	return 0; 
}











⌨️ 快捷键说明

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