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

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

?? bsp_can.c

?? IAR 平臺ATMEL 的例程, 和說明
?? C
?? 第 1 頁 / 共 3 頁
字號:
            /* Send Data (Extended Format) */
            CSP_CAN_CHANNEL_SET_CR(CAN1, GENERAL_TRANSMIT, ( CHANEN | IDE | PCB | ( can_pkt->length & DLC_MASK)));

            /* Increment Tail Pointer to the next packet to send*/
            (*tx_tailptr)++;
            (*tx_tailptr) %= BSP_CAN_TX_QUEUE_SIZE;
         }
         /* Tx Queue is Empty */     
         else
         {
            BSP_CanStatus_a_s[1].transmit_u8  = 0;
         }
      }   
   }
   /* Check if TXOK is an Interrupt Source */
   else if( (CSP_CAN_CHANNEL_GET_SR(CAN1, GENERAL_TRANSMIT) & TXOK & CSP_CAN_CHANNEL_GET_IMR(CAN1, GENERAL_TRANSMIT)) != 0 )
   {
      /* Clear TXOK Error Interrupt Flag*/
      while(CSP_CAN_CHANNEL_GET_SR(CAN1, GENERAL_TRANSMIT) & TXOK )
         CSP_CAN_CHANNEL_SET_CSR(CAN1, GENERAL_TRANSMIT, TXOK);
      
      /* Check if the Trasmit Queue is Empty (no more frame to send) */
      if( *tx_headptr != *tx_tailptr )
      {
         /* Copy Data to Send In CAN Mailbox*/
            CSP_CAN_CHANNEL_SET_DRA(CAN1, GENERAL_TRANSMIT, *(U32_T *)(&(can_pkt->data[0])));
            CSP_CAN_CHANNEL_SET_DRB(CAN1, GENERAL_TRANSMIT, *(U32_T *)(&(can_pkt->data[4])));                    

         /* Set Idetifier Field */
         CSP_CAN_CHANNEL_SET_IR(CAN1, GENERAL_TRANSMIT,(( can_pkt->identifier & 0x1FFC0000 ) >> 18) | ((can_pkt->identifier & 0x3FFFF) << 11));      
            
         /* Send Data (Extended Format) */
         CSP_CAN_CHANNEL_SET_CR(CAN1, GENERAL_TRANSMIT, ( CHANEN | IDE | PCB | ( can_pkt->length & DLC_MASK)));

         /* Increment Tail Pointer to the next packet to send*/
         (*tx_tailptr)++;
         (*tx_tailptr) %= BSP_CAN_TX_QUEUE_SIZE;
      }
      /* Tx Queue is Empty */     
      else
      {
         BSP_CanStatus_a_s[1].transmit_u8  = 0;
      }
   }
}


/****************************************************************************
Function    : BSP_CAN1MBX15InterruptHandler
Description : CAN0 General Receive Interrupt Handler
Inputs      : None
Returns     : None
****************************************************************************/
void BSP_CAN1MBX15InterruptHandler(void)
{
   /* Local Variables */
   BSP_CAN_PKT_T *can_pkt;
   U8_T           *rx_headptr;
   
   /* Get Current head pointers in Rx Queue */
   rx_headptr = &(BSP_CanStatus_a_s[1].queue.rx_headptr);
   
   /* Get Current CAN Packet in Rx Queue */
   can_pkt = &(BSP_CanStatus_a_s[1].queue.rx_queue[*rx_headptr]);
   
   /* Check if RXOK is an Interrupt Source */
   if( (CSP_CAN_CHANNEL_GET_SR(CAN1, MBX15) & RXOK & CSP_CAN_CHANNEL_GET_IMR(CAN1, MBX15)) != 0 )
   {
      /* Clear ACK Error Interrupt Flag*/
      CSP_CAN_CHANNEL_SET_CSR(CAN1, MBX15, RXOK);

      /* Get packet length */
      can_pkt->length = CSP_CAN_CHANNEL_GET_CR(CAN1, MBX15) & 0x0F ;

      /* Copy Data In Rx Queue */
      memcpy((U8_T*)(&(can_pkt->data[1])), (U8_T*)(&(CSP_CAN_CHANNEL_GET_DRA(CAN1, MBX15))), (8 * sizeof(U8_T)) );
             
      /* Get Idetifier Field */
      can_pkt->identifier = (( CSP_CAN_CHANNEL_GET_IR(CAN1, MBX15)& 0x7FF ) << 18) | ((CSP_CAN_CHANNEL_GET_IR(CAN1, MBX15) & 0x1FFFF800)  >> 11);
      can_pkt->msecs      = CSP_CAN_CHANNEL_GET_STP(CAN1, MBX15);
         
      /* Increment head Pointer to the next packet to receive */
      (*rx_headptr)++;
      (*rx_headptr) %= BSP_CAN_RX_QUEUE_SIZE;
   }
}

/****************************************************************************
Function    : BSP_CAN2MBX0InterruptHandler
Description : CAN1 General Transmit Interrupt
            : 
Inputs      : None
Returns     : None
****************************************************************************/
void BSP_CAN2MBX0InterruptHandler(void)
{
   /* Local Variables */
   BSP_CAN_PKT_T  *can_pkt;
   U8_T            *tx_tailptr;
   U8_T            *tx_headptr;
   
   /* Get Current head & tail pointers in Tx Queue */
   tx_tailptr = &(BSP_CanStatus_a_s[CAN2_IO].queue.tx_tailptr);
   tx_headptr = &(BSP_CanStatus_a_s[CAN2_IO].queue.tx_headptr);
   
   /* Get Current Tx Packet in Tx Queue */
   can_pkt  = &(BSP_CanStatus_a_s[CAN2_IO].queue.tx_queue[*tx_tailptr]);
   
   /* Check if ACK is an Interrupt Source */
   if( (CSP_CAN_CHANNEL_GET_SR(CAN2, GENERAL_TRANSMIT) & ACK & CSP_CAN_CHANNEL_GET_IMR(CAN2, GENERAL_TRANSMIT)) != 0 )
   {
      while( CSP_CAN_CHANNEL_GET_SR(CAN2, GENERAL_TRANSMIT) & ACK )
         CSP_CAN_CHANNEL_SET_CSR(CAN2, GENERAL_TRANSMIT, ACK);

      /* Increment Ack Counter */
      BSP_CanStatus_a_s[CAN2_IO].ack_counter_u8++;

      /* If Ack Limit */
      if( BSP_CanStatus_a_s[CAN2_IO].ack_counter_u8 == BSP_CanStatus_a_s[CAN2_IO].ack_limit_u8 )     
      {
         /* Disable Transission */
         CSP_CAN_CHANNEL_SET_CR(CAN2, GENERAL_TRANSMIT, 0);
         
         /* Clear Ack Counter */
         BSP_CanStatus_a_s[CAN2_IO].ack_counter_u8 = 0;
         
         /* Check if the Trasmit Queue is Empty (no more frame to send) */
        if( *tx_headptr != *tx_tailptr )
        {
           /* Copy Data to Send In CAN Mailbox*/
            CSP_CAN_CHANNEL_SET_DRA(CAN2, GENERAL_TRANSMIT, *(U32_T *)(&(can_pkt->data[0])));
            CSP_CAN_CHANNEL_SET_DRB(CAN2, GENERAL_TRANSMIT, *(U32_T *)(&(can_pkt->data[4])));                     

           /* Set Idetifier Field */
           CSP_CAN_CHANNEL_SET_IR(CAN2, GENERAL_TRANSMIT,(( can_pkt->identifier & 0x1FFC0000 ) >> 18) | ((can_pkt->identifier & 0x3FFFF) << 11));              
         
           /* Send Data (Extended Format) */
           CSP_CAN_CHANNEL_SET_CR(CAN2, GENERAL_TRANSMIT, ( CHANEN | IDE | PCB | ( can_pkt->length & DLC_MASK)));

           /* Increment Tail Pointer to the next packet to send*/
           (*tx_tailptr)++;
           (*tx_tailptr) %= BSP_CAN_TX_QUEUE_SIZE;
        }
        /* Tx Queue is Empty */     
        else
        {
           BSP_CanStatus_a_s[2].transmit_u8  = 0;
        }
      }   
   }

   /* Check if TXOK is an Interrupt Source */
   else if( (CSP_CAN_CHANNEL_GET_SR(CAN2, GENERAL_TRANSMIT) & TXOK & CSP_CAN_CHANNEL_GET_IMR(CAN2, GENERAL_TRANSMIT)) != 0 )
   {
      /* Clear TXOK Error Interrupt Flag*/
      while( CSP_CAN_CHANNEL_GET_SR(CAN2, GENERAL_TRANSMIT) & TXOK )
         CSP_CAN_CHANNEL_SET_CSR(CAN2, GENERAL_TRANSMIT, TXOK);
      
      /* Check if the Trasmit Queue is Empty (no more frame to send) */
      if( *tx_headptr != *tx_tailptr )
      {
         /* Copy Data to Send In CAN Mailbox*/
            CSP_CAN_CHANNEL_SET_DRA(CAN2, GENERAL_TRANSMIT, *(U32_T *)(&(can_pkt->data[0])));
            CSP_CAN_CHANNEL_SET_DRB(CAN2, GENERAL_TRANSMIT, *(U32_T *)(&(can_pkt->data[4])));                       

         /* Set Idetifier Field */
         CSP_CAN_CHANNEL_SET_IR(CAN2, GENERAL_TRANSMIT,(( can_pkt->identifier & 0x1FFC0000 ) >> 18) | ((can_pkt->identifier & 0x3FFFF) << 11));                      
     
         /* Send Data (Extended Format) */
         CSP_CAN_CHANNEL_SET_CR(CAN2, GENERAL_TRANSMIT, ( CHANEN | IDE | PCB | ( can_pkt->length & DLC_MASK)));  

         /* Increment Tail Pointer to the next packet to send*/
         (*tx_tailptr)++;
         (*tx_tailptr) %= BSP_CAN_TX_QUEUE_SIZE;
      }
      /* Tx Queue is Empty */     
      else
      {
         BSP_CanStatus_a_s[2].transmit_u8  = 0;
      }
   }
}

/****************************************************************************
Function    : BSP_CAN2MBX31InterruptHandler
Description : CAN2 General Receive Interrupt Handler
Inputs      : None
Returns     : None
****************************************************************************/
void BSP_CAN2MBX31InterruptHandler(void)
{
   /* Local Variables */
   BSP_CAN_PKT_T  *can_pkt;
   U8_T           *rx_headptr;
   
   /* Get Current head pointers in Rx Queue */
   rx_headptr = &(BSP_CanStatus_a_s[CAN2_IO].queue.rx_headptr);
   
   /* Get Current CAN Packet in Rx Queue */
   can_pkt = &(BSP_CanStatus_a_s[CAN2_IO].queue.rx_queue[*rx_headptr]);
   
   /* Check if RXOK is an Interrupt Source */
   if( (CSP_CAN_CHANNEL_GET_SR(CAN2, MBX31) & RXOK & CSP_CAN_CHANNEL_GET_IMR(CAN2, MBX31)) != 0 )
   {
      /* Clear ACK Error Interrupt Flag*/
      CSP_CAN_CHANNEL_SET_CSR(CAN2, MBX31, RXOK);

      /* Get packet length */
      can_pkt->length = CSP_CAN_CHANNEL_GET_CR(CAN2, MBX31) & 0x0F ;

      /* Copy Data In Rx Queue */
      memcpy((U8_T*)(&(can_pkt->data[0])), (U8_T*)(&(CSP_CAN_CHANNEL_GET_DRA(CAN2, MBX31))), (8 * sizeof(U8_T)) );
             
      /* Get Idetifier Field */
      can_pkt->identifier = ((CSP_CAN_CHANNEL_GET_IR(CAN2, MBX31) & 0x7FF ) << 18) | ((CSP_CAN_CHANNEL_GET_IR(CAN2, MBX31) & 0x1FFFF800)  >> 11);
      can_pkt->msecs      = CSP_CAN_CHANNEL_GET_STP(CAN2, MBX31);
         
      /* Increment head Pointer to the next packet to receive */
      (*rx_headptr)++;
      (*rx_headptr) %= BSP_CAN_RX_QUEUE_SIZE;
   }
}

/****************************************************************************
Function    : BIOS_CANConfigMailbox
Description :
Inputs      : BIOS_CAN_IO_E can_io
            : BIOS_CAN_MAILBOX_ID_E mailbox_id
            : BIOS_CAN_MAILBOX_CONFIGURE_PTR mailbox_config
Returns     : None
****************************************************************************/
void BSP_CANConfigMailbox(BSP_CAN_IO_E can_io, BSP_CAN_MAILBOX_ID_E mailbox_id, BSP_CAN_MAILBOX_CONFIGURE_PTR mailbox_config)
{
   /* Local Variables */
   CSP_CAN_PTR can_controller_ptr;

   /* Check if can_io is valid */
   if ((U8_T) can_io < (U8_T) BSP_NB_CAN_IO)
   {
      if( (mailbox_id != GENERAL_RECEIVE) &&  (mailbox_id != GENERAL_TRANSMIT) && 
          ((U8_T) mailbox_id > 0)         &&  ((U8_T) mailbox_id < (BSP_CanStatus_a_s[can_io].number_of_mailbox_u8 - 1)) )
      {
         /* Get Current CAN Controller */
         can_controller_ptr = (CSP_CAN_PTR) BSP_CanStatus_a_s[can_io].can_controller_u32;

         /* Set CAN Mailbox Status Callback Function */
         BSP_CanStatus_a_s[can_io].mailbox_status[mailbox_id].identifier       = mailbox_config->identifier;
         BSP_CanStatus_a_s[can_io].mailbox_status[mailbox_id].identifier_mask  = mailbox_config->identifier_mask;
         BSP_CanStatus_a_s[can_io].mailbox_status[mailbox_id].length           = mailbox_config->length;
         BSP_CanStatus_a_s[can_io].mailbox_status[mailbox_id].mailbox_function = mailbox_config->mailbox_function;
         BSP_CanStatus_a_s[can_io].mailboxes_used |= (1 << mailbox_id);
         BSP_CanStatus_a_s[can_io].mailboxes_available &= ~(1 << mailbox_id);

         /* Configure CAN Channel In Reception with Id and Mask */
         CSP_CANReceive(can_controller_ptr, mailbox_id,  mailbox_config->identifier,  mailbox_config->identifier_mask, ((mailbox_config->length)|OVERWRITE));

         /* Configure CAN Channel Interrupt */
         CSP_CANChannelConfigInterrupt(can_controller_ptr, mailbox_id, RXOK);
      }
      /* BIOS Fault */
      else
      {
         //BIOS_Error_e = BIOS_INVALID_PARAMETER; 
      }
   }
   /* BIOS Fault */
   else
   {
         //BIOS_Error_e = BIOS_INVALID_PIN; 
   }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产日韩av一区二区| 91论坛在线播放| 26uuu精品一区二区| 久久99精品国产.久久久久 | 国产午夜精品在线观看| 韩国午夜理伦三级不卡影院| 国产欧美一区二区精品性色| 91网站最新网址| 亚洲超碰精品一区二区| 26uuu精品一区二区| av成人免费在线| 亚洲与欧洲av电影| 91精品国产高清一区二区三区蜜臀| 美女爽到高潮91| 国产日韩欧美电影| 欧美探花视频资源| 久久精品久久综合| 亚洲欧美综合另类在线卡通| 欧美日韩极品在线观看一区| 久久国产三级精品| 亚洲精品视频免费观看| 91精品国产综合久久福利软件| 韩国精品主播一区二区在线观看| 中文字幕一区二区日韩精品绯色| 欧美色男人天堂| 国产精品系列在线播放| 一区二区理论电影在线观看| 久久综合色婷婷| 91国产福利在线| 国产精品一区二区久久不卡| 一区二区三国产精华液| 久久精品夜色噜噜亚洲aⅴ| 欧美怡红院视频| 国产精品一卡二| 午夜激情久久久| 亚洲视频电影在线| 337p日本欧洲亚洲大胆色噜噜| 91丝袜高跟美女视频| 极品美女销魂一区二区三区 | av电影在线观看完整版一区二区| 丝袜脚交一区二区| 亚洲品质自拍视频| 26uuu精品一区二区| 678五月天丁香亚洲综合网| 99久久免费视频.com| 精品无人码麻豆乱码1区2区| 亚洲一二三区视频在线观看| 国产精品欧美一区喷水| 精品国产免费一区二区三区四区 | 欧美日韩大陆在线| av色综合久久天堂av综合| 国产乱码一区二区三区| 午夜一区二区三区在线观看| 成人欧美一区二区三区1314| 久久九九久久九九| 日韩一级高清毛片| 欧美日韩国产在线播放网站| 成人av在线电影| 国产精品一区二区在线看| 久国产精品韩国三级视频| 天天做天天摸天天爽国产一区| 亚洲另类中文字| 一区二区中文视频| 中文字幕亚洲一区二区av在线| 久久女同互慰一区二区三区| 精品成人佐山爱一区二区| 日韩精品资源二区在线| 欧美一激情一区二区三区| 4438x成人网最大色成网站| 成人国产精品免费观看动漫| 欧美午夜精品久久久久久孕妇| jizz一区二区| 99久久婷婷国产| 97aⅴ精品视频一二三区| 91浏览器入口在线观看| 一本到不卡免费一区二区| 国产剧情一区二区三区| 国产在线播放一区二区三区| 国产精品中文字幕一区二区三区| 国产精品香蕉一区二区三区| 国产福利一区二区三区视频在线 | 日韩电影在线一区二区| 欧美国产日韩a欧美在线观看| 久久久久久久国产精品影院| 99久久er热在这里只有精品15| 日韩福利电影在线观看| 国产精品视频观看| 中文一区二区完整视频在线观看| 国产精品久久久久久久久晋中| 国产精品免费久久久久| 中文字幕综合网| 亚洲一区二区三区自拍| 日韩激情视频网站| 久久精品国产成人一区二区三区 | 亚洲人xxxx| 日韩中文字幕一区二区三区| 秋霞午夜鲁丝一区二区老狼| 国产美女一区二区| 99re热这里只有精品免费视频| 欧美在线一区二区| 欧美一区二区日韩一区二区| 国产亚洲制服色| 亚洲视频一二三| 日韩国产高清影视| 国产一区二区视频在线播放| 成人aa视频在线观看| 欧美日韩久久久一区| 久久综合久久综合久久综合| 中文字幕色av一区二区三区| 午夜精品久久久久久久| 久久国产精品色| 91年精品国产| 精品免费日韩av| 综合婷婷亚洲小说| 久久国产综合精品| 色综合欧美在线| 欧美成人精品福利| 亚洲免费观看高清完整版在线| 日韩成人一级大片| 成人美女视频在线看| 欧美一区二区三区免费| 亚洲啪啪综合av一区二区三区| 蜜臀av一区二区在线免费观看| www.99精品| 精品国产麻豆免费人成网站| 一区二区三区产品免费精品久久75| 蜜臀精品一区二区三区在线观看| 国产成a人亚洲| 日韩精品一区二区三区视频 | 国产精品久线在线观看| 天涯成人国产亚洲精品一区av| 暴力调教一区二区三区| 欧美日韩精品电影| 亚洲欧美视频一区| 国产福利一区二区三区| 在线综合+亚洲+欧美中文字幕| 国产精品久久网站| 精品系列免费在线观看| 欧美日韩色一区| 五月综合激情婷婷六月色窝| caoporn国产一区二区| 精品国产在天天线2019| 亚洲成人午夜影院| 色8久久精品久久久久久蜜| 国产色一区二区| 国产一区二区在线电影| 欧美xxxxx裸体时装秀| 五月激情六月综合| 色域天天综合网| 亚洲欧洲av一区二区三区久久| 国产乱码精品1区2区3区| 日韩一区二区三免费高清| 亚洲成人中文在线| 日本伦理一区二区| 亚洲色图欧洲色图婷婷| 91在线视频观看| 国产精品久久毛片a| 粉嫩av亚洲一区二区图片| 久久久久久亚洲综合影院红桃| 精品亚洲porn| 久久久久国产精品麻豆ai换脸| 国产一区二区三区综合| 久久久久国产精品人| 高清久久久久久| 欧美国产精品专区| 成人黄色片在线观看| 国产精品麻豆久久久| 成人黄色777网| 日韩理论片在线| 色8久久精品久久久久久蜜| 亚洲一区二区在线播放相泽| 在线看不卡av| 香蕉久久一区二区不卡无毒影院 | 日本中文字幕一区二区有限公司| 欧美亚日韩国产aⅴ精品中极品| 一区二区三区精品视频| 欧美图区在线视频| 午夜国产精品一区| 日韩欧美的一区| 国产精品99久| 亚洲日韩欧美一区二区在线| 91麻豆高清视频| 日韩专区中文字幕一区二区| 精品免费国产二区三区| 成人午夜电影网站| 亚洲男人天堂av网| 欧美日韩免费不卡视频一区二区三区| 亚洲第一福利一区| 亚洲精品在线电影| 国产精品资源网站| 亚洲精品乱码久久久久| 91精品在线麻豆| 国产一本一道久久香蕉| 国产精品久久久久aaaa| 欧美性大战xxxxx久久久| 日本中文一区二区三区| 国产欧美一区二区三区在线看蜜臀| 99re这里只有精品视频首页| 日韩av一区二区在线影视| 国产视频一区二区三区在线观看|