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

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

?? 91x_can.c

?? 最新版FreeRTOS, 包擴多種開發平臺的移植
?? C
?? 第 1 頁 / 共 3 頁
字號:
  CAN->sMsgObj[msg_if].MCR = CAN_MCR_TXIE | CAN_MCR_EOB;

  CAN->sMsgObj[msg_if].DA1R = 0;
  CAN->sMsgObj[msg_if].DA2R = 0;
  CAN->sMsgObj[msg_if].DB1R = 0;
  CAN->sMsgObj[msg_if].DB2R = 0;

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

/*******************************************************************************
* Function Name  : CAN_SetRxMsgObj                                           
* Description    : Configures the message object as RX.                        
* Input          : - msgobj: specifies the Message object number, from 0 to 31.                    
*                  - idType: specifies the identifier type of the frames that
*                    will be transmitted using this message object.
*                    This parameter can be one of the following values:
*                          - CAN_STD_ID (standard ID, 11-bit)
*                          - CAN_EXT_ID (extended ID, 29-bit)                               
*                  - idLow: specifies the low part of the identifier range used      
*                    for acceptance filtering.
*                  - idHigh: specifies the high part of the identifier range    
*                    used for acceptance filtering.
*                  - singleOrFifoLast: specifies the end-of-buffer indicator.
*                    This parameter can be one of the following values:
*                          - TRUE: for a single receive object or a FIFO receive
*                            object that is the last one of the FIFO. 
*                          - FALSE: for a FIFO receive object that is not the 
*                            last one. 
* Output         : None                                                      
* Return         : An ErrorStatus enumuration value:
*                         - SUCCESS: Interface to treat the message
*                         - ERROR: No interface to treat the message
*******************************************************************************/
ErrorStatus CAN_SetRxMsgObj(u32 msgobj, u32 idType, u32 idLow, u32 idHigh, bool singleOrFifoLast)
{
  u32 msg_if=0;

  if ((msg_if = GetFreeIF()) == 2)
  {
    return ERROR;
  }
  
  CAN->sMsgObj[msg_if].CMR = CAN_CMR_WRRD
                           | CAN_CMR_MASK
                           | CAN_CMR_ARB
                           | CAN_CMR_CONTROL
                           | CAN_CMR_DATAA
                           | CAN_CMR_DATAB;

  if (idType == CAN_STD_ID)
  {
    CAN->sMsgObj[msg_if].M1R = 0;
    CAN->sMsgObj[msg_if].M2R = STD_RANGE_ID_MSK(idLow, idHigh);

    CAN->sMsgObj[msg_if].A1R = 0;
    CAN->sMsgObj[msg_if].A2R = CAN_A2R_MSGVAL | STD_RANGE_ID_ARB(idLow, idHigh);
  }
  else
  {
    CAN->sMsgObj[msg_if].M1R = EXT_RANGE_ID_MSK_L(idLow, idHigh);
    CAN->sMsgObj[msg_if].M2R = CAN_M2R_MXTD | EXT_RANGE_ID_MSK_H(idLow, idHigh);

    CAN->sMsgObj[msg_if].A1R = EXT_RANGE_ID_ARB_L(idLow, idHigh);
    CAN->sMsgObj[msg_if].A2R = CAN_A2R_MSGVAL | CAN_A2R_XTD | EXT_RANGE_ID_ARB_H(idLow, idHigh);
  }

  CAN->sMsgObj[msg_if].MCR = CAN_MCR_RXIE | CAN_MCR_UMASK | (singleOrFifoLast ? CAN_MCR_EOB : 0);

  CAN->sMsgObj[msg_if].DA1R = 0;
  CAN->sMsgObj[msg_if].DA2R = 0;
  CAN->sMsgObj[msg_if].DB1R = 0;
  CAN->sMsgObj[msg_if].DB2R = 0;

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

/*******************************************************************************
* Function Name  : CAN_InvalidateAllMsgObj				      
* Description    : Configures all the message objects as unused.               
* Input          : None                                                      
* Output         : None                                                      
* Return         : None                                                      
*******************************************************************************/
void CAN_InvalidateAllMsgObj(void)
{
  u32 i=0;
  for (i = 0; i < 32; i++)
    CAN_SetUnusedMsgObj(i);
}


/*******************************************************************************
* Function Name  : CAN_ReleaseMessage					      
* Description    : Releases the message object                                
* Input          : - msgobj: specifies the Message object number, from 0 to 31.                     
* Output         : None                                                      
* Return         : An ErrorStatus enumuration value:
*                         - SUCCESS: Interface to treat the message
*                         - ERROR: No interface to treat the message
*******************************************************************************/
ErrorStatus CAN_ReleaseMessage(u32 msgobj)
{
  u32 msg_if=0;

  if ((msg_if = GetFreeIF()) == 2)
  {
    return ERROR;
  }

  CAN->sMsgObj[msg_if].CMR = CAN_CMR_CLRINTPND | CAN_CMR_TXRQSTNEWDAT;
  CAN->sMsgObj[msg_if].CRR = 1 + msgobj;
  
  return SUCCESS;
}

/*******************************************************************************
* Function Name  : CAN_SendMessage                                           
* Description    : Start transmission of a message                           
* Input          : - msgobj: specifies the Message object number, from 0 to 31.                    
*                : - pCanMsg: pointer to the message structure containing data     
*                    to transmit.
* Output         : None                                                      
* Return         : An ErrorStatus enumuration value:
*                         - SUCCESS: Transmission OK
*                         - ERROR: No transmission
*******************************************************************************/
ErrorStatus CAN_SendMessage(u32 msgobj, canmsg* pCanMsg)
{
  if (CAN->sMsgObj[0].CRR & CAN_CRR_BUSY)
  {
    return ERROR;                    
  }

  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;

  if (CAN->sMsgObj[0].CRR & CAN_CRR_BUSY)
  {
    return ERROR;                    
  }

  /* 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 SUCCESS;
}

/*******************************************************************************
* Function Name  : CAN_ReceiveMessage                                        
* Description    : Gets the message, if received.
* Input          : - msgobj: specifies the Message object number, from 0 to 31.                     
*                  - release: specifies the message release indicator.
*                    This parameter can be one of the following values:
*                          - TRUE: the message object is released when getting  
*                            the data.
*                          - FALSE: the message object is not released.
*                  - pCanMsg: pointer to the message structure where received   
*                    data is copied.
* Output         : None                                                      
* Return         : An ErrorStatus enumuration value:
*                         - SUCCESS: Reception OK
*                         - ERROR: No message pending
*******************************************************************************/
ErrorStatus CAN_ReceiveMessage(u32 msgobj, bool release, canmsg* pCanMsg)
{
  if (!CAN_IsMessageWaiting(msgobj))
  {
    return ERROR;
  }

  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_TXRQSTNEWDAT : 0)
                      | CAN_CMR_DATAA
                      | CAN_CMR_DATAB;

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

  if (CAN->sMsgObj[1].CRR & CAN_CRR_BUSY)
  {
    return ERROR;                    
  }
  
  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); 
    pCanMsg->Id |= ((u32)CAN->sMsgObj[1].A1R << 11);
    pCanMsg->Id |= (((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 SUCCESS;
}

/*******************************************************************************
* Function Name  : CAN_WaitEndOfTx                                           
* Description    : Waits until current transmission is finished.               
* Input          : None                                                      
* Output         : None                                                      

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人精品视频一区| 日本中文在线一区| 久久免费午夜影院| 日韩一级片在线观看| 欧美一级夜夜爽| 日韩欧美成人午夜| 久久夜色精品一区| 欧美激情一区二区在线| 欧美国产精品久久| 亚洲日本成人在线观看| 亚洲欧美中日韩| 亚洲愉拍自拍另类高清精品| 亚洲午夜久久久久久久久电影院| 亚洲综合网站在线观看| 免费看黄色91| 高清国产一区二区| 91丨九色porny丨蝌蚪| 色爱区综合激月婷婷| 欧美高清精品3d| 久久综合色播五月| 国产精品高潮呻吟| 亚洲高清免费一级二级三级| 玖玖九九国产精品| 丰满少妇在线播放bd日韩电影| 99精品国产视频| 欧美一区二区视频网站| 精品理论电影在线观看 | 蜜桃视频在线一区| 国产精品99久| 欧美午夜精品理论片a级按摩| 91精品国产综合久久国产大片| 久久青草国产手机看片福利盒子 | 成人免费福利片| 欧美性视频一区二区三区| 91精品国产综合久久婷婷香蕉| 精品久久久久香蕉网| 亚洲精品成人在线| 国模套图日韩精品一区二区| 色婷婷久久99综合精品jk白丝| 日韩欧美一区二区视频| 亚洲国产激情av| 天堂午夜影视日韩欧美一区二区| 处破女av一区二区| 日韩精品一区二区在线| 一区二区三区四区激情| 精品制服美女丁香| 欧美丝袜丝nylons| 国产精品欧美经典| 狠狠色丁香九九婷婷综合五月| 色噜噜久久综合| 国产精品久久久久一区二区三区共| 亚洲成人综合在线| 91免费版pro下载短视频| 精品国产露脸精彩对白| 三级久久三级久久| 欧美日韩在线直播| 日韩一区日韩二区| 成人一级视频在线观看| 亚洲精品在线免费播放| 日本中文一区二区三区| 欧美色精品在线视频| 亚洲欧洲综合另类在线| 91在线高清观看| 日本一区二区不卡视频| 99re视频精品| 中文字幕一区二区不卡| 国产69精品久久久久毛片| 精品国产一区二区三区久久久蜜月| 婷婷中文字幕综合| 在线精品视频一区二区| 一区二区三区高清在线| 99国内精品久久| 中文字幕亚洲在| 成人av先锋影音| 国产精品黄色在线观看| 99精品视频免费在线观看| 精品国产91久久久久久久妲己| 日本欧美一区二区| 日韩一二三区视频| 国产主播一区二区三区| 久久久精品欧美丰满| 国产成a人无v码亚洲福利| 亚洲国产精品精华液ab| 成人av网址在线| 夜夜嗨av一区二区三区网页| 在线观看免费亚洲| 亚洲成人1区2区| 日韩欧美一级在线播放| 国产电影精品久久禁18| 综合激情成人伊人| 欧美日韩一区国产| 另类综合日韩欧美亚洲| 国产欧美一区二区在线观看| 99久久久久久| 天天色综合天天| 久久久国产精华| 99免费精品视频| 日韩国产在线观看| 亚洲免费看黄网站| 欧美日韩亚洲不卡| 精品一二三四区| 亚洲色图视频网| 91精品国产美女浴室洗澡无遮挡| 经典三级一区二区| 亚洲色图都市小说| 欧美大片免费久久精品三p| 国产激情精品久久久第一区二区| 一区二区免费在线| 精品国产电影一区二区| 色狠狠一区二区| 韩日精品视频一区| 亚洲一区二区三区四区在线免费观看 | 黑人精品欧美一区二区蜜桃| 自拍av一区二区三区| 欧美一区二区性放荡片| www.欧美亚洲| 美女任你摸久久| 中文字幕日本乱码精品影院| 91精品国产综合久久精品麻豆 | 国产资源在线一区| 亚洲网友自拍偷拍| 国产精品嫩草久久久久| 欧美一级免费观看| 91国偷自产一区二区开放时间| 六月丁香婷婷色狠狠久久| 一区二区三区蜜桃网| 国产午夜亚洲精品午夜鲁丝片| 欧美精品在线观看播放| 91视频观看免费| 国产寡妇亲子伦一区二区| 日韩黄色一级片| 一区二区高清在线| 最新国产の精品合集bt伙计| 久久久精品综合| 欧美精品一区二区三区蜜桃视频| 欧美久久一二三四区| 91黄色小视频| 色欧美日韩亚洲| 91同城在线观看| 成人精品免费视频| 成人影视亚洲图片在线| 精品一区二区三区影院在线午夜| 天天影视网天天综合色在线播放| 自拍av一区二区三区| 国产精品久久久久天堂| 中文字幕精品—区二区四季| 国产日韩欧美精品在线| 久久精品视频免费| 久久久99久久| 国产精品免费aⅴ片在线观看| 久久奇米777| 欧美激情一区二区三区蜜桃视频| 国产视频一区在线观看| 国产亚洲女人久久久久毛片| 久久午夜老司机| 国产拍欧美日韩视频二区| 国产精品国产三级国产普通话99| 国产亚洲精品aa午夜观看| 国产精品网站一区| 国产精品第13页| 亚洲裸体在线观看| 亚洲国产日韩精品| 蜜桃av噜噜一区二区三区小说| 蜜桃精品在线观看| 国产白丝精品91爽爽久久| 99精品国产视频| 欧美午夜免费电影| 精品国产一区二区亚洲人成毛片| 久久尤物电影视频在线观看| 国产精品视频麻豆| 亚洲欧美视频一区| 奇米精品一区二区三区四区 | 日韩写真欧美这视频| 精品国产一区二区三区不卡| 亚洲国产精品成人综合色在线婷婷| 国产欧美一区二区精品性 | 91色.com| 日韩一区二区中文字幕| 国产欧美日韩在线视频| 一区二区三国产精华液| 日本不卡视频一二三区| 成人国产电影网| 欧美日本在线播放| 久久无码av三级| 一区二区在线观看免费视频播放| 日韩 欧美一区二区三区| 国产精品中文字幕一区二区三区| 91丝袜美女网| 精品精品欲导航| 一区二区三区中文免费| 国产精品亚洲一区二区三区妖精| 日本高清不卡视频| 久久亚洲影视婷婷| 亚洲午夜电影在线| 99在线热播精品免费| 7777女厕盗摄久久久| 亚洲乱码日产精品bd| 国产一区久久久| 91麻豆精品久久久久蜜臀 | 日韩一区二区麻豆国产|