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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? i82527.c

?? CAN例程 源碼 CAN例程 源碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
                (I82527_OFFS_MSG * channelNum) + I82527_OFFS_MCR));			            value &= ~0x4;            pDev->pBrd->canOutByte(pDev, (I82527_R_XMT +                (I82527_OFFS_MSG * channelNum) + I82527_OFFS_MCR),value);			            value = canId >> 3;            pDev->pBrd->canOutByte(pDev, (I82527_R_XMT +                (I82527_OFFS_MSG * channelNum) + I82527_OFFS_ARBIT),value);                        value = canId << 5;            pDev->pBrd->canOutByte(pDev, (I82527_R_XMT +                (I82527_OFFS_MSG * channelNum) + I82527_OFFS_ARBIT + 1),value);        }        else        {            /* extended message */            value = pDev->pBrd->canInByte(pDev, (I82527_R_XMT +                (I82527_OFFS_MSG * channelNum) + I82527_OFFS_MCR));      			value |= 0x4;            			pDev->pBrd->canOutByte(pDev, (I82527_R_XMT +                (I82527_OFFS_MSG * channelNum) + I82527_OFFS_MCR),value);			            value = canId >> (24 - 3);            			pDev->pBrd->canOutByte(pDev, (I82527_R_XMT +                (I82527_OFFS_MSG * channelNum) + I82527_OFFS_ARBIT),value);			            value = canId >> (16 - 3);            			pDev->pBrd->canOutByte(pDev, (I82527_R_XMT +                (I82527_OFFS_MSG * channelNum) + I82527_OFFS_ARBIT + 1),value);			            value = canId >> (8 - 3);            			pDev->pBrd->canOutByte(pDev, (I82527_R_XMT +                (I82527_OFFS_MSG * channelNum) + I82527_OFFS_ARBIT + 2),value);			            value = canId << 3;            			pDev->pBrd->canOutByte(pDev, (I82527_R_XMT +                (I82527_OFFS_MSG * channelNum) + I82527_OFFS_ARBIT + 3),value);        }				/* Set/ Reset RTR bit */		value = pDev->pBrd->canInByte(pDev, (I82527_R_XMT +			(I82527_OFFS_MSG * channelNum) + I82527_OFFS_MCR));				if(pDev->pCtrl->chnMode[channelNum] == WNCAN_CHN_RTR_REQUESTER)		{			/* 			* If channel is marked as a remote requester, 			* set direction to receive			*/			value &= 0xf7;            					}		else if(pDev->pCtrl->chnMode[channelNum] == WNCAN_CHN_TRANSMIT)		{			/* 			* If channel is marked as transmit, 			* set direction to transmit			*/			value |= 0x08;            					}				pDev->pBrd->canOutByte(pDev, (I82527_R_XMT +			(I82527_OFFS_MSG * channelNum) + I82527_OFFS_MCR),value);							/*				reset remote pending:      RmtPnd = 0 1		reset transmit request:    TxRqst = 0 1		reset cpu upate:           CpuUdt = 0 1		set new data bit:          NewDat = 1 0		*/  			pDev->pBrd->canOutByte(pDev, (I82527_R_XMT +			(I82527_OFFS_MSG * channelNum) + I82527_OFFS_CTRL1),0x56);		        		/* If EnableChannel is called earlier, state of channel is restored to valid*/		/* Else transmit request is set but channel is not marked as valid */		if(prevState & 0x80)			pDev->pBrd->canOutByte(pDev, (I82527_R_XMT +			(I82527_OFFS_MSG * channelNum) + I82527_OFFS_CTRL0), 0xbf);				        retCode = OK;    }    		return retCode;}/************************************************************************** I82527_ReadData - read 0 to 8 bytes of data from channel** This function reads "len" bytes of data from the channel and sets the value* of len to the number of bytes read. The range of "len" is zero (for zero * length data) to a maximum of eight. The mode of the channel must not be * WNCAN_CHN_INVALID or WNCAN_CHN_INACTIVE; however, the newData flag is valid * WNCAN_CHN_RECEIVE or WNCAN_CHN_REQUESTER channel mode.* For receive channels, if no new data has been received since the last* CAN_ReadData  function call, the newData flag is set to FALSE; * otherwise, the flag is TRUE. In both cases, the data and length of the* data currently in the channel are read. ** RETURNS:        OK, or ERROR** ERRNO:          S_can_illegal_channel_no,*                 S_can_illegal_config,*                 S_can_buffer_overflow,**/static STATUS I82527_ReadData      (	  struct WNCAN_Device *pDev,	  UCHAR channelNum,	  UCHAR *data,	  UCHAR *len,	  BOOL *newData	  ){    UCHAR       value;    UINT        i;    STATUS      retCode = ERROR; /* pessimistic */	UCHAR       hwLength;        if (channelNum >= I82527_MAX_MSG_OBJ)    {        errnoSet(S_can_illegal_channel_no);    }    else if((pDev->pCtrl->chnMode[channelNum] == WNCAN_CHN_INACTIVE) ||            (pDev->pCtrl->chnMode[channelNum] == WNCAN_CHN_INVALID))    {        errnoSet(S_can_illegal_config);            }    else    {		/* mark this message object as invalid */        pDev->pBrd->canOutByte(pDev, (I82527_R_XMT +            (I82527_OFFS_MSG * channelNum) + I82527_OFFS_CTRL0), 0x7f);        /* Check if the new data bit is set */        value = pDev->pBrd->canInByte(pDev,(I82527_R_XMT +            (I82527_OFFS_MSG * channelNum) + I82527_OFFS_CTRL1));                    *newData = (value & 0x02)? TRUE : FALSE;                /* read the message configuration register */        value = pDev->pBrd->canInByte(pDev, (I82527_R_XMT +            (I82527_OFFS_MSG * channelNum) + I82527_OFFS_MCR));        /* set the data len */		hwLength = ((value >> 4) & 0x0f);		if(hwLength > *len)		{			/*			If the actual number of bytes in the message are greater than			expected bytes by user, set error no and do not copy message			DLC into *len			*/			errnoSet(S_can_buffer_overflow);					}		else		{			/*			If the message DLC and the expected data length is equal,			or data buffer size is larger, copy message DLC into *len			and continue 			*/			*len = hwLength;			retCode = OK;		}		        do        {                        if(channelNum < 14) /* reset the NewDat bit */                pDev->pBrd->canOutByte(pDev, (I82527_R_XMT +                    (I82527_OFFS_MSG * channelNum) + I82527_OFFS_CTRL1), 0xfd);            for(i = 0 ; i < *len; i++)                data[i] = pDev->pBrd->canInByte(pDev, (I82527_R_XMT +                    (I82527_OFFS_MSG * channelNum) + I82527_OFFS_DATA + i));                /* re-read until NewDat bit is unset                   to ensure consistency of data */            if(channelNum < 14)            {                value = pDev->pBrd->canInByte(pDev, (I82527_R_XMT +                        (I82527_OFFS_MSG * channelNum) +                        I82527_OFFS_DATA + I82527_OFFS_CTRL1));            }            else            {                value = 0; /* terminate loop */            }        } while((value & 0x03) == 2);		 /* mark this message object as valid */        pDev->pBrd->canOutByte(pDev, (I82527_R_XMT +            (I82527_OFFS_MSG * channelNum) + I82527_OFFS_CTRL0), 0xbf);        retCode = OK;    }    return retCode;}/************************************************************************** I82527_GetMessageLength - get the message length*** This function returns the length of the message data in the channel* The minimum value returned is 0, and the maximum value is 8. * This number is equal to the "len" argument in CAN_ReadData. If the data * has zero length, this function returns zero. The mode of the channel* must not be WNCAN_CHN_INACTIVE or WNCAN_CHN_INVALID** RETURNS:        length of data or -1 if error** ERRNO:          S_can_illegal_channel_no, S_can_illegal_config***/static int I82527_GetMessageLength      (	  struct WNCAN_Device *pDev,	  UCHAR channelNum	  ){    int retLen = -1; /* pessimistic */    if (channelNum >= I82527_MAX_MSG_OBJ)    {        errnoSet(S_can_illegal_channel_no);    }    else if((pDev->pCtrl->chnMode[channelNum] == WNCAN_CHN_INACTIVE) ||            (pDev->pCtrl->chnMode[channelNum] == WNCAN_CHN_INVALID))    {        errnoSet(S_can_illegal_config);            }    else    {        retLen = (pDev->pBrd->canInByte(pDev, (I82527_R_XMT +            (I82527_OFFS_MSG * channelNum) + I82527_OFFS_MCR)) >> 4) & 0x0f;    }    return retLen;}/************************************************************************** I82527_WriteData - write "len" bytes of data to the channel** This function writes "len" bytes of data to the channel. An error is returned* if the number of bytes to be written exceed 8. The mode of the channel must be* WNCAN_CHN_TRANSMIT, or WNCAN_CHN_RTR_RESPONDER** RETURNS:        ERROR if an input parameter is invalid, OK otherwise.*   * ERRNO:          S_can_illegal_channel_no,*                 S_can_illegal_config,*                 S_can_illegal_data_length*/static STATUS I82527_WriteData      (	  struct WNCAN_Device *pDev,	  UCHAR channelNum,      UCHAR *data,	  UCHAR len	  ){    STATUS retCode = ERROR; /* pessimistic */    UCHAR  value;	UCHAR prevState;     unsigned int i;	    if (channelNum >= I82527_MAX_MSG_OBJ)    {        errnoSet(S_can_illegal_channel_no);    }    else if((pDev->pCtrl->chnMode[channelNum] != WNCAN_CHN_TRANSMIT) &&		(pDev->pCtrl->chnMode[channelNum] != WNCAN_CHN_RTR_RESPONDER))     {        errnoSet(S_can_illegal_config);            }	else if(len > 8)			{        errnoSet(S_can_illegal_data_length);            }    else    {        		/*Check if EnableChannel has been called earlier and channel		marked as valid. If yes, store state to restore later */		prevState = pDev->pBrd->canInByte(pDev, (I82527_R_XMT +			(I82527_OFFS_MSG * channelNum) + I82527_OFFS_CTRL0));		/*		mark message object as invalid:            MsgVal   = 0 1		unchanged transmit interrupt enable:       TXIE     = 1 1 		unchanged receive interrrupt enable:       RXIE     = 1 1		unchanged   interrupt pending:             IntPnd   = 0 1		7 6      5 4   3 2   1 0		MsgVal   TXIE  RXIE  IntPnd		*/				pDev->pBrd->canOutByte(pDev, (I82527_R_XMT +			(I82527_OFFS_MSG * channelNum) + I82527_OFFS_CTRL0), 0x7d);			/* 		remote transmission pending unchanged  RmtPnd = 0 1		reset transmit request:                TxRqst = 0 1		reset new data:                        NewDat = 0 1		set CPU update :                       CPUUpd = 1 0			7 6      5 4      3 2      1 0		RmtPnd   TxRqst   NewDat   CPUUpd 		*/			pDev->pBrd->canOutByte(pDev, (I82527_R_XMT +			(I82527_OFFS_MSG * channelNum) + I82527_OFFS_CTRL1), 0x56);			               /* Write the data length code to the message config reg. */        value = pDev->pBrd->canInByte(pDev, (I82527_R_XMT +            (I82527_OFFS_MSG * channelNum) + I82527_OFFS_MCR));		                value &= 0x0f;		                value |= (len << 4);		        pDev->pBrd->canOutByte(pDev, I82527_R_XMT +            (I82527_OFFS_MSG * channelNum) + I82527_OFFS_MCR,value);		        /* Write the data */        for( i = 0 ; i < len ; i++)            pDev->pBrd->canOutByte(pDev, (I82527_R_XMT +			(I82527_OFFS_MSG * channelNum) + I82527_OFFS_DATA + i), data[i]);		/*				reset remote pending:      RmtPnd = 0 1		reset transmit request:    TxRqst = 0 1		reset cpu upate:           CpuUdt = 0 1		set new data bit:          NewDat = 1 0		*/  			pDev->pBrd->canOutByte(pDev, (I82527_R_XMT +			(I82527_OFFS_MSG * channelNum) + I82527_OFFS_CTRL1),0x56);		        		/* If EnableChannel is called earlier, state of channel is restored to valid*/		/* Else transmit request is set but channel is not marked as valid */		if(prevState & 0x80)			pDev->pBrd->canOutByte(pDev, (I82527_R_XMT +			(I82527_OFFS_MSG * channelNum) + I82527_OFFS_CTRL0), 0xbf);		        retCode = OK;    }    return retCode;    }/************************************************************************** I82527_Tx - transmit the CAN message** This routine transmits the CAN Id and data currently in the channel of* the controller on the device. The mode of the channel must be* WNCAN_CHN_TRANSMIT or WNCAN_CHN_RTR_REQUESTER** RETURNS:        OK, or ERROR*   * ERRNO:          S_can_illegal_channel_no,*                 S_can_illegal_config,*                 S_can_busy**/static STATUS I82527_Tx      (	  struct WNCAN_Device *pDev,	  UCHAR channelNum	  ){    STATUS retCode = ERROR; /* pessimistic */    UCHAR  value;        if (channelNum >= I82527_MAX_MSG_OBJ)    {        errnoSet(S_can_illegal_channel_no);		goto exit;    }	else if((pDev->pCtrl->chnMode[channelNum] != WNCAN_CHN_TRANSMIT) &&		(pDev->pCtrl->chnMode[channelNum] != WNCAN_CHN_RTR_REQUESTER))	{        errnoSet(S_can_illegal_config);        		goto exit;    }		/* check if tx request is set before modifying*/	value = pDev->pBrd->canInByte(pDev, (I82527_R_XMT +		(I82527_OFFS_MSG * channelNum) + I82527_OFFS_CTRL1));		if(value & 0x20)	{		errnoSet(S_can_busy);		goto exit;	}		/* Transmit the message:	reset remote pending:      RmtPnd = 0 1	set transmit request:      TxRqst = 1 0	reset CPU update:          CpuUdt = 0 1	set new data bit:          NewDat = 1 0 */	pDev->pBrd->canOutByte(pDev, (I82527_R_XMT +		(I82527_OFFS_MSG * channelNum) + I82527_OFFS_CTRL1),0x66);		retCode = OK;	exit:	return retCode;}/************************************************************************** I82527_TxMsg - transmit the CAN message ** This routine performs the same function as the following series* of function calls:** 1. I82527_WriteID(context,channelNum,canID,ext);* 2. I82527_WriteData(context,channelNum,data,len);* 3. I82527_Tx(context,channel);** The mode of the channel must be WNCAN_CHN_TRANSMIT or WNCAN_CHN_RTR_REQUESTER* If the length specified exceeds 8 byes an error will be returned.** RETURNS:        OK, or ERROR*   * ERRNO:          S_can_illegal_channel_no,*                 S_can_illegal_config*                 S_can_illegal_data_length*                 S_can_busy**/static STATUS I82527_TxMsg      (	  struct WNCAN_Device *pDev,	  UCHAR channelNum,      ULONG canId,	  BOOL ext,	  UCHAR *data,	  UCHAR len	  ){    STATUS retCode = ERROR; /* pessimistic */    UCHAR  value;	UCHAR  prevState;    unsigned int i;        if (channelNum >= I82527_MAX_MSG_OBJ)    {        errnoSet(S_can_illegal_channel_no);		goto exit;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一级视频免费观看在线| 99re视频精品| 欧美一区二区精品久久911| 亚洲小少妇裸体bbw| 色吧成人激情小说| 亚洲国产精品综合小说图片区| 欧美性猛交xxxx黑人交| 日韩电影网1区2区| 欧美mv日韩mv| 菠萝蜜视频在线观看一区| 亚洲精品久久嫩草网站秘色| 欧美日韩一级片在线观看| 麻豆久久久久久| 国产精品视频一二三| 色哟哟国产精品| 日本午夜一区二区| 欧美国产精品中文字幕| 欧美一a一片一级一片| 麻豆成人在线观看| 国产精品免费av| 欧美男女性生活在线直播观看| 国产一区二区中文字幕| 亚洲人亚洲人成电影网站色| 91精品国产入口| 风间由美一区二区三区在线观看| 亚洲一区在线观看视频| 欧美成人一区二区三区在线观看| 国产福利电影一区二区三区| 亚洲综合一区在线| 26uuu亚洲综合色| 色综合咪咪久久| 国产在线精品视频| 亚洲午夜av在线| 国产女主播一区| 欧美精品日韩精品| 成人在线一区二区三区| 日韩精品一区第一页| 国产精品乱码妇女bbbb| 在线观看91av| 91麻豆免费观看| 狠狠色丁香婷婷综合| 亚洲电影一区二区| 欧美国产1区2区| 日韩欧美国产综合| 欧美性感一类影片在线播放| 国产成人h网站| 久久精品国产精品青草| 一区二区高清视频在线观看| 国产嫩草影院久久久久| 91精品国产综合久久福利软件| www.亚洲在线| 国产成人久久精品77777最新版本| 婷婷六月综合亚洲| 亚洲欧美一区二区三区国产精品| 久久久国产精品不卡| 欧美一二三在线| 欧美日韩在线直播| 色网站国产精品| 成人午夜av在线| 欧美日本在线看| 波多野结衣中文字幕一区二区三区| 老司机午夜精品| 午夜精品免费在线| 亚洲国产精品久久艾草纯爱| 亚洲精品亚洲人成人网在线播放| 国产欧美视频一区二区三区| 26uuu另类欧美| 精品国一区二区三区| 欧美一二三四在线| 日韩欧美视频在线| 日韩三级免费观看| 欧美一区二区三区婷婷月色| 欧美伦理影视网| 欧美日韩大陆一区二区| 欧美精选在线播放| 3d动漫精品啪啪1区2区免费| 欧美精选一区二区| 欧美一级在线免费| 日韩一区二区精品| 日韩精品中文字幕在线不卡尤物| 7777精品久久久大香线蕉| 欧美日韩大陆一区二区| 欧美日韩一区二区在线观看 | 国产美女在线观看一区| 国产一区三区三区| 高清不卡一区二区在线| 国产91在线看| 不卡区在线中文字幕| 91热门视频在线观看| 91激情在线视频| 欧美日韩国产经典色站一区二区三区| 欧美日韩综合在线免费观看| 欧美女孩性生活视频| 日韩视频国产视频| 久久精品视频网| 亚洲视频一区二区在线| 亚洲自拍偷拍图区| 免费观看在线色综合| 国内精品嫩模私拍在线| 成人免费va视频| 在线观看视频一区| 日韩一级精品视频在线观看| 久久久久久久电影| 亚洲精品国产第一综合99久久| 亚洲二区在线视频| 国产一区二区不卡在线| 99v久久综合狠狠综合久久| 欧美午夜电影网| 日韩欧美一二三| 国产精品久久久久影视| 亚洲一区二区av电影| 久久精品久久精品| 91视频观看免费| 日韩欧美国产综合| 中文字幕色av一区二区三区| 亚洲国产精品影院| 国产精品亚洲一区二区三区妖精 | 色婷婷久久99综合精品jk白丝| 欧美日韩黄色影视| 日本一区二区视频在线| 亚洲成av人影院| 成人免费视频网站在线观看| 欧美另类一区二区三区| 国产欧美在线观看一区| 午夜亚洲国产au精品一区二区| 国产乱色国产精品免费视频| 欧美视频第二页| 国产午夜精品美女毛片视频| 亚洲成av人在线观看| 成人一级片网址| 欧美电影免费观看高清完整版在 | 精品第一国产综合精品aⅴ| 亚洲三级视频在线观看| 国产一区二区三区高清播放| 欧美喷潮久久久xxxxx| 国产精品久久久久久久第一福利| 免费xxxx性欧美18vr| 色综合天天狠狠| 久久久久国产精品厨房| 日韩精品电影在线观看| 一本到三区不卡视频| 国产精品私人影院| 久久国产精品无码网站| 欧美日韩中文字幕精品| 国产精品乱码一区二区三区软件| 狠狠色狠狠色合久久伊人| 欧美日本国产视频| 一区二区三区精品视频在线| 成人h精品动漫一区二区三区| 日韩美女视频在线| 偷偷要91色婷婷| 欧美日韩在线播放| 一区二区三国产精华液| 91在线一区二区三区| 国产精品伦理在线| 国产成人精品亚洲777人妖 | 久久久久久9999| 蜜臀精品久久久久久蜜臀| 欧美午夜精品理论片a级按摩| 亚洲男女毛片无遮挡| av欧美精品.com| 中文字幕一区在线| 成人av在线电影| 国产精品美女一区二区| 国产91清纯白嫩初高中在线观看| 久久综合成人精品亚洲另类欧美 | 91精品国产福利| 亚洲电影第三页| 欧美精品黑人性xxxx| 亚洲成人www| 欧美乱妇15p| 蜜臀av一区二区在线免费观看| 日韩一区二区视频在线观看| 麻豆精品国产传媒mv男同| 日韩欧美国产一二三区| 开心九九激情九九欧美日韩精美视频电影 | 寂寞少妇一区二区三区| 亚洲精品在线电影| 国产乱人伦偷精品视频不卡| 国产蜜臀av在线一区二区三区| 国产成人一级电影| 国产精品国产三级国产专播品爱网| 高潮精品一区videoshd| 中文字幕一区二区日韩精品绯色| 波多野结衣在线一区| 亚洲日本电影在线| 欧美日本高清视频在线观看| 三级不卡在线观看| 欧美精品一区二区三区视频| 国产福利91精品一区| 自拍偷在线精品自拍偷无码专区 | 国产精品久久久久影视| 色域天天综合网| 午夜精品久久久久影视| 日韩欧美在线一区二区三区| 国产一区 二区| 亚洲美女少妇撒尿| 欧美tickling挠脚心丨vk| 国产夫妻精品视频| 亚洲午夜在线观看视频在线|