亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? canapp.c

?? Can總線的控制協議
?? C
字號:
/****************************************Copyright (c)**************************************************
**                               廣州周立功單片機發展有限公司
**                                     研    究    所
**                                        產品一部 
**                                 http://www.zlgmcu.com
**-----------------------------------------------------------文件信息--------------------------------------------------------------------------------
**	文   件  	名:	CANAPP.C
** 	版  		本:	v1.0
** 	日		期:	2004年2月23日
**	描		述:	CAN模塊應用接口函數說明文件。該文件中的函數,如果用戶有特別的需要,可以進行修改。
********************************************************************************************************/
#define		_CANAPP_GLOBAL_
#include    "config.h"
#include	"IncludeCan.H"
/*
**************************************************************************************
**	定義并初始化驗收過濾ID數組
**************************************************************************************
*/
#if AF_REG_ENABLE
	#if SFF_INDV_nCell
	stcAF_SFF_CELL	sffIndvTab[] = {};
	#endif
	
	#if SFF_GRP_nCell			   
	stcAF_SFF_CELL 	sffGrpTab[] = {};
	#endif
	
	#if EFF_INDV_nCell
	stcAF_EFF_CELL	effIndvTab[]= {};
	#endif
	
	#if EFF_GRP_nCell
	stcAF_EFF_CELL	effGrpTab[] = {};
	#endif
#endif
/*
********************************************************************************************
**函數原型	:  	void	CANIntPrg(void)
**參數說明	:  	無
**返回值		:	無	
**說	明		:	CAN控制器中斷處理函數
******************************************************************************************/
void	CANIntPrg(void)
{
	INT32U 	j;
	uCANICR k;
	if(_CANLUTerr.Word != 0 )	//驗收濾波器遇到表格錯誤
	{
		//添加用戶代碼
		j=_CANLUTerrAd.Word;	
	}
	for(j=0;j<CAN_MAX_NUM;j++)
	{
		k=CANICR(j);
		if(k.Bits.RI != 0)		//接收中斷
		{
			ReadCanRxBuf(j,&CANRcvCyBufApp[j]);
		}
		
		if(k.Bits.TI1 != 0)		//第一發送緩沖區發送完成中斷
		{
		}
		
		if(k.Bits.TI2 != 0)		//第二發送緩沖區發送完成中斷
		{
		}
		
		if(k.Bits.TI3 != 0)		//第三發送緩沖區發送完成中斷
		{
		}
		
		if(k.Bits.BEI != 0)		//總線錯誤中斷
		{
			//添加用戶代碼
			CanBufOffLinePrg(j);//總線關閉處理
		}
		
		if(k.Bits.ALI != 0)		//仲裁丟失中斷
		{
		}
		
		if(k.Bits.EPI != 0)		//錯誤認可中斷
		{
		}
		if(k.Bits.WUI != 0)		//喚醒中斷
		{
		}
		if(k.Bits.DOI != 0)
		{
			//添加用戶代碼
			ClrCanDataOver(j);	//釋放接收緩沖區
		}
	}
	VICVectAddr = 0;
}

/*
***********************************************************************************************************
**函數原型		:  	void	CANRxtoTxDataConvertion (void *desBuf, void *srcBuf )
**參數說明		:  	desBuf ->目的數據
					srcBuf  ->源數據
**返回值		:	
**說	明		:	
***********************************************************************************************************
*/
void	CANRxtoTxDataConvertion (stcTxBUF *desBuf,const  stcRxBUF *srcBuf )
{
	desBuf->TxFrameInfo.Bits.DLC = srcBuf->CANRcvFS.Bits.DLC;
	desBuf->TxFrameInfo.Bits.RTR = srcBuf->CANRcvFS.Bits.RTR;
	desBuf->TxFrameInfo.Bits.FF = srcBuf->CANRcvFS.Bits.FF;
	//讀取幀ID
	desBuf->TxCANID.Bits.ID = srcBuf->RxCANID.Bits.ID;	
	//讀取幀數據
	desBuf->TDA.Word = srcBuf->RDA.Word;
	desBuf->TDB.Word = srcBuf->RDB.Word;
}
/*
***********************************************************************************************************
**函數原型		:  	INT32U	WriteCanTxBuf(eCANNUM CanNum,INT32U TxBufNum,
										INT32U TPM,P_stcTxBUF Buf) ;
**參數說明		:  	CanNum		-->>	CAN控制器,值不能大于CAN_MAX_NUM 規定的值
					TxBufNum	-->>	選擇發送緩沖區
					TPM			-->>	發送優先級模式
					Buf			-->>	發送到總線的數據
**返回值		:	=0;成功將數據寫入發送緩沖區
					!=0;寫發送緩沖區操作失敗	
**說	明		:	本函數用于向CAN發送緩沖區TxBUF寫入發送數據
***********************************************************************************************************
*/

void	WriteCanTxBuf(eCANNUM CanNum,INT32U TxBufNum,INT32U TPM,stcTxBUF *Buf)
{
		INT32U	status=0;
		switch(TxBufNum)
		{
			case	TX_BUF1:
				TxBUF1(CanNum) = *Buf;
				break;
			case	TX_BUF2:
				TxBUF2(CanNum) = *Buf;
				break;
			case	TX_BUF3:
				TxBUF3(CanNum) = *Buf;
				break;
			default:
				status = 0x01;
				break;
		}
	if(TPM == 1)
		CANMOD(CanNum).Bits.TPM =1;	//發送優先級由幀的優先級域決定
}

/*
***********************************************************************************************************
**函數原型		:  	void	ReadCanRxBuf(eCANNUM CanNum,stcRcvCANCyBuf *RcvCyBuf)
**參數說明		:  	CanNum	-->>	CAN控制器,值不能大于CAN_MAX_NUM 規定的值
**					RcvCyBuf-->>	目標環形緩沖區指針
**返回值		:		
**說	明		:	本函數用于驅動將收到的CAN數據寫入環形緩沖區Buf->CANRcvFS 	=CANRFS(CanNum);
************************************************************************************************************/
INT32U	ReadCanRxBuf(eCANNUM CanNum,stcRcvCANCyBuf *RcvCyBuf)
{
	INT32U	PointTemp = 0;
	INT32U	Statue = 0;
	PointTemp = RcvCyBuf->WritePoint;
	if((0 == RcvCyBuf->FullFlag))
	{
		RcvCyBuf->RcvBuf[PointTemp].CANRcvFS = RxBUF(CanNum).CANRcvFS;
		RcvCyBuf->RcvBuf[PointTemp].RxCANID = RxBUF(CanNum).RxCANID;
		RcvCyBuf->RcvBuf[PointTemp].RDA = RxBUF(CanNum).RDA;
		RcvCyBuf->RcvBuf[PointTemp].RDB = RxBUF(CanNum).RDB;
		if(++RcvCyBuf->WritePoint >= USE_CAN_cycRCV_BUF_SIZE)
			RcvCyBuf->WritePoint=0;
		if(RcvCyBuf->WritePoint == RcvCyBuf->ReadPoint)
			RcvCyBuf->FullFlag =1;
	}
	else
		Statue = 1;
	RelCanRecBuf(CanNum);
	return Statue;
}

/*
***********************************************************************************************************
**函數原型	:  	INT32U	CANSendData(eCANNUM CanNum,INT32U Cmd,P_stcTxBUF Buf)
**參數說明	:  	CanNum	-->>	CAN控制器,值不能大于CAN_MAX_NUM 規定的值
				Cmd		-->	發送命令字
				Buf		-->	要發送的數據
**返回值		:	無	
**說	明		:	本函數用于將數據發送到CAN總線
************************************************************************************************************/
INT32U		CANSendData(eCANNUM CanNum,INT32U Cmd, stcRxBUF *RxBuf)
{
	INT32U TxBufNum,status =0;
	stcTxBUF	TxBuf ;
	if((0== CANSR(CanNum).Bits.TS1)&&(0 != CANSR(CanNum).Bits.TBS1))
	{
		TxBufNum=TX_BUF1;
	}
	else if((0== CANSR(CanNum).Bits.TS2)&&(0 != CANSR(CanNum).Bits.TBS2))
	{
		TxBufNum=TX_BUF2;
	}
	else if((0== CANSR(CanNum).Bits.TS3)&&(0 != CANSR(CanNum).Bits.TBS3))
	{
		TxBufNum=TX_BUF3;
	}
	else
	{
		TxBufNum=0xFF;
		status = 1;
	}
	if (0xFF != TxBufNum)
	{
		CANRxtoTxDataConvertion (&TxBuf, RxBuf);
		WriteCanTxBuf(CanNum, TxBufNum ,  USE_TPM_CAN[CanNum], & TxBuf);
		CanSendCmd(CanNum,Cmd,TxBufNum);
		status = 0;
	}
	return status;
}
/*
***********************************************************************************************************
**函數原型	:  	void	ConfigAFReg ()
**參數說明	:  	
**返回值		:		
**說	明		:	本函數用于配置驗收過濾器
************************************************************************************************************
*/
void	ConfigAFReg (void)
{
	//配置驗收過濾器
	#if AF_REG_ENABLE
	INT32U	state;
	//初始化表格地址	
	AFBuildLUT(0,SFF_INDV_nCell,SFF_GRP_nCell,EFF_INDV_nCell,EFF_GRP_nCell);
		/*初始化標準幀獨立表格*/
		#if	SFF_INDV_nCell
			state = AFInitSFFIndvTab(sffIndvTab,sizeof(sffIndvTab)/sizeof(stcAF_SFF_CELL));
			/*添加用戶代碼*/
		#endif
		/*初始化標準幀范圍表格*/
		#if SFF_GRP_nCell
			state = AFInitSFFGrpTab(sffGrpTab,sizeof(sffGrpTab)/sizeof(stcAF_SFF_CELL));
			/*添加用戶代碼*/
		#endif
		/*初始化擴展幀獨立表格*/
		#if	EFF_INDV_nCell
			state = AFInitEFFIndvTab(effIndvTab,sizeof(effIndvTab)/sizeof(stcAF_EFF_CELL));
			/*添加用戶代碼*/
		#endif
		/*初始化擴展幀范圍表格*/
		#if	EFF_GRP_nCell
			state = AFInitEFFGrpTab(effGrpTab,sizeof(effGrpTab)/sizeof(stcAF_EFF_CELL));
			/*添加用戶代碼*/
		#endif
		/*設置驗收過濾模式*/
		AFSetMode(Normal);
	#else
		AFSetMode (Bypass);
	#endif
}
/*
***********************************************************************************************************
**函數原型	:  	void	InitCAN(eCANNUM CanNum)
**參數說明	:  	CanNum	-->>	CAN控制器,值不能大于CAN_MAX_NUM 規定的值
**返回值		:	無	
**說	明		:	本函數用于初始化CAN控制器
************************************************************************************************************/

void	InitCAN(eCANNUM CanNum)
{	
	/*硬件使能CAN控制器*/
	HwEnCAN(CanNum);
	/*軟件復位CAN控制器	*/																								
	while (SoftRstCAN(CanNum));
	/*設置錯誤警告寄存器*/																
	while (SetErWarmVal (CanNum,USE_EWL_CAN[CanNum]));										
	//初始化波特率
	while (SetCANBaudRate (CanNum,USE_BTR_CAN[CanNum]));											
	/*初始化中斷*/
	VICDefVectAddr=(INT32U)CANIntPrg;
	VICIntEnable |= (1 << 19) | ( 1 << (20+ CAN1)) | (1 << (26+ CAN1));
	CANIER(CanNum).Word= USE_INT_CAN[CanNum];												
	/*初始化模式*/
	while (SetTPMMOD(CanNum,USE_TPM_CAN[CanNum]));	//設置發送優先模式寄存器									
	while (SetLOMMOD(CanNum,USE_LOM_CAN[CanNum]));	//設置只聽模式寄存器
	/********* 添加用其他初始化代碼 ***********/
	CANRcvCyBufApp[CanNum].FullFlag = 0;			//初始化接收環形緩沖區
	CANRcvCyBufApp[CanNum].ReadPoint = 0;
	CANRcvCyBufApp[CanNum].WritePoint = 0;
	/*軟件啟動CAN*/
	SoftEnCAN(CanNum);
}


/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲韩国一区二区三区| 91精品国产91久久久久久一区二区 | 91福利视频在线| 国产日韩精品一区二区三区在线| 视频一区二区不卡| 欧美日韩不卡在线| 日韩黄色在线观看| 91精品在线免费| 麻豆成人久久精品二区三区红 | 亚洲女人小视频在线观看| 成人免费av在线| 狠狠色综合色综合网络| 日韩午夜三级在线| 激情久久五月天| 久久久久国产成人精品亚洲午夜| 久久机这里只有精品| 日韩精品中文字幕在线一区| 老鸭窝一区二区久久精品| 精品久久久久久久久久久久久久久 | 欧美丰满少妇xxxbbb| 日韩电影免费在线看| 日韩欧美在线综合网| 久久99国产精品免费网站| 色94色欧美sute亚洲线路二| 一区二区三区久久久| 欧美欧美欧美欧美| 蜜臂av日日欢夜夜爽一区| 久久免费美女视频| 99精品视频一区| 亚洲午夜精品一区二区三区他趣| 欧美猛男男办公室激情| 青青草国产精品97视觉盛宴| 久久夜色精品一区| thepron国产精品| 午夜精品aaa| 久久众筹精品私拍模特| www.欧美.com| 热久久国产精品| 欧美大片拔萝卜| 国产一区二区不卡在线| 亚洲欧洲成人精品av97| 欧美日韩激情在线| 高清不卡一二三区| 亚洲电影一区二区三区| 久久综合狠狠综合久久综合88| 99久久99久久精品免费观看| 日韩高清中文字幕一区| 国产精品久久久久桃色tv| 欧美一区二区三区视频免费 | 国产91精品露脸国语对白| 亚洲免费观看高清完整版在线观看| 正在播放亚洲一区| 99久久久免费精品国产一区二区| 亚洲图片自拍偷拍| 精品少妇一区二区三区视频免付费| 高清不卡在线观看| 日韩av中文字幕一区二区| 国产精品午夜电影| 777午夜精品视频在线播放| 丁香网亚洲国际| 男人的j进女人的j一区| 亚洲精品福利视频网站| xf在线a精品一区二区视频网站| 91小视频在线观看| 国产成人精品一区二区三区四区| 国产精品国产三级国产| 欧美日韩一区成人| 99精品视频在线免费观看| 欧美精品日韩一区| 99re这里只有精品6| 国产毛片精品一区| 日韩和的一区二区| 亚洲综合激情另类小说区| 国产欧美一二三区| 久久久久综合网| 91精品一区二区三区久久久久久| 97成人超碰视| 成人高清av在线| 国产一区二区在线视频| 青青草原综合久久大伊人精品| 亚洲最新在线观看| 伊人色综合久久天天| 国产精品第四页| 日本一区二区视频在线| 91麻豆精品91久久久久久清纯 | 欧美三级在线视频| 91年精品国产| 99久久婷婷国产| av不卡免费电影| 国产成人h网站| 国产精品亚洲专一区二区三区| 亚洲国产美女搞黄色| 国产视频在线观看一区二区三区| 精品日韩一区二区| 久久一区二区三区国产精品| 精品粉嫩aⅴ一区二区三区四区| 日韩一区二区麻豆国产| 在线不卡免费欧美| 欧美军同video69gay| 制服丝袜在线91| 欧美精品高清视频| 91精品国产色综合久久不卡蜜臀| 在线不卡一区二区| 精品久久久三级丝袜| 欧美精品一区二区三区视频| 久久久久国产精品厨房| 国产精品国产三级国产aⅴ中文 | 粉嫩久久99精品久久久久久夜| 国产在线看一区| 精品中文字幕一区二区| 免费一级欧美片在线观看| 老司机午夜精品99久久| 国产精品综合网| 99久久免费精品| 欧美三区免费完整视频在线观看| 91精品国产一区二区三区香蕉| 91精品综合久久久久久| www激情久久| 国产精品剧情在线亚洲| 亚洲五码中文字幕| 日本欧美一区二区| 蜜桃久久久久久久| 成人性生交大片免费看视频在线 | 久久影院视频免费| 国产精品美女久久久久久久久 | 精品99一区二区| 国产精品视频看| 亚洲成av人影院在线观看网| 久久精品av麻豆的观看方式| 成人h动漫精品一区二区| 欧美影院一区二区| 欧美一区二区三区在线视频 | 国产二区国产一区在线观看| 91日韩在线专区| 欧美日韩一本到| 久久一区二区三区国产精品| 国产精品嫩草影院av蜜臀| 亚洲超碰精品一区二区| 粉嫩绯色av一区二区在线观看| 91久久精品一区二区三| 精品国产一区a| 一区二区三区中文字幕精品精品| 日本网站在线观看一区二区三区 | 9i看片成人免费高清| 欧美精品久久99| 中文字幕亚洲欧美在线不卡| 日韩av电影天堂| 99国产麻豆精品| 久久蜜桃一区二区| 午夜精品福利一区二区三区蜜桃| 国产不卡视频在线播放| 这里只有精品视频在线观看| 亚洲色图在线视频| 国产福利一区二区三区| 日韩午夜激情视频| 日本不卡免费在线视频| 欧美日韩第一区日日骚| 一区二区三区产品免费精品久久75| 成人美女视频在线观看| 国产婷婷精品av在线| 国产精品 日产精品 欧美精品| 精品福利一二区| 国产美女一区二区三区| 久久久久免费观看| 国产麻豆日韩欧美久久| 精品裸体舞一区二区三区| 精品亚洲成a人| 久久久午夜电影| 夫妻av一区二区| 国产精品视频一二三| 欧美一级高清片在线观看| 美女视频一区二区三区| 日韩精品在线网站| 日本欧美一区二区在线观看| 日韩三级免费观看| 韩国av一区二区三区| 精品99一区二区三区| 国产精品一线二线三线精华| 久久久亚洲综合| 暴力调教一区二区三区| 亚洲区小说区图片区qvod| 在线一区二区观看| 午夜精品福利久久久| 精品日韩成人av| 成人网页在线观看| 亚洲精品免费看| 在线不卡免费欧美| 国产麻豆视频一区| 国产精品电影一区二区三区| 日本精品一级二级| 午夜不卡av在线| 久久婷婷色综合| 99re免费视频精品全部| 亚洲成人高清在线| 日韩欧美资源站| 9久草视频在线视频精品| 亚洲福利视频一区| 国产亚洲一本大道中文在线| 99久久精品费精品国产一区二区| 午夜私人影院久久久久|