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

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

?? canapp.c

?? LPC2119的CAN驅(qū)動程序,開發(fā)環(huán)境問ads1.2
?? C
字號:
/****************************************Copyright (c)**************************************************
**                               廣州周立功單片機發(fā)展有限公司
**                                     研    究    所
**                                        產(chǎn)品一部 
**                                 http://www.zlgmcu.com
**-----------------------------------------------------------文件信息--------------------------------------------------------------------------------
**	文   件  	名:	CANAPP.C
** 	版  		本:	v1.0
** 	日		期:	2004年2月23日
**	描		述:	CAN模塊應用接口函數(shù)說明文件。該文件中的函數(shù),如果用戶有特別的需要,可以進行修改。
********************************************************************************************************/
#define		_CANAPP_GLOBAL_
#include	"config.h"
/*
***********************************************************************************************************
**函數(shù)原型		:  	void	CANIntPrg(void)
**參數(shù)說明		:  	無
**返回值		:	無	
**說	明		:	CAN控制器中斷處理函數(shù)
************************************************************************************************************/
__irq		void		CANIntPrg(void)
{
	UINT32 	j;
	uCANICR k;
	if(CANLUTerr.Word != 0 )	//LUT Error Program
	{
		//add or modify code
		j=CANLUTerrAd.Word;	
	}
	for(j=0;j<CAN_MAX_NUM;j++)
	{
		k=CANICR(j);
		if(k.Bits.RI_BIT != 0)
		{
			//add code
			WriteCANRcvCyBuf(j);
		}
		if(k.Bits.TI1_BIT != 0)
		{
			//add code
		}
		if(k.Bits.TI2_BIT != 0)
		{
			//add code
		}
		if(k.Bits.TI3_BIT != 0)
		{
			//add code
		}
		if(k.Bits.BEI_BIT != 0)
		{
			//add code
			CanBufOffLinePrg(j);
		}
		if(k.Bits.ALI_BIT != 0)
		{
			//add code
		}
		if(k.Bits.EPI_BIT != 0)
		{
			//add code
		}
		if(k.Bits.WUI_BIT != 0)
		{
			//add code
		}
		if(k.Bits.DOI_BIT != 0)
		{
			//add code
			ClrCanDataOver(j);
		}
	}
	VICVectAddr = 0;
}
/*
***********************************************************************************************************
**函數(shù)原型		:  	void	InitCAN(eCANNUM CanNum)
**參數(shù)說明		:  	CanNum	-->>	CAN控制器,值不能大于CAN_MAX_NUM 規(guī)定的值
**返回值		:	無	
**說	明		;	本函數(shù)用于初始化CAN控制器
************************************************************************************************************/
void	InitCAN(eCANNUM CanNum)
{	
	HwEnCAN(CanNum);																	
	SoftRstCAN(CanNum);																
	CANEWL(CanNum).Bits.EWL_BIT = USE_EWL_CAN[CanNum];										
	//初始化波特率
	CANBTR(CanNum).Word = USE_BTR_CAN[CanNum];											
	//初始化中斷為非向量中斷
	VICDefVectAddr =(UINT32)CANIntPrg;
	VICIntEnable |=(1<<19)|(1<<(20+ CanNum))|(1<<(26+ CanNum));
	CANIER(CanNum).Word= USE_INT_CAN[CanNum];												
	//配置驗收濾波器(旁路狀態(tài))
	CANAFMR.Bits.AccBP_BIT =1;	
	//初始化模式
	CANMOD(CanNum).Bits.TPM_BIT = USE_TPM_CAN[CanNum];										
	CANMOD(CanNum).Bits. LOM_BIT = USE_MOD_CAN[CanNum];
	//初始化接收環(huán)形緩沖區(qū)
	CANRcvBufApp.FullFlag1=CANRcvBufApp.FullFlag2=CANRcvBufApp.FullFlag3=CANRcvBufApp.FullFlag4=0;
	CANRcvBufApp.ReadPoint1=CANRcvBufApp.ReadPoint2=CANRcvBufApp.ReadPoint3=CANRcvBufApp.ReadPoint4=0;
	CANRcvBufApp.WritePoint1=CANRcvBufApp.WritePoint2=CANRcvBufApp.WritePoint3=CANRcvBufApp.WritePoint4=0;
	//啟動CAN
	SoftEnCAN(CanNum);
}
/*
***********************************************************************************************************
**函數(shù)原型		:  	UINT32	CANSendData(eCANNUM CanNum,UINT32 Cmd,P_stcTxBUF Buf)
**參數(shù)說明		:  	CanNum	-->>	CAN控制器,值不能大于CAN_MAX_NUM 規(guī)定的值
					Cmd	-->	發(fā)送命令字
					Buf	-->	要發(fā)送的數(shù)據(jù)
**返回值		:	無	
**說	明		:	本函數(shù)用于將數(shù)據(jù)發(fā)送到CAN總線
************************************************************************************************************/
UINT32		CANSendData(eCANNUM CanNum,UINT32 Cmd,P_stcTxBUF Buf)
{
	UINT32 i,status=0;
	if(0 != CANSR(CanNum).Bits.TBS1_BIT)
	{
		i=SEND_TX_BUF1;
	}
	else if(0 != CANSR(CanNum).Bits.TBS2_BIT)
	{
		i=SEND_TX_BUF2;
	}
	else if(0 != CANSR(CanNum).Bits.TBS3_BIT)
	{
		i=SEND_TX_BUF3;
	}
	else
	{
		i=0xFF;
	}
	status=WriteCanTxBuf(CanNum,i,  USE_TPM_CAN[CanNum],  Buf);
	if(status == 0)
	{
		#if 1
		if(CANMOD(CanNum).Bits.SM_BIT != 0)												
		{
			CanQuitSM(CanNum);
		}
		#endif
		CanSendCmd(CanNum,Cmd,i);
	}
	return (status);
}
/*
***********************************************************************************************************
**函數(shù)原型		:  	UINT32	ReadCANRcvCyBuf(eCANNUM CanNum,stcRxBUF *Buf)
**參數(shù)說明		:  	CanNum	-->	CAN控制器,值不能大于CAN_MAX_NUM 規(guī)定的值
					Buf		-->	使用驅(qū)動接收到的緩沖區(qū)數(shù)據(jù)
**返回值		:	=0,驅(qū)動接收到數(shù)據(jù)。
					!=0,驅(qū)動沒接收到數(shù)據(jù)。	
**說	明		:	本函數(shù)用于用戶調(diào)用使用CAN驅(qū)動接收到的數(shù)據(jù)。
************************************************************************************************************/
UINT32	ReadCANRcvCyBuf(eCANNUM CanNum,stcRxBUF *Buf)
{
	UINT32	status=0;
	switch(CanNum)
	{
		case	CAN1:
			if((0 != CANRcvBufApp.FullFlag1) ||
				(CANRcvBufApp.ReadPoint1 != CANRcvBufApp.WritePoint1))
			{
				*Buf=CANRcvBufApp.RcvBuf[CAN1][CANRcvBufApp.ReadPoint1];
				if(++CANRcvBufApp.ReadPoint1 >= USE_CAN_RCV_BUF_SIZE)
				{
					CANRcvBufApp.ReadPoint1 =0;
				}
				CANRcvBufApp.FullFlag1=0;
			}
			else 
			{
				status=1;
			}
			break;
		case	CAN2:
			if((0 != CANRcvBufApp.FullFlag2) ||
				(CANRcvBufApp.ReadPoint2 != CANRcvBufApp.WritePoint2))
			{
				*Buf=CANRcvBufApp.RcvBuf[CAN2][CANRcvBufApp.ReadPoint2];
				if(++CANRcvBufApp.ReadPoint2 >= USE_CAN_RCV_BUF_SIZE)
				{
					CANRcvBufApp.ReadPoint2 =0;
				}
				CANRcvBufApp.FullFlag2=0;
			}
			case	CAN3:
			if((0 != CANRcvBufApp.FullFlag3) ||
				(CANRcvBufApp.ReadPoint3 != CANRcvBufApp.WritePoint3))
			{
				*Buf=CANRcvBufApp.RcvBuf[CAN3][CANRcvBufApp.ReadPoint3];
				if(++CANRcvBufApp.ReadPoint3 >= USE_CAN_RCV_BUF_SIZE)
				{
					CANRcvBufApp.ReadPoint3 =0;
				}
				CANRcvBufApp.FullFlag3=0;
			}
			else 
			{
				status=1;
			}
			break;
		case	CAN4:
			if((0 != CANRcvBufApp.FullFlag4) ||
				(CANRcvBufApp.ReadPoint4 != CANRcvBufApp.WritePoint4))
			{
				*Buf=CANRcvBufApp.RcvBuf[CAN4][CANRcvBufApp.ReadPoint4];
				if(++CANRcvBufApp.ReadPoint4 >= USE_CAN_RCV_BUF_SIZE)
				{
					CANRcvBufApp.ReadPoint4 =0;
				}
				CANRcvBufApp.FullFlag4=0;
			}
			else 
			{
				status=1;
			}
			break;
		break;
		default:
			status=1;
			break;
	}
	return status;
}
/*
***********************************************************************************************************
**函數(shù)原型		:  	void	WriteCANRcvCyBuf(eCANNUM CanNum)
**參數(shù)說明		:  	CanNum	-->>	CAN控制器,值不能大于CAN_MAX_NUM 規(guī)定的值
**返回值		:		
**說	明		:	本函數(shù)用于驅(qū)動將收到的CAN數(shù)據(jù)寫入環(huán)形緩沖區(qū)
************************************************************************************************************/
void	WriteCANRcvCyBuf(eCANNUM CanNum)
{
	switch(CanNum)
	{
		case	CAN1:
			if((0 == CANRcvBufApp.FullFlag1))
			{
				CANRcvBufApp.RcvBuf[CAN1][CANRcvBufApp.WritePoint1] = RxBUF(CAN1);
				if(++CANRcvBufApp.WritePoint1 >= USE_CAN_RCV_BUF_SIZE)
				{
					CANRcvBufApp.WritePoint1=0;
				}
				if(CANRcvBufApp.WritePoint1 == CANRcvBufApp.ReadPoint1)
				{
					CANRcvBufApp.FullFlag1 =1;
				}
			}
			break;
		case	CAN2:
			if((0 == CANRcvBufApp.FullFlag2))
			{
				CANRcvBufApp.RcvBuf[CAN2][CANRcvBufApp.WritePoint2] = RxBUF(CAN2);
				if(++CANRcvBufApp.WritePoint2 >= USE_CAN_RCV_BUF_SIZE)
				{
					CANRcvBufApp.WritePoint2=0;
				}
				if(CANRcvBufApp.WritePoint2 == CANRcvBufApp.ReadPoint2)
				{
					CANRcvBufApp.FullFlag2 =1;
				}
			}
			break;

		default:
			break;
	}
	RelCanRecBuf(CanNum);
}
//應用常量定義
//使用工作模式
const 	UINT32	USE_MOD_CAN[4] = 
{
	USE_MODE_CAN1,
	USE_MODE_CAN2,
	USE_MODE_CAN3,
	USE_MODE_CAN4
};

//使用波特率
const 	UINT32	USE_BTR_CAN[4] = 
{
	USE_BTR_CAN1,
	USE_BTR_CAN2,
	USE_BTR_CAN3,
	USE_BTR_CAN4
};
//使用發(fā)送緩沖區(qū)發(fā)送優(yōu)先級模式選擇
const 	UINT32	USE_TPM_CAN[4] = 
{
	USE_TPM_CAN1,
	USE_TPM_CAN2,
	USE_BTR_CAN3,
	USE_BTR_CAN4
};
//應用中斷
const 	UINT32	USE_INT_CAN[4] = 
{
	USE_INT_CAN1,
	USE_INT_CAN2,
	USE_INT_CAN3,
	USE_INT_CAN4
};
//應用報警限制
const	UINT32	USE_EWL_CAN[4] = 
{
	USE_EWL_CAN1,
	USE_EWL_CAN2,
	USE_EWL_CAN3,
	USE_EWL_CAN4
};
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合久久久久久久久久久| 亚洲黄色录像片| 午夜精品成人在线视频| eeuss鲁片一区二区三区在线看 | 亚洲成人三级小说| 91免费视频观看| 日韩伦理电影网| 91色porny蝌蚪| 国产日韩欧美a| 春色校园综合激情亚洲| 久久九九国产精品| www.欧美色图| 亚洲九九爱视频| 欧美综合亚洲图片综合区| 亚洲综合一二区| 538在线一区二区精品国产| 午夜视频在线观看一区二区| 欧美日韩视频在线第一区| 天涯成人国产亚洲精品一区av| 北岛玲一区二区三区四区| 国产精品久线观看视频| 9色porny自拍视频一区二区| 亚洲天堂免费看| 欧美日韩久久一区| 青草国产精品久久久久久| 精品av综合导航| 成人动漫一区二区| 国产精品二区一区二区aⅴ污介绍| www.欧美色图| 亚洲精品免费看| 7777精品伊人久久久大香线蕉| 免费在线欧美视频| 欧美高清在线一区二区| 91免费版在线看| 日韩av二区在线播放| www久久精品| aaa欧美大片| 天天综合色天天综合| 精品久久久久久综合日本欧美| 国产精品一区免费在线观看| 亚洲天堂av老司机| 91精品中文字幕一区二区三区| 国产美女精品一区二区三区| 中文字幕在线不卡| 欧美日韩国产在线观看| 国产精品一区二区免费不卡| 国产日产精品1区| 在线观看国产日韩| 国产一区二区三区在线看麻豆| 亚洲青青青在线视频| 日韩一区二区精品| 99re这里只有精品首页| 激情综合色播激情啊| 亚洲色图欧美偷拍| 欧美r级在线观看| 99re这里只有精品视频首页| 老司机一区二区| 国产精品不卡在线| 欧美日韩在线直播| 粉嫩嫩av羞羞动漫久久久| 日韩av电影天堂| 美国三级日本三级久久99 | 亚洲激情图片一区| 亚洲小说欧美激情另类| 国产精品一区二区三区99| 国产精品99精品久久免费| 国产精品免费视频观看| 69堂精品视频| 色综合久久综合网欧美综合网| 麻豆精品精品国产自在97香蕉| 中文字幕亚洲区| 欧美福利视频导航| 99国内精品久久| 丰满少妇久久久久久久| 麻豆一区二区99久久久久| 亚洲天天做日日做天天谢日日欢| 久久九九全国免费| 精品人伦一区二区色婷婷| 欧美日韩国产在线观看| 一本久道久久综合中文字幕| 国产凹凸在线观看一区二区| 精品一区二区综合| 日本大胆欧美人术艺术动态| 亚洲一区二区三区小说| 日韩美女久久久| 国产精品美女久久久久久久| 精品国产乱码久久久久久夜甘婷婷 | 久久精品国产网站| 亚洲一区二区三区美女| 亚洲欧美区自拍先锋| 日本一区二区视频在线观看| 欧美电视剧在线看免费| 欧美老女人在线| 欧美日韩大陆在线| 欧美日韩一区二区在线观看视频 | 欧美在线短视频| 99精品国产91久久久久久| 国产伦精品一区二区三区免费| 日本色综合中文字幕| 日韩成人午夜电影| 奇米在线7777在线精品| 久久99国产精品免费网站| 男男视频亚洲欧美| 国产一区在线不卡| 国产精品1024| 成人丝袜18视频在线观看| 国产成人av在线影院| 国产91丝袜在线18| 91香蕉视频mp4| 欧美亚洲日本一区| 91麻豆精品国产91久久久久久| 欧美一级在线免费| 日韩欧美一区二区免费| 久久亚洲二区三区| 国产日韩欧美高清在线| 亚洲少妇中出一区| 午夜精品久久久久久久99水蜜桃 | 久久精品欧美一区二区三区不卡 | gogogo免费视频观看亚洲一| 色伊人久久综合中文字幕| 欧美午夜理伦三级在线观看| 91精品国产91久久综合桃花| 精品日韩在线一区| 国产精品美女久久久久av爽李琼| 亚洲欧美日韩人成在线播放| 国产色产综合色产在线视频| 亚洲天堂福利av| 蜜臀av一区二区| 99久久婷婷国产精品综合| 欧洲国内综合视频| 日韩精品一区在线观看| 国产精品久久久久久久久久久免费看 | 精品成人佐山爱一区二区| 国产精品国产三级国产aⅴ中文| 亚洲一区免费视频| 国产一区三区三区| 欧美性受极品xxxx喷水| 日韩免费观看高清完整版| 国产精品久久久久毛片软件| 亚洲成a人v欧美综合天堂下载| 久久精品国产精品亚洲精品| av资源网一区| 在线观看日韩电影| 精品sm在线观看| 免费国产亚洲视频| 欧美日韩视频专区在线播放| **网站欧美大片在线观看| 国内精品免费在线观看| 欧美日韩二区三区| 亚洲午夜一二三区视频| 色哟哟一区二区| 中文字幕一区二区三区精华液| 国产成人av电影在线| 精品国产乱码久久久久久免费| 午夜精品一区二区三区三上悠亚| 色综合久久久网| 亚洲人成在线播放网站岛国| 国产91精品一区二区麻豆网站 | 青青草一区二区三区| 欧美日韩成人综合| 亚洲福利一二三区| 欧美日韩一区二区三区不卡| 亚洲男人的天堂网| 91色porny蝌蚪| 亚洲蜜臀av乱码久久精品蜜桃| 国产露脸91国语对白| 欧美xxxxxxxxx| 国产在线播放一区二区三区| 欧美电影免费观看完整版| 理论电影国产精品| 26uuu亚洲综合色欧美| 国产伦精品一区二区三区视频青涩| 精品美女一区二区三区| 国产原创一区二区| 国产欧美综合在线| 99久久综合国产精品| 亚洲欧美一区二区三区极速播放 | 99久久777色| 亚洲免费伊人电影| 欧美综合视频在线观看| 亚洲一区二区精品久久av| 337p亚洲精品色噜噜噜| 麻豆精品新av中文字幕| 久久久亚洲高清| 99久久精品免费看| 亚洲一区二区视频在线观看| 91精品综合久久久久久| 久久成人免费网站| 国产精品视频一区二区三区不卡| 成人午夜免费av| 亚洲精品国产一区二区精华液 | 亚洲精品乱码久久久久久久久| 欧美日韩亚洲综合一区二区三区| 人人超碰91尤物精品国产| 久久久国产一区二区三区四区小说 | 久久精品男人的天堂| 成人免费看片app下载| 一区二区三区自拍| 精品少妇一区二区三区在线视频 | 国产一区二区三区视频在线播放 |