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

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

?? canapp.c

?? LPC2119 CAN中斷及示范
?? C
字號:
/****************************************Copyright (c)**************************************************
**                               廣州周立功單片機發展有限公司
**                                     研    究    所
**                                        產品一部 
**                                 http://www.zlgmcu.com
**-----------------------------------------------------------文件信息--------------------------------------------------------------------------------
**	文   件  	名:	CANAPP.C
** 	版  		本:	v1.0
** 	日		期:	2004年2月23日
**	描		述:	CAN模塊應用接口函數說明文件。該文件中的函數,如果用戶有特別的需要,可以進行修改。
********************************************************************************************************/
#define		_CANAPP_GLOBAL_
#include "INCLUDES.H"

/*
***********************************************************************************************************
**函數原型	:  	void	CANIntPrg(void)
**參數說明	:  	無
**返回值		:	無	
**說	明		:	CAN控制器中斷處理函數
************************************************************************************************************/
void		CANIntPrg(void)
{
	INT32U 	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);	//數據溢出中斷處理
		}
	}
}
/*
***********************************************************************************************************
**函數原型	:  	void	InitCAN(eCANNUM CanNum)
**參數說明	:  	CanNum	-->>	CAN控制器,值不能大于CAN_MAX_NUM 規定的值
**返回值		:	無	
**說	明		:	本函數用于初始化CAN控制器
************************************************************************************************************/
void	InitCAN(eCANNUM CanNum)
{	
//	INT32U	*p;
	HwEnCAN(CanNum);																	
	SoftRstCAN(CanNum);	
																
	CANEWL(CanNum).Bits.EWL_BIT = USE_EWL_CAN[CanNum];										
	//初始化波特率
	CANBTR(CanNum).Word = USE_BTR_CAN[CanNum];											
	//初始化中斷為非向量中斷
	//VICDefVectAddr =(INT32U)CANIntPrg;
	VICVectAddr8 = (INT32U)CANIntPrg;			//中斷服務程序CANIntPrg
	VICVectCntl8 = (0x20|26);					//26通道中斷位向量IRQ
	VICIntEnable |=(1<<(26+ CanNum));			//使能26通道中斷
	CANIER(CanNum).Word= 0x01;					//只開放接收中斷											
	//配置驗收濾波器
	CANAFMR.Bits.AccBP_BIT =1;	
	
	#if 	USE_eFCAN_MODE																
	CANAFMR.Bits.eFCAN_BIT =1;	
	CANSFF_sa.Bits. SADR_BIT= USE_SFF_sa_VAL;
	CANSFF_GRP_sa.Bits. SADR_BIT=USE_SFF_GRP_sa_VAL;
	CANEFF_sa.Bits. SADR_BIT= USE_EFF_sa_VAL;
	CANEFF_GRP_sa.Bits. SADR_BIT=USE_EFF_GRP_sa_VAL;
	CANENDofTable.Bits. SADR_BIT=USE_ENDoffable_VAL;
	//請根據實際需要來填寫下面的驗收濾波器的表格
//p=(INT32U *)(	CANAFRAM_GADR +	USE_EFF_GRP_sa_VAL);
//*p=0x20000000;
//*(p+1)=0x20000006;
	#endif
	
	//初始化模式
	CANMOD(CanNum).Bits.TPM_BIT = USE_TPM_CAN[CanNum];										
	CANMOD(CanNum).Bits. LOM_BIT = USE_MOD_CAN[CanNum];
	//初始化接收環形緩沖區
	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);
	//睡眠模式
	//CANMOD(CanNum).Bits.SM_BIT = USE_CAN_SLEEP_MOD;
}
/*
***********************************************************************************************************
**函數原型	:  	INT32U	CANSendData(eCANNUM CanNum,INT32U Cmd,P_stcTxBUF Buf)
**參數說明	:  	CanNum	-->>	CAN控制器,值不能大于CAN_MAX_NUM 規定的值
				Cmd		à>	發送命令字
				Buf		à>	要發送的數據
**返回值		:	無	
**說	明		:	本函數用于將數據發送到CAN總線
************************************************************************************************************/
INT32U		CANSendData(eCANNUM CanNum,INT32U Cmd,P_stcTxBUF Buf)
{
	INT32U 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);
		//CANMOD(CanNum).Bits.SM_BIT = USE_CAN_SLEEP_MOD;
	}
	return (status);
}
/*
***********************************************************************************************************
**函數原型	:  	INT32U	ReadCANRcvCyBuf(eCANNUM CanNum,stcRxBUF *Buf)
**參數說明	:  	CanNum	-->>	CAN控制器,值不能大于CAN_MAX_NUM 規定的值
				Buf		à>	使用驅動接收到的緩沖區數據
**返回值		:	=0,驅動接收到數據。
				!=0,驅動沒接收到數據。	
**說	明		:	本函數用于用戶調用使用CAN驅動接收到的數據。
************************************************************************************************************/
INT32U	ReadCANRcvCyBuf(eCANNUM CanNum,stcRxBUF *Buf)
{
	INT32U	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;
			}
			else 
			{
				status=1;
			}
			break;
		/////////////////////////////////////////////////////////////////////	
		#if	(CAN_MAX_NUM == 4)
			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;
		#endif
		///////////////////////////////////////////////////////////////////////////
		default:
			status=1;
			break;
	}
	return status;
}
/*
***********************************************************************************************************
**函數原型	:  	void	WriteCANRcvCyBuf(eCANNUM CanNum)
**參數說明	:  	CanNum	-->>	CAN控制器,值不能大于CAN_MAX_NUM 規定的值
**返回值		:		
**說	明		:	本函數用于驅動將收到的CAN數據寫入環形緩沖區
************************************************************************************************************/
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;
		//////////////////////////////////////////////////////////////////////
		///////////////////////////////////////////////////////////////////////	
		#if	(CAN_MAX_NUM == 4)
			case	CAN3:
				if((0 == CANRcvBufApp.FullFlag3))
				{
					CANRcvBufApp.RcvBuf[CAN3][CANRcvBufApp.WritePoint3] = RxBUF(CAN3);
					if(++CANRcvBufApp.WritePoint3 >= USE_CAN_RCV_BUF_SIZE)
					{
						CANRcvBufApp.WritePoint3=0;
					}
					if(CANRcvBufApp.WritePoint3 == CANRcvBufApp.ReadPoint3)
					{
						CANRcvBufApp.FullFlag3 =1;
					}
				}
				break;
			case	CAN4:
				if((0 == CANRcvBufApp.FullFlag4))
				{
					CANRcvBufApp.RcvBuf[CAN4][CANRcvBufApp.WritePoint4] = RxBUF(CAN4);
					if(++CANRcvBufApp.WritePoint4 >= USE_CAN_RCV_BUF_SIZE)
					{
						CANRcvBufApp.WritePoint4=0;
					}
					if(CANRcvBufApp.WritePoint4 == CANRcvBufApp.ReadPoint4)
					{
						CANRcvBufApp.FullFlag4 =1;
					}
				}
				break;
		#endif
		////////////////////////////////////////////////////////////////////////
		////////////////////////////////////////////////////////////////////////
		default:
			break;
	}
	RelCanRecBuf(CanNum);
}
//應用常量定義
//使用工作模式
const 	INT32U	USE_MOD_CAN[2] = 
{
	USE_MODE_CAN1,
	USE_MODE_CAN2,
	
	#if	(CAN_MAX_NUM == 4)
		USE_MODE_CAN3,
		USE_MODE_CAN4,
	#endif
};
//使用睡眠模式
const 	INT32U	USE_SLP_MOD_CAN[2] = 
{
	USE_SLP_MOD_CAN1,
	USE_SLP_MOD_CAN2,
	#if	(CAN_MAX_NUM == 4)
		USE_SLP_MOD_CAN3,
		USE_SLP_MOD_CAN4,
	#endif
};
//使用波特率
const 	INT32U	USE_BTR_CAN[2] = 
{
	USE_BTR_CAN1,
	USE_BTR_CAN2,
	#if	(CAN_MAX_NUM == 4)
		USE_BTR_CAN3,
		USE_BTR_CAN4,
	#endif
};
//使用發送緩沖區發送優先級模式選擇
const 	INT32U	USE_TPM_CAN[2] = 
{
	USE_TPM_CAN1,
	USE_TPM_CAN2,
	#if	(CAN_MAX_NUM == 4)
		USE_TPM_CAN3,
		USE_TPM_CAN4,
	#endif
};
//應用中斷
const 	INT32U	USE_INT_CAN[2] = 
{
	USE_INT_CAN1,
	USE_INT_CAN2,
	#if	(CAN_MAX_NUM == 4)
		USE_INT_CAN3,
		USE_INT_CAN4,
	#endif
};
//應用報警限制
const	INT32U	USE_EWL_CAN[2] = 
{
	USE_EWL_CAN1,
	USE_EWL_CAN2,
	#if	(CAN_MAX_NUM == 4)
		USE_EWL_CAN3,
		USE_EWL_CAN4,
	#endif
};

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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区中文字幕| 国产自产2019最新不卡| 另类综合日韩欧美亚洲| av电影一区二区| 欧美v亚洲v综合ⅴ国产v| 国产精品传媒入口麻豆| 另类小说视频一区二区| 欧美在线你懂得| 国产精品日产欧美久久久久| 毛片一区二区三区| 欧美亚洲综合网| 中文字幕中文字幕一区二区| 久久国产精品露脸对白| 欧美日韩中字一区| 久久在线观看免费| 日本欧美一区二区在线观看| 色综合天天综合在线视频| 久久精品夜色噜噜亚洲a∨| 色噜噜狠狠成人网p站| 国产麻豆精品在线观看| 三级欧美韩日大片在线看| 成人黄色综合网站| 久久亚洲精华国产精华液| 天堂久久一区二区三区| 不卡av电影在线播放| 久久综合999| 国产另类ts人妖一区二区| 日韩欧美在线123| 日韩精品成人一区二区在线| 欧美亚州韩日在线看免费版国语版| 久久精品水蜜桃av综合天堂| 久久国产生活片100| 日韩欧美中文字幕精品| 热久久一区二区| 日韩欧美中文字幕公布| 极品美女销魂一区二区三区免费| 日韩欧美资源站| 国内精品不卡在线| 久久亚洲精华国产精华液 | 国产精品欧美一级免费| 国产一区二区美女诱惑| 久久久精品国产免大香伊 | 欧洲人成人精品| 亚洲国产精品久久人人爱| 欧美色手机在线观看| 丝袜美腿亚洲一区二区图片| 7777精品伊人久久久大香线蕉| 性做久久久久久久久| 日韩一区二区在线播放| 激情图区综合网| 国产精品视频一二三| a级精品国产片在线观看| 亚洲免费电影在线| 宅男噜噜噜66一区二区66| 精品一区二区三区香蕉蜜桃 | 久久电影网站中文字幕| 国产日韩欧美制服另类| 北条麻妃国产九九精品视频| 自拍偷拍亚洲综合| 欧美精品一卡二卡| 国产一区二区在线观看视频| 国产精品福利一区| 91精品免费在线观看| 国产精品1024| 亚洲国产一区二区三区青草影视 | 美女视频免费一区| 国产欧美精品国产国产专区| 91精品办公室少妇高潮对白| 日韩成人一级片| 亚洲国产精品激情在线观看| 91传媒视频在线播放| 久久精品国产77777蜜臀| 日本一区二区电影| 欧美一区二区在线视频| 成人精品免费网站| 天堂在线亚洲视频| 亚洲欧洲精品天堂一级| 欧美精品乱码久久久久久| 国产成人精品免费| 日韩专区欧美专区| 成人免费在线视频| wwwwxxxxx欧美| 欧美日韩国产电影| 99久久精品国产观看| 玖玖九九国产精品| 亚洲国产视频在线| 国产精品三级av在线播放| 日韩欧美国产综合一区| 日本精品裸体写真集在线观看| 激情图片小说一区| 日韩高清在线电影| 亚洲美女视频在线| 久久天天做天天爱综合色| 欧美亚洲国产一区在线观看网站 | 中文字幕永久在线不卡| 日韩欧美一二区| 51精品秘密在线观看| 91在线播放网址| 风间由美性色一区二区三区| 日韩av中文字幕一区二区三区| 亚洲婷婷综合色高清在线| 久久久久国产精品麻豆| 日韩欧美国产成人一区二区| 欧美日韩精品二区第二页| 91在线小视频| 99在线精品一区二区三区| 国产精品一二三四五| 麻豆久久久久久| 奇米777欧美一区二区| 天天综合色天天综合| 亚洲国产另类av| 五月婷婷激情综合网| 亚洲一区av在线| 亚洲午夜久久久久久久久电影网| 亚洲免费观看高清完整| 尤物在线观看一区| 一区二区三区成人在线视频| 亚洲女与黑人做爰| 亚洲激情第一区| 亚洲制服欧美中文字幕中文字幕| 一区二区三区中文在线| 亚洲国产另类av| 香蕉影视欧美成人| 蜜桃一区二区三区四区| 久久成人综合网| 国产精品一区二区在线播放| 国产精品456| 97aⅴ精品视频一二三区| 色综合久久综合网| 在线观看日韩精品| 9191久久久久久久久久久| 欧美一区在线视频| 国产农村妇女毛片精品久久麻豆| 国产视频一区二区在线| 国产精品视频免费看| 亚洲欧洲另类国产综合| 五月婷婷久久综合| 国产一区二区三区四区五区美女 | 日韩精品一区二区三区老鸭窝 | 成人综合在线网站| 91在线精品秘密一区二区| 欧美性受xxxx| 欧美一区二区三区免费| 国产欧美一区二区三区在线老狼 | 中文字幕久久午夜不卡| 亚洲免费在线播放| 五月天一区二区三区| 国内国产精品久久| 色呦呦国产精品| 日韩三级视频在线观看| 亚洲图片激情小说| 美女国产一区二区| 91在线观看免费视频| 欧美一区二区福利在线| 中文字幕在线视频一区| 午夜精品久久久久久久99水蜜桃 | 国产精品国产三级国产普通话99| 一区二区三区日韩在线观看| 日本麻豆一区二区三区视频| 国产**成人网毛片九色| 精品视频在线免费| 日本一区二区三区视频视频| 亚洲午夜av在线| 成人亚洲一区二区一| 欧美日韩在线直播| 中文无字幕一区二区三区| 天天亚洲美女在线视频| 97精品久久久久中文字幕| 2020国产精品| 五月天丁香久久| 色婷婷精品大在线视频| 久久综合九色欧美综合狠狠| 天天综合色天天| 91精品办公室少妇高潮对白| 中文字幕欧美日韩一区| 极品少妇xxxx精品少妇| 欧美日韩亚洲综合| 亚洲精品一二三区| 不卡一区二区在线| 国产亚洲欧美日韩日本| 久久成人精品无人区| 欧洲亚洲国产日韩| 亚洲黄色性网站| av亚洲精华国产精华| 26uuuu精品一区二区| 麻豆精品国产91久久久久久| 欧美日韩一二三| 亚洲小少妇裸体bbw| 一本一道波多野结衣一区二区| 久久香蕉国产线看观看99| 奇米色一区二区| 91麻豆精品国产91久久久使用方法 | 中日韩免费视频中文字幕| 麻豆91在线播放免费| 91精品中文字幕一区二区三区 | 中文字幕日本乱码精品影院| 国产在线播放一区二区三区| 日韩精品中文字幕在线不卡尤物| 五月天精品一区二区三区| 欧美日韩在线三级|