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

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

?? csp_can.c

?? IAR 平臺ATMEL 的例程, 和說明
?? C
字號:
/*-----------------------------------------------------------------------------
*   EUROPE TECHNOLOGIES Software Support
*------------------------------------------------------------------------------
* The software is delivered "AS IS" without warranty or condition of any
* kind, either express, implied or statutory. This includes without
* limitation any warranty or condition with respect to merchantability or
* fitness for any particular purpose, or against the infringements of
* intellectual property rights of others.
*------------------------------------------------------------------------------
*
* File Name       : csp_can.c
* Description     : Function declarations for Controller Area Network management
* Library Version : 2.00
* Module Version  : 1.XX
*
*       +----- (NEW | MODify | ADD | DELete)                                 
*       |                                                                    
*  No   |   When       Who                What               
*-----+---+----------+------------------+--------------------------------------
* 000  NEW  01/05/99   Patrice VILCHEZ    Creation
* 001  MOD  01/04/01   Olivier MAZUYER    Clean up
* 002  MOD  23/05/01   Tristan BONHOMME   Clean up
* 003  MOD  26/05/01   Patrice VILCHEZ    Set correct ID in SendData function
*                                         Correct SPY mode in ReceiveData
*                                         function
*                                         Use memcpy function in ReceiveData
*                                         function
* 004  MOD  19/11/01   Christophe GARDIN  Clean Up
* 005  MOD  11/04/02   Christophe GARDIN  Add CSP_CANClose function
*----------------------------------------------------------------------------*/

/******************************************************************************
* Include Files
******************************************************************************/
#include "csp.h"


/******************************************************************************
****************************  F U N C T I O N S  ******************************
******************************************************************************/

/******************************************************************************
Function          : CSP_CANInit
Description       : Switch on the clock, reset the registers and wait for channels
                    registers initialization (8 * nb channels * core clock period)
                    and configure the CAN module mode
Inputs            :
- <*can> = Pointer to CAN structure
- <mode> = Configure the CAN mode
Functions called  : None
Returns           : None
******************************************************************************/
void CSP_CANInit(CSP_CAN_T *const can, U32_T mode)
{
   /* Local Variables */
   U16_T i = 0;

   /* Enable CAN Clock */  
   CSP_CAN_SET_ECR(can, CAN);
  
   /* CAN Software Reset */  
   CSP_CAN_SET_CR(can, SWRST);
  
   /* Wait for channels registers initialization */
   /* This avoid using the interrupt that should take more time to process */
   for(i = 0; i < (8u * 32u); i++)
   {
   }

   /* Configure CAN Mode */
   CSP_CAN_SET_MR(can, mode);
}


/******************************************************************************
Function          : CSP_CANClose
Description       : Reset and switch off the clock
Inputs            : <*can> = Pointer to CAN structure
Functions called  : None
Returns           : None
******************************************************************************/
void CSP_CANClose(CSP_CAN_T *const can)
{
   /* CAN Software Reset */  
   CSP_CAN_SET_CR(can, SWRST);

   /* Disable CAN Clock */  
   CSP_CAN_SET_DCR(can, CAN);
}


/******************************************************************************
Function          : CSP_CANConfigInterrupt
Description       : Configure CAN Interrupts
Inputs            :
- <*can>     = Pointer to CAN structure
- <int_mode> = Configure the priority level and source type
- <int_mask> = Configure which interrupt bits are activated
- <callback> = Function called through the assembler interrupt handler
Functions called  : 創CSP_GET_INTERRUPT_NUMBER創, 創CSP_GICConfigInterrupt創
Returns           : None
******************************************************************************/
void CSP_CANConfigInterrupt(CSP_CAN_T *const can, 
                            U32_T int_mode, 
                            U32_T int_mask, 
                            U32_T callback)
{
   /* Local Variables */
   U8_T int_num = 0;

   /* Get Peripheral Interrupt Number */
   int_num = CSP_GET_INTERRUPT_NUMBER(can);

   /* Disable and clear all interrupt */
   CSP_CAN_SET_IDR(can, 0xFFFFFFFF);
   CSP_CAN_SET_SIDR(can, 0xFFFFFFFF);
   CSP_CAN_SET_CISR(can, 0xFFFFFFFF);

   /* Interrupt Enable in Peripheral */
   CSP_CAN_SET_IER(can, int_mask);

   /* Configure CAN controller interrupt mode in GIC module */
   CSP_GICConfigInterrupt(int_num, int_mode, callback);
}
                     

/******************************************************************************
Function          : CSP_CANChannelConfigInterrupt
Description       : Configure/Enable CAN Channel Interrupt
Inputs            :
- <*can>     = Pointer to CAN structure
- <channel>  = Channel [0-31] to be configured
- <int_mask> = Configure which channel interrupt bits are activated
Functions called  : None
Returns           : None
******************************************************************************/
void CSP_CANChannelConfigInterrupt(CSP_CAN_T *const can, 
                                   U8_T channel, 
                                   U32_T int_mask)
{
   /* Set Channel Interrupt Enable */ 
   CSP_CAN_CHANNEL_SET_IER(can, channel, int_mask);

   /* Set Channel Interrupt Source in CAN Controller */
   CSP_CAN_SET_SIER(can, (CSP_CAN_GET_SIMR(can) | (0x1ul << channel)));
}


/******************************************************************************
Function          : CSP_CANEnable
Description       : Enable CAN (12 祍 is necessary at 30MHz after an enable
                    command to transfer and receive data)
Inputs            : <*can> = Pointer to CAN structure
Functions called  : None
Returns           : None
******************************************************************************/
void CSP_CANEnable(CSP_CAN_T *const can)
{
   /* Enable CAN */
   CSP_CAN_SET_CR(can, CANEN);
}  


/******************************************************************************
Function          : CSP_CANDisable
Description       : Disable CAN
Inputs            : <*can> = Pointer to CAN structure
Functions called  : None
Returns           : None
******************************************************************************/
void CSP_CANDisable(CSP_CAN_T *const can)
{
   /* Disable CAN */
   CSP_CAN_SET_CR(can, CANDIS);
}  


/******************************************************************************
Function          : CSP_CANReceive
Description       : Configure a CAN channel to pick up message from the network
                    User defines if the message waited is a remote frame or a
                    data frame.
Inputs            :
- <*can>    = Pointer to CAN structure
- <channel> = Receiver channel [0-31]
- <id>      = Configure the identifier and the remote request
- <mask>    = Configure the mask and the remote request
- <control> = Configure the number of byte to receive and the control bits
Functions called  : None
Returns           : None
******************************************************************************/
void CSP_CANReceive(CSP_CAN_T *const can, 
                    U8_T channel, 
                    U32_T id,
                    U32_T mask, 
                    U8_T control)
{
   if((control & IDE) == IDE)
   {
      /* Set Id Register (29 bits length) */
      CSP_CAN_CHANNEL_SET_IR(can, channel, (((id & 0x1FFC0000ul) >> 18) | 
                                            ((id & 0x3FFFFul) << 11)) | 
                                             (id & 0xE0000000ul));
      /* Set Mask Register (29 bits length) */
      CSP_CAN_CHANNEL_SET_MSK(can, channel, (((mask & 0x1FFC0000ul) >> 18) | 
                                             ((mask & 0x3FFFFul) << 11)) |
                                              (mask & 0xE0000000ul));
   }                                          
   else
   {
      /* Set Id Register (11 bits length) */
      CSP_CAN_CHANNEL_SET_IR(can, channel, (id & 0xE00007FFul));
      /* Set Mask Register (11 bits length) */
      CSP_CAN_CHANNEL_SET_MSK(can, channel, (mask & 0xE00007FFul));
   }

   /* Set the length and the receive command */
   CSP_CAN_CHANNEL_SET_CR(can, channel, (CHANEN | control));
}


/******************************************************************************
Function          : CSP_CANTransmit
Description       : Configure a CAN channel to transmit message on the network.
                    The message can be a remote frame or a data frame.
Inputs            :
- <*can>    = Pointer to CAN structure
- <channel> = Transmitter channel [0-31]
- <id>      = Configure the identifier and the remote request
- <*data>   = Pointer to an array where data packet sent is stored
- <control> = Configure the number of byte to transmit and the control bits
Functions called  : None
Returns           : None
******************************************************************************/
void CSP_CANTransmit(CSP_CAN_T *const can, 
                     U8_T channel, 
                     U32_T id, 
                     U8_T *data, 
                     U16_T control)
{
   /* Local Variables */
   U8_T i = 0; 
   U8_T length = (control & 0xF);
   U8_T dra_drb[8] = {0, 0, 0, 0, 0, 0, 0, 0};     /* Clear DRA and DRB */

   /* Set Id Register */
   if((control & IDE) == IDE)
   {
      /* Set Id Register (29 bits length) */
      CSP_CAN_CHANNEL_SET_IR(can, channel, (((id & 0x1FFC0000ul) >> 18) | 
                                            ((id & 0x3FFFFul) << 11)) |
                                             (id & 0xE0000000ul));
   }
   else
   {
      /* Set Id Register (11 bits length) */
      CSP_CAN_CHANNEL_SET_IR(can, channel, (id & 0xE00007FFul));
   }

   /* No copy if remote transmission request */
   if((CSP_CAN_CHANNEL_GET_IR(can, channel) & RTR) == 0)
   {
      /* Copy N bytes in DRA and DRB to Send */
      for(i = 0; i < length; i++)
      {
         dra_drb[i] = data[i];
      }
 
      /* The writing in DRA and DRB must be in 32 bits */
      CSP_CAN_CHANNEL_SET_DRA(can, channel, (*(U32_T*)&dra_drb[0]));
      CSP_CAN_CHANNEL_SET_DRB(can, channel, (*(U32_T*)&dra_drb[4]));
   }
                                       
   /* Set the length and the transmit command */
   CSP_CAN_CHANNEL_SET_CR(can, channel, (CHANEN | PCB | control));
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产色一区| 91视频免费播放| 色综合天天综合狠狠| 日韩一区二区免费在线电影| 亚洲色图欧洲色图婷婷| 九色porny丨国产精品| 极品尤物av久久免费看| 国产欧美中文在线| 午夜精品久久久久久久99水蜜桃| yourporn久久国产精品| 2017欧美狠狠色| 日本成人中文字幕| 欧美少妇一区二区| 亚洲一区二区影院| 色噜噜狠狠色综合中国| 中文字幕五月欧美| 国产91精品一区二区麻豆网站| 欧美成人精品1314www| 日韩高清国产一区在线| 欧美日韩视频一区二区| 亚洲一区二区偷拍精品| 欧美视频中文一区二区三区在线观看 | 日韩欧美一区二区免费| 亚欧色一区w666天堂| 欧美性xxxxxx少妇| 国产精品日韩精品欧美在线| 亚洲天堂av一区| 成人永久aaa| 亚洲国产成人在线| 国产精品911| 中文字幕+乱码+中文字幕一区| 激情六月婷婷综合| 精品久久人人做人人爰| 狠狠色丁香婷婷综合久久片| 欧美成人a∨高清免费观看| 另类小说图片综合网| 日韩一区二区三区在线观看| 全国精品久久少妇| 日韩精品在线看片z| 青草av.久久免费一区| 欧美一区2区视频在线观看| 水野朝阳av一区二区三区| 欧美一区二区黄| 美女视频黄a大片欧美| 精品国产乱码久久久久久老虎| 久久99国产精品麻豆| 日本一区二区免费在线观看视频| 精品欧美一区二区在线观看| 日本少妇一区二区| 日韩精品一区二区三区老鸭窝| 精品一区二区三区在线播放视频| 国产日韩一级二级三级| 97成人超碰视| 日韩精品国产欧美| 2023国产精品| 色香色香欲天天天影视综合网| 亚洲成人一二三| 精品少妇一区二区三区免费观看 | 777亚洲妇女| 极品少妇xxxx偷拍精品少妇| 国产精品女主播在线观看| 在线观看一区日韩| 国模一区二区三区白浆| 亚洲欧洲av一区二区三区久久| 欧美图区在线视频| 性做久久久久久免费观看欧美| 亚洲尤物在线视频观看| 91精品在线免费观看| 国产一区91精品张津瑜| 亚洲欧美激情插| 精品国产成人在线影院| 日本黄色一区二区| 国产美女视频91| 午夜一区二区三区在线观看| 久久影院视频免费| 欧美日韩一区 二区 三区 久久精品 | 综合久久一区二区三区| 91精品国产综合久久久久| 成人黄动漫网站免费app| 日韩国产精品大片| 亚洲欧洲综合另类| 久久综合色天天久久综合图片| 欧美私模裸体表演在线观看| 成人午夜视频网站| 久久成人免费电影| 香蕉成人伊视频在线观看| 国产丝袜在线精品| 欧美一级片在线看| 精品视频在线视频| 97se亚洲国产综合自在线观| 国模大尺度一区二区三区| 午夜欧美视频在线观看| 亚洲乱码国产乱码精品精98午夜| 久久精品夜色噜噜亚洲aⅴ| 91精品国产综合久久精品app| 99国产精品视频免费观看| 国产一区二区福利视频| 久久97超碰色| 奇米综合一区二区三区精品视频| 亚洲一区在线视频观看| 亚洲欧美日韩在线播放| 亚洲欧洲性图库| 国产日韩欧美a| 久久尤物电影视频在线观看| 精品久久久久99| 精品久久久久久久久久久久久久久久久 | 欧美α欧美αv大片| 欧美精品aⅴ在线视频| 在线观看区一区二| 欧美系列日韩一区| 欧美视频一区二| 色婷婷激情一区二区三区| 91蜜桃在线观看| 91丨porny丨蝌蚪视频| 91在线看国产| 色综合久久久久| 欧美午夜在线观看| 欧美精品1区2区| 日韩精品一区二区三区视频播放| 3751色影院一区二区三区| 日韩小视频在线观看专区| 日韩精品一区二| 欧美国产一区在线| 中文字幕视频一区二区三区久| 亚洲美女电影在线| 午夜精品123| 久久国产尿小便嘘嘘尿| 国产精品99久久久久| eeuss鲁片一区二区三区在线观看| 91片黄在线观看| 欧美日韩精品一二三区| 精品伦理精品一区| 中文字幕永久在线不卡| 亚洲女同一区二区| 日本不卡123| 国产精品456露脸| 色老汉av一区二区三区| 91麻豆精品国产91久久久资源速度| 欧美一区二区精品| 欧美国产精品久久| 亚洲成人av一区| 国模少妇一区二区三区| 91视视频在线观看入口直接观看www | 日韩高清一区在线| 国产精品一二三四五| 波多野结衣视频一区| 欧美日韩中文一区| 国产三级一区二区三区| 亚洲一区在线视频| 国产一区二区三区久久久| 91麻豆精品在线观看| 日韩午夜激情av| 国产精品久久久久四虎| 日本三级亚洲精品| bt7086福利一区国产| 日韩一区二区三区视频在线| 中文字幕日韩一区二区| 久久精品免费观看| 91成人网在线| 中文一区二区完整视频在线观看 | 欧美日韩的一区二区| 国产亚洲欧美激情| 三级欧美韩日大片在线看| av不卡免费电影| 日韩午夜av电影| 亚洲一区影音先锋| 国产高清在线精品| 日韩欧美在线网站| 亚洲免费观看高清完整版在线观看| 激情成人综合网| 欧美日韩国产片| 一区二区三区中文字幕精品精品| 国产一区二区免费视频| 日韩一级二级三级| 午夜精品福利一区二区三区av| 本田岬高潮一区二区三区| 欧美xfplay| 日本在线播放一区二区三区| 色综合天天综合色综合av| 国产精品毛片a∨一区二区三区| 久久电影网站中文字幕| 欧美精品在欧美一区二区少妇| 亚洲日本中文字幕区| 国产aⅴ精品一区二区三区色成熟| 日韩视频永久免费| 日本不卡一区二区| 91精品国产91久久久久久最新毛片| 亚洲视频中文字幕| 99精品久久免费看蜜臀剧情介绍| 国产欧美精品一区二区三区四区 | 日本欧美大码aⅴ在线播放| 欧美伊人久久久久久久久影院| 亚洲人亚洲人成电影网站色| 国产成人av电影在线播放| 日韩欧美一级片| 极品美女销魂一区二区三区免费| 欧美一区二区黄| 九色综合国产一区二区三区| 欧美va日韩va| 国产一区二区美女诱惑|