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

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

?? can.c

?? 微處理器在arm的編程
?? C
?? 第 1 頁 / 共 2 頁
字號:
  	CAN->sMsgObj[msg_if].DB2R = 0;

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

/*******************************************************************************
* Function Name  : CAN_InvalidateAllMsgObj
* 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一区二区三区免费野_久草精品视频
国产成人精品aa毛片| 色婷婷久久久亚洲一区二区三区| 91老师片黄在线观看| 中文欧美字幕免费| 成人激情文学综合网| 国产亚洲视频系列| 成人网男人的天堂| 综合久久国产九一剧情麻豆| 欧美大片在线观看一区二区| 亚洲欧美日韩国产综合在线| 成人免费的视频| 国产欧美精品在线观看| 91在线视频18| 毛片av中文字幕一区二区| 久久久久久久免费视频了| 色综合久久中文综合久久97| 午夜久久久久久| 自拍偷拍亚洲欧美日韩| 国产精品久久久久aaaa樱花| 欧美亚男人的天堂| 精品一区二区三区不卡| 亚洲精品第1页| 精品99久久久久久| 欧洲一区在线电影| 国产米奇在线777精品观看| 亚洲午夜一二三区视频| 久久精品日产第一区二区三区高清版| 色婷婷精品大在线视频| 国产精品一区二区在线播放| 亚洲综合视频在线观看| 中文字幕国产一区| xfplay精品久久| 日韩免费视频线观看| 欧美日韩久久久一区| 91美女片黄在线观看| 国产精品性做久久久久久| 久久国产尿小便嘘嘘| 亚洲成人综合网站| 亚洲一卡二卡三卡四卡五卡| 最近中文字幕一区二区三区| 国产欧美日韩综合| 久久久久久久综合日本| 久久久久9999亚洲精品| 久久久久久久电影| 久久久综合网站| 国产精品三级av| 中文字幕精品在线不卡| 欧美国产综合色视频| 国产精品美女久久久久久久久| 久久五月婷婷丁香社区| 中文一区在线播放| 中文字幕中文字幕一区| 一区二区三区丝袜| 香蕉久久夜色精品国产使用方法| 亚洲va韩国va欧美va| 日韩av在线播放中文字幕| 精品一区二区三区蜜桃| 成人h动漫精品一区二| 91欧美一区二区| 欧美日韩亚洲高清一区二区| 日韩欧美国产综合在线一区二区三区| 日韩一级成人av| 国产精品丝袜久久久久久app| 国产精品免费人成网站| 亚洲欧美激情小说另类| 久久aⅴ国产欧美74aaa| www.av亚洲| 日韩一区二区三区在线视频| 国产亚洲成年网址在线观看| 1024成人网| 精品一二三四在线| 色综合久久六月婷婷中文字幕| 欧美一级二级三级蜜桃| 国产精品另类一区| 日韩黄色片在线观看| 成人一区二区在线观看| 欧美精品xxxxbbbb| 亚洲日本在线观看| 国产精品自拍网站| 福利一区在线观看| 欧美videossexotv100| 亚洲一级电影视频| 成人av一区二区三区| 欧美成人精品福利| 亚洲欧美日韩在线不卡| 麻豆国产精品官网| 欧美熟乱第一页| 国产亚洲精品aa| 日本中文字幕一区二区有限公司| 懂色av一区二区在线播放| 日韩欧美亚洲另类制服综合在线| 亚洲精品久久久蜜桃| 成人av电影免费在线播放| 精品美女被调教视频大全网站| 午夜私人影院久久久久| 一本久久a久久精品亚洲| 欧美激情一区不卡| 国产91精品精华液一区二区三区 | 五月婷婷另类国产| 欧美在线不卡一区| 亚洲精品国久久99热| 日本丶国产丶欧美色综合| 成人欧美一区二区三区黑人麻豆 | 国产美女av一区二区三区| 精品少妇一区二区三区免费观看 | 日韩电影在线观看一区| 777xxx欧美| 国产麻豆精品一区二区| 国产农村妇女毛片精品久久麻豆| 国产精品一级片| 一区二区三区中文字幕在线观看| 日本精品视频一区二区三区| 亚洲一区成人在线| 精品国产麻豆免费人成网站| 国产精品一区二区免费不卡| 国产精品国产三级国产有无不卡| 色综合久久久久久久久| 日韩va欧美va亚洲va久久| 久久久久9999亚洲精品| 欧美天堂一区二区三区| 国产一区二区三区在线观看免费| 中文字幕日韩一区| www国产精品av| 精品视频在线免费观看| 国产精品一卡二卡| 日韩精品免费视频人成| 国产精品看片你懂得| 日韩女优制服丝袜电影| 色综合久久久久综合| 国产成人欧美日韩在线电影| 亚洲动漫第一页| 亚洲婷婷国产精品电影人久久| 日韩免费一区二区三区在线播放| 一本久久综合亚洲鲁鲁五月天| 国产高清不卡一区二区| 麻豆久久一区二区| 婷婷六月综合亚洲| 亚洲美腿欧美偷拍| 国产精品乱码久久久久久| 久久久精品日韩欧美| 欧美tickling网站挠脚心| 在线综合+亚洲+欧美中文字幕| 一本到不卡精品视频在线观看| 成人午夜精品在线| 成人深夜在线观看| 不卡在线观看av| 粉嫩av亚洲一区二区图片| 成人在线综合网站| 懂色av一区二区三区蜜臀| 国内外成人在线| 国产一区二区福利视频| 国产麻豆成人精品| 国产69精品久久777的优势| 成人永久免费视频| 91亚洲国产成人精品一区二三| 99re亚洲国产精品| 欧美在线观看你懂的| 这里只有精品免费| 久久综合一区二区| 亚洲国产成人在线| 亚洲国产精品一区二区久久 | 九九久久精品视频| 国产成人自拍网| 在线观看日产精品| 精品免费一区二区三区| 亚洲丝袜精品丝袜在线| 香蕉成人伊视频在线观看| 国产在线精品一区二区夜色| 成人av午夜电影| 日韩一区二区三区视频在线观看| 国产欧美日韩另类一区| 亚洲一区二区三区四区不卡| 国产一区二区电影| 538在线一区二区精品国产| 久久欧美中文字幕| 亚洲国产另类精品专区| 粉嫩av一区二区三区在线播放| 欧美日韩国产系列| 日韩一区在线看| 国产乱淫av一区二区三区| 欧美三级一区二区| 亚洲免费观看视频| 国产精品一区二区男女羞羞无遮挡| 欧美亚洲日本一区| 一区二区三区蜜桃| 97精品视频在线观看自产线路二| 欧美mv日韩mv| 国产一区二区三区久久久| 91精品国产综合久久久久久漫画| 亚洲日本护士毛茸茸| 波多野结衣在线一区| 国产精品久久综合| 99免费精品视频| 中文在线免费一区三区高中清不卡| 国产又黄又大久久| 欧美不卡123| 夫妻av一区二区| 国产精品不卡在线观看| 99re6这里只有精品视频在线观看| 久久网这里都是精品|