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

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

?? can.c

?? 基于STR711的PWM程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
* Description    : Configure all the message objects as unused
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void CAN_InvalidateAllMsgObj(void)
{
	u32 i;
	for (i = 0; i < 32; i++)
		CAN_SetUnusedMsgObj(i);
}

/*******************************************************************************
* Function Name  : CAN_Init
* Description    : Initialize the CAN cell and set the bitrate
* Input 1        : any binary value formed from the CAN_CTL_xxx defines
* Input 2        : one of the CAN_BITRATE_xxx defines
* Output         : None
* Return         : None
*******************************************************************************/
void CAN_Init(u8 mask, u32 bitrate)
{
  CAN_EnterInitMode(CAN_CR_CCE | mask);
  CAN_SetBitrate(bitrate);
  CAN_LeaveInitMode();
  CAN_LeaveTestMode();
}

/*******************************************************************************
* Function Name  : CAN_ReleaseMessage
* Description    : Release the message object
* Input 1        : message object number, from 0 to 31
* Output         : None
* Return         : None
*******************************************************************************/
void CAN_ReleaseMessage(u32 msgobj)
{
	u32 i;
    while ((i = CAN_GetFreeIF()) == 2);

	CAN->sMsgObj[i].CMR = CAN_CMR_CLRINTPND | CAN_CMR_TXRQST;
	CAN->sMsgObj[i].CRR = 1 + msgobj;
}

/*******************************************************************************
* Function Name  : CAN_SendMessage
* Description    : Start transmission of a message
* Input 1        : message object number, from 0 to 31
* Input 2        : pointer to the message structure containing data to transmit
* Output         : None
* Return         : 1 if transmission was OK, else 0
*******************************************************************************/
u32 CAN_SendMessage(u32 msgobj, canmsg* pCanMsg)
{
  while (CAN->sMsgObj[0].CRR & CAN_CRR_BUSY);

//  if (CAN->sMsgObj[0].COMR & CAN_CRQ_BUSY)
//	return 0;	// message interface 0 not free

  CAN->SR &= ~CAN_SR_TXOK;

  // read the Arbitration and Message Control
  CAN->sMsgObj[0].CMR = CAN_CMR_ARB | CAN_CMR_CONTROL;

  CAN->sMsgObj[0].CRR = 1 + msgobj;

  while (CAN->sMsgObj[0].CRR & CAN_CRR_BUSY);

  // update the contents needed for transmission
  CAN->sMsgObj[0].CMR =   CAN_CMR_WRRD
  	                | CAN_CMR_ARB
  	                | CAN_CMR_CONTROL
  	                | CAN_CMR_DATAA
  	                | CAN_CMR_DATAB;

  if ((CAN->sMsgObj[0].A2R & CAN_A2R_XTD) == 0)
  {
  	// standard ID
	CAN->sMsgObj[0].A1R = 0;
	CAN->sMsgObj[0].A2R = (CAN->sMsgObj[0].A2R & 0xE000) | STD_FIXED_ID_ARB(pCanMsg->Id);
  }
  else
  {
  	// extended ID
	CAN->sMsgObj[0].A1R = EXT_FIXED_ID_ARB_L(pCanMsg->Id);
	CAN->sMsgObj[0].A2R = (CAN->sMsgObj[0].A2R & 0xE000) | EXT_FIXED_ID_ARB_H(pCanMsg->Id);
  }

  CAN->sMsgObj[0].MCR = (CAN->sMsgObj[0].MCR & 0xFEF0) | CAN_MCR_NEWDAT | CAN_MCR_TXRQST | pCanMsg->Dlc;

  CAN->sMsgObj[0].DA1R = ((u16)pCanMsg->Data[1]<<8) | pCanMsg->Data[0];
  CAN->sMsgObj[0].DA2R = ((u16)pCanMsg->Data[3]<<8) | pCanMsg->Data[2];
  CAN->sMsgObj[0].DB1R = ((u16)pCanMsg->Data[5]<<8) | pCanMsg->Data[4];
  CAN->sMsgObj[0].DB2R = ((u16)pCanMsg->Data[7]<<8) | pCanMsg->Data[6];

  CAN->sMsgObj[0].CRR = 1 + msgobj;

  return 1;
}

/*******************************************************************************
* Function Name  : CAN_ReceiveMessage
* Description    : Get the message, if received
* Input 1        : message object number, from 0 to 31
* Input 2        : if TRUE, the message object is released when getting the data
*                  if FALSE, the message object is not released
* Input 3        : pointer to the message structure where received data is stored
* Output         : None
* Return         : 1 if reception was OK, else 0 (no message pending)
*******************************************************************************/
u32 CAN_ReceiveMessage(u32 msgobj, bool release, canmsg* pCanMsg)
{
    if (!CAN_IsMessageWaiting(msgobj))
    	return 0;

	CAN->SR &= ~CAN_SR_RXOK;

    // read the message contents
    CAN->sMsgObj[1].CMR =   CAN_CMR_MASK
	                  | CAN_CMR_ARB
	                  | CAN_CMR_CONTROL
	                  | CAN_CMR_CLRINTPND
	                  | (release ? CAN_CMR_TXRQST : 0)
	                  | CAN_CMR_DATAA
	                  | CAN_CMR_DATAB;

	CAN->sMsgObj[1].CRR = 1 + msgobj;

	while (CAN->sMsgObj[1].CRR & CAN_CRR_BUSY);

    if ((CAN->sMsgObj[1].A2R & CAN_A2R_XTD) == 0)
    {
  	  // standard ID
  	  pCanMsg->IdType = CAN_STD_ID;
      pCanMsg->Id = (CAN->sMsgObj[1].A2R >> 2) & 0x07FF;
    }
    else
    {
      // extended ID
  	  pCanMsg->IdType = CAN_EXT_ID;
      pCanMsg->Id = ((CAN->sMsgObj[1].A2R >> 2) & 0x07FF) | ((u32)CAN->sMsgObj[1].A1R << 11) | (((u32)CAN->sMsgObj[1].A2R & 0x0003) << 27);
    }

    pCanMsg->Dlc = CAN->sMsgObj[1].MCR & 0x0F;

    pCanMsg->Data[0] = (u8) CAN->sMsgObj[1].DA1R;
    pCanMsg->Data[1] = (u8)(CAN->sMsgObj[1].DA1R >> 8);
    pCanMsg->Data[2] = (u8) CAN->sMsgObj[1].DA2R;
    pCanMsg->Data[3] = (u8)(CAN->sMsgObj[1].DA2R >> 8);
    pCanMsg->Data[4] = (u8) CAN->sMsgObj[1].DB1R;
    pCanMsg->Data[5] = (u8)(CAN->sMsgObj[1].DB1R >> 8);
    pCanMsg->Data[6] = (u8) CAN->sMsgObj[1].DB2R;
    pCanMsg->Data[7] = (u8)(CAN->sMsgObj[1].DB2R >> 8);

    return 1;
}

/*******************************************************************************
* Function Name  : CAN_WaitEndOfTx
* Description    : Wait until current transmission is finished
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void CAN_WaitEndOfTx(void)
{
	while ((CAN->SR & CAN_SR_TXOK) == 0);
	CAN->SR &= ~CAN_SR_TXOK;
}

/*******************************************************************************
* Function Name  : CAN_BasicSendMessage
* Description    : Start transmission of a message in BASIC mode
* Input 1        : pointer to the message structure containing data to transmit
* Output         : None
* Return         : 1 if transmission was OK, else 0
* Note           : CAN must be in BASIC mode
*******************************************************************************/
u32 CAN_BasicSendMessage(canmsg* pCanMsg)
{
	// clear NewDat bit in IF2 to detect next reception
	CAN->sMsgObj[1].MCR &= ~CAN_MCR_NEWDAT;

	CAN->SR &= ~CAN_SR_TXOK;

	CAN->sMsgObj[0].CMR = CAN_CMR_WRRD
  	                    | CAN_CMR_ARB
  	                    | CAN_CMR_CONTROL
  	                    | CAN_CMR_DATAA
  	                    | CAN_CMR_DATAB;

	if (pCanMsg->IdType == CAN_STD_ID)
	{
	  	// standard ID
		CAN->sMsgObj[0].A1R = 0;
		CAN->sMsgObj[0].A2R = (CAN->sMsgObj[0].A2R & 0xE000) | STD_FIXED_ID_ARB(pCanMsg->Id);
	}
	else
	{
  		// extended ID
		CAN->sMsgObj[0].A1R = EXT_FIXED_ID_ARB_L(pCanMsg->Id);
		CAN->sMsgObj[0].A2R = (CAN->sMsgObj[0].A2R & 0xE000) | EXT_FIXED_ID_ARB_H(pCanMsg->Id);
	}

	CAN->sMsgObj[0].MCR = (CAN->sMsgObj[0].MCR & 0xFCF0) | pCanMsg->Dlc;

	CAN->sMsgObj[0].DA1R = ((u16)pCanMsg->Data[1]<<8) | pCanMsg->Data[0];
	CAN->sMsgObj[0].DA2R = ((u16)pCanMsg->Data[3]<<8) | pCanMsg->Data[2];
	CAN->sMsgObj[0].DB1R = ((u16)pCanMsg->Data[5]<<8) | pCanMsg->Data[4];
	CAN->sMsgObj[0].DB2R = ((u16)pCanMsg->Data[7]<<8) | pCanMsg->Data[6];

	// request transmission
	CAN->sMsgObj[0].CRR = CAN_CRR_BUSY | (1 + 0);

	return 1;
}

/*******************************************************************************
* Function Name  : CAN_BasicReceiveMessage
* Description    : Get the message in BASIC mode, if received
* Input 1        : pointer to the message structure where received data is stored
* Output         : None
* Return         : 1 if reception was OK, else 0 (no message pending)
* Note           : CAN must be in BASIC mode
*******************************************************************************/
u32 CAN_BasicReceiveMessage(canmsg* pCanMsg)
{
	if ((CAN->sMsgObj[1].MCR & CAN_MCR_NEWDAT) == 0)
		return 0;

	CAN->SR &= ~CAN_SR_RXOK;

	CAN->sMsgObj[1].CMR =  CAN_CMR_ARB
  	                     | CAN_CMR_CONTROL
  	                     | CAN_CMR_DATAA
  	                     | CAN_CMR_DATAB;

    if ((CAN->sMsgObj[1].A2R & CAN_A2R_XTD) == 0)
    {
  	  // standard ID
  	  pCanMsg->IdType = CAN_STD_ID;
      pCanMsg->Id = (CAN->sMsgObj[1].A2R >> 2) & 0x07FF;
    }
    else
    {
      // extended ID
  	  pCanMsg->IdType = CAN_EXT_ID;
      pCanMsg->Id = ((CAN->sMsgObj[1].A2R >> 2) & 0x07FF) | ((u32)CAN->sMsgObj[1].A1R << 11) | (((u32)CAN->sMsgObj[1].A2R & 0x0003) << 27);
    }

    pCanMsg->Dlc = CAN->sMsgObj[1].MCR & 0x0F;

    pCanMsg->Data[0] = (u8) CAN->sMsgObj[1].DA1R;
    pCanMsg->Data[1] = (u8)(CAN->sMsgObj[1].DA1R >> 8);
    pCanMsg->Data[2] = (u8) CAN->sMsgObj[1].DA2R;
    pCanMsg->Data[3] = (u8)(CAN->sMsgObj[1].DA2R >> 8);
    pCanMsg->Data[4] = (u8) CAN->sMsgObj[1].DB1R;
    pCanMsg->Data[5] = (u8)(CAN->sMsgObj[1].DB1R >> 8);
    pCanMsg->Data[6] = (u8) CAN->sMsgObj[1].DB2R;
    pCanMsg->Data[7] = (u8)(CAN->sMsgObj[1].DB2R >> 8);

    return 1;
}

/******************* (C) COPYRIGHT 2003 STMicroelectronics *****END OF FILE****/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产不卡视频在线播放| 美女一区二区三区| 99久久精品国产一区二区三区| 欧美高清在线精品一区| 成人avav在线| 亚洲一区二区欧美| 欧美精品日日鲁夜夜添| 久久精品二区亚洲w码| wwwwww.欧美系列| 成人亚洲一区二区一| 亚洲另类一区二区| 5858s免费视频成人| 国产精品91xxx| 亚洲婷婷国产精品电影人久久| 欧美三级电影网站| 国产一区二区视频在线| 国产精品护士白丝一区av| 在线看国产一区| 久久电影网电视剧免费观看| 国产精品天美传媒| 在线不卡免费欧美| 成人午夜视频网站| 日韩中文字幕91| 国产视频一区二区在线观看| 91免费版pro下载短视频| 日韩av电影天堂| 中文字幕巨乱亚洲| 欧美日韩国产综合视频在线观看 | 91原创在线视频| 午夜精品久久久久久不卡8050| 精品国产精品网麻豆系列| 91丨porny丨最新| 狠狠色狠狠色合久久伊人| 亚洲精品国产第一综合99久久 | 亚洲精品伦理在线| 久久综合九色综合97婷婷| av亚洲精华国产精华精| 久久精品国产秦先生| 亚洲乱码国产乱码精品精小说 | 国产精品久久影院| 欧美一区二区免费| 99re成人在线| 国产毛片精品视频| 欧美aaa在线| 亚洲综合一二三区| 国产精品美女久久久久久久久久久| 777色狠狠一区二区三区| 91在线porny国产在线看| 国产盗摄女厕一区二区三区| 青青草国产精品亚洲专区无| 一区二区三区免费在线观看| 日本一区二区动态图| 日韩一区二区三区电影| 在线看不卡av| 成人国产电影网| 国产河南妇女毛片精品久久久| 免费不卡在线视频| 亚洲高清免费一级二级三级| 亚洲色图视频免费播放| 欧美国产激情二区三区| 久久久久亚洲蜜桃| 久久尤物电影视频在线观看| 日韩视频中午一区| 欧美男女性生活在线直播观看| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 欧美日韩精品一区二区三区蜜桃 | 国产偷v国产偷v亚洲高清| 精品免费国产二区三区| 日韩欧美在线网站| 91麻豆精品国产91久久久使用方法| 在线观看av一区| 色婷婷综合久久久久中文一区二区 | 欧美精品视频www在线观看| 一本一道波多野结衣一区二区| 91在线视频观看| 91在线视频观看| 色综合久久中文字幕| 在线日韩av片| 欧美色偷偷大香| 欧美精品久久久久久久多人混战| 欧美日韩高清影院| 欧美一区二区三区在线看| 日韩欧美国产综合一区 | 欧美视频一二三区| 欧美日韩激情一区二区| 欧美一区二区三区四区五区 | 精品欧美乱码久久久久久| 欧美成人精品1314www| 精品国免费一区二区三区| 久久久久久久综合日本| 国产三级一区二区| 国产精品久久久久aaaa樱花| 亚洲欧洲综合另类| 日韩精品一卡二卡三卡四卡无卡| 日韩**一区毛片| 国产一区美女在线| 91在线你懂得| 欧美日韩www| 久久久美女毛片| 亚洲美女在线一区| 日韩成人免费看| 九九九精品视频| 波多野结衣精品在线| 欧美亚一区二区| 精品国产伦理网| 亚洲日本va午夜在线影院| 亚洲成av人片一区二区| 激情五月播播久久久精品| 成人av网址在线| 欧美日韩国产一级| 国产欧美日韩在线视频| 亚洲一区二区影院| 国产一区二区三区在线观看精品 | 视频一区二区不卡| 福利视频网站一区二区三区| 欧美日韩亚洲国产综合| 久久免费午夜影院| 亚洲一二三四区不卡| 韩国精品免费视频| 在线亚洲人成电影网站色www| 日韩欧美成人一区| 曰韩精品一区二区| 国产主播一区二区三区| 欧美日韩在线播放一区| 国产日韩成人精品| 免费在线观看不卡| 91蝌蚪国产九色| 久久一夜天堂av一区二区三区| 一区二区三区四区在线播放| 国产一区二区三区在线观看精品| 欧美三级蜜桃2在线观看| 中文幕一区二区三区久久蜜桃| 天天影视涩香欲综合网| 91在线精品一区二区| 久久亚洲一区二区三区四区| 午夜久久久久久久久| 91在线观看高清| 久久综合国产精品| 日韩精品亚洲一区| 欧美自拍偷拍一区| 亚洲日本护士毛茸茸| 高清在线成人网| 精品日韩一区二区三区| 午夜久久久久久久久| 欧美亚洲禁片免费| 亚洲免费观看高清完整版在线| 成人中文字幕在线| 久久久久久麻豆| 国内欧美视频一区二区| 日韩欧美国产精品一区| 日韩二区三区四区| 欧美日韩在线播| 亚洲一区二区三区免费视频| 在线观看亚洲一区| 亚洲女厕所小便bbb| 暴力调教一区二区三区| 久久久蜜桃精品| 国产精品1024| 国产日韩欧美制服另类| 国内精品在线播放| 久久女同精品一区二区| 国产一区欧美日韩| 久久久久亚洲综合| 国产91色综合久久免费分享| 国产日产精品1区| 粉嫩久久99精品久久久久久夜| 国产无人区一区二区三区| 国产成人精品一区二| 国产精品免费av| 97成人超碰视| 亚洲第一二三四区| 日韩视频一区在线观看| 老司机免费视频一区二区三区| 精品久久久久久久久久久久包黑料| 久久国产尿小便嘘嘘| 国产日韩av一区二区| 99r精品视频| 亚洲一二三专区| 欧美电视剧在线看免费| 国产精品夜夜嗨| 国产精品国产三级国产普通话99 | 国产精品美女一区二区| 色综合久久久久| 亚洲va韩国va欧美va| 欧美日韩国产首页在线观看| 久久精品国产精品亚洲红杏| 久久久国产午夜精品| 99九九99九九九视频精品| 亚洲国产欧美另类丝袜| 欧美一区二区不卡视频| 国产精品一二三四区| 亚洲精品大片www| 欧美一区二区三区白人| 大胆亚洲人体视频| 亚洲午夜羞羞片| 精品国产一区二区精华| youjizz久久| 日韩国产精品91| 国产精品女主播av| 欧美日韩不卡在线|