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

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

?? csp_spi.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_spi.c
* Description     : Function declarations for Serial Peripheral Interface 
                    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  08/06/01   Frederic SAMSON    Clean Up 
* 003  MOD  19/11/01   Christophe GARDIN  Clean Up
* 004  MOD  11/04/02   Christophe GARDIN  Add CSP_SPIClose function
* 005  MOD  13/05/02   Christophe GARDIN  Modify CSP_SPIReceive function
*----------------------------------------------------------------------------*/

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


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

/******************************************************************************
* Function          : CSP_SPIInit
* Description       : Switch on the clock, reset the registers and configure 
*                     the SPI module mode
* Inputs            : <*spi> = Pointer to SPI structure
*                     <mode> = Configure the SPI mode
* Functions called  : None
* Returns           : None
******************************************************************************/
void CSP_SPIInit(CSP_SPI_T *const spi, U32_T mode)
{
   /* Enable SPI Clock */
   CSP_SPI_SET_ECR(spi, (SPI | PIO));

   /* SPI Software Reset */
   CSP_SPI_SET_CR(spi, SWRST);
 
   /* Disable SPI PIO */
   CSP_SPI_SET_PDR(spi, (NPCS3 | NPCS2 | NPCS1 | NPCS0 | MOSI | MISO | SPCK));

   /* Configure SPI Mode */
   CSP_SPI_SET_MR(spi, mode);
}


/******************************************************************************
* Function          : CSP_SPIClose
* Description       : Reset and switch off the clock
* Inputs            : <*spi> = Pointer to SPI structure
* Functions called  : None
* Returns           : None
******************************************************************************/
void CSP_SPIClose(CSP_SPI_T *const spi)
{
   /* SPI Software Reset */
   CSP_SPI_SET_CR(spi, SWRST);

   /* Disable SPI Clock */
   CSP_SPI_SET_DCR(spi, (SPI | PIO));
}


/******************************************************************************
* Function          : CSP_SPIConfigureCS
* Description       : Configure the SPI Chip Select 
* Inputs            : <*spi> = Pointer to SPI structure
*                     <cs>   = Chip Select [0-3] to be configured
*                     <mode> = Configure the SPI Chip Select mode
* Functions called  : None
* Returns           : None
******************************************************************************/
void CSP_SPIConfigureCS(CSP_SPI_T *const spi, U8_T cs, U32_T mode)
{   
   /* Configure SPI CS mode */
   CSP_SPI_CS_SET_CSR(spi, cs, mode);
}


/******************************************************************************
* Function          : CSP_SPIConfigInterrupt
* Description       : Configure SPI Interrupts
* Inputs            : <*spi>     = Pointer to SPI 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_SPIConfigInterrupt(CSP_SPI_T *const spi, 
                            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(spi);

   /* Disable all interrupt */
   CSP_SPI_SET_IDR(spi, 0xFFFFFFFF);
   
   /* Interrupt Enable */
   CSP_SPI_SET_IER(spi, int_mask);

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


/******************************************************************************
* Function          : CSP_SPIEnable
* Description       : Enable SPI
* Inputs            : <*spi> = Pointer to SPI structure 
* Functions called  : None
* Returns           : None
******************************************************************************/
void CSP_SPIEnable(CSP_SPI_T *const spi)
{
   /* Enable SPI */
   CSP_SPI_SET_CR(spi, SPIEN);
}


/******************************************************************************
* Function          : CSP_SPIDisable
* Description       : Disable SPI 
* Inputs            : <*spi> = Pointer to SPI structure
* Functions called  : None
* Returns           : None
******************************************************************************/
void CSP_SPIDisable(CSP_SPI_T *const spi)
{
   /* Disable SPI */
   CSP_SPI_SET_CR(spi, SPIDIS);
}


/******************************************************************************
* Function          : CSP_SPIReceive
* Description       : Configure SPI to receive data. They are transferred 
*                     automatically to thanks to PDC.
* Inputs            : <*spi>    = Pointer to SPI structure
*                     <cs>      = Receiver Chip Select [0-3]
*                     <*cmd_tx> = Pointer to an array where command packet sent 
*                                 is stored 
*                     <*data>   = Pointer to an array where data packet received 
*                                 will be stored
*                     <length>  = Number of byte to receive
* Functions called  : CSP_PDCInitTx, CSP_PDCInitRx, CSP_PDCStartRx, CSP_PDCStartTx
* Returns           : None
******************************************************************************/
void CSP_SPIReceive(CSP_SPI_T *const spi, U8_T cs, U8_T *cmd_tx, U8_T *data, U16_T length)
{  
   U8_T transfer_size = 0;

   /* Get the type of peripheral select */
   if((CSP_SPI_GET_MR(spi) & PS) == PS)
   {
      /* Variable peripheral select : 16 bits Data + PCS = 32 bits */
      /*-----------------------------------------------------------*/
      transfer_size = SIZE_WORD;
   }
   else
   {
      /* Fix peripheral select */
      /*-----------------------*/
  
      /* Get the transfer size */
      if((CSP_SPI_CS_GET_CSR(spi, cs) & BITS) == 0)
      {
         /* 8 bits Data transfer */
         transfer_size = SIZE_BYTE;
      }
      else
      {
         /* 16 bits Data transfer */
         transfer_size = SIZE_HALFWORD;
      }   
   }

   /* PDC Definition */
   /* Send To Peripheral Opcode to read to a specified address */
   CSP_PDCInitTx((U32_T) spi, (U32_T) &(spi->TDR), transfer_size);

   /* Receive data from SPI */
   CSP_PDCInitRx((U32_T) spi, (U32_T) &(spi->RDR), transfer_size);

   /* Enable SPI */
   CSP_SPI_SET_CR(spi, SPIEN);

   /* Start Dialog */
   CSP_PDCStartRx((U32_T) spi, (U32_T) data, length);
   CSP_PDCStartTx((U32_T) spi, (U32_T) cmd_tx, length);
}


/******************************************************************************
* Function          : CSP_SPITransmit
* Description       : Configure SPI to transmit data. They are transferred 
*                     automatically from memory to SPI transmission buffer thanks to PDC.
* Inputs            : <*spi>   = Pointer to SPI structure
*                     <cs>     = Transmitter Chip Select [0-3]
*                     <*data>  = Pointer to an array where data packet sent is stored
*                     <length> = Number of byte to transmit
* Functions called  : CSP_PDCInitTx, CSP_PDCStartTx 
* Returns           : None
******************************************************************************/
void CSP_SPITransmit(CSP_SPI_T *const spi, U8_T cs, U8_T *data, U16_T length)
{
   U8_T transfer_size = 0;

   /* Get the type of peripheral select */
   if((CSP_SPI_GET_MR(spi) & PS) == PS)
   {
      /* Variable peripheral select : 16 bits Data + PCS = 32 bits */
      /*-----------------------------------------------------------*/
      transfer_size = SIZE_WORD;
   }
   else
   {
      /* Fix peripheral select */
      /*-----------------------*/

      /* Get the transfer size */
      if((CSP_SPI_CS_GET_CSR(spi, cs) & BITS) == 0)
      {
         /* 8 bits data transfer */
         transfer_size = SIZE_BYTE;
      }
      else
      {
         /* 16 bits data transfer */
         transfer_size = SIZE_HALFWORD;
      }   
   }
   
   /* PDC Definition */
   /* Send to Peripheral Opcode to read to a specified address */
   CSP_PDCInitTx((U32_T) spi, (U32_T) &(spi->TDR), transfer_size);

   /* Enable SPI */
   CSP_SPI_SET_CR(spi, SPIEN);

   /* Start Dialog */
   CSP_PDCStartTx((U32_T) spi, (U32_T) data, length);
}


/******************************************************************************
* Function          : CSP_SPIPioInit
* Description       : Configure SPI PIO 
* Inputs            : <*spi>       = Pointer to SPI structure
*                     <pio_mask>   = Configure which pins are activated
*                     <output_pio> = Configure which pins are configured as output
* Functions called  : None
* Returns           : None
******************************************************************************/
void CSP_SPIPioInit(CSP_SPI_T *const spi, U32_T pio_mask, U32_T output_pio)
{
   /* Enable PIO block */
   CSP_SPI_SET_ECR(spi, PIO);
   
   /* Disable all PIO */
   CSP_SPI_SET_PDR(spi, 0xFFFFFFFF);
   CSP_SPI_SET_ODR(spi, 0xFFFFFFFF);

   /* Enable PIO */
   CSP_SPI_SET_PER(spi, pio_mask);

   /* Set Output PIO */
   CSP_SPI_SET_OER(spi, output_pio);
}


/******************************************************************************
* Function          : CSP_SPIPioGetStatus
* Description       : Read the pin data status 
* Inputs            : <*spi> = Pointer to SPI structure
* Functions called  : None
* Returns           : 32-bit value of pin data status
******************************************************************************/
U32_T CSP_SPIPioGetStatus(CSP_SPI_T *const spi)
{
   /* Return PIO State */
   return (CSP_SPI_GET_PDSR(spi));
}


/******************************************************************************
* Function          : CSP_SPIPioClear
* Description       : Set the PIO to low level 
* Inputs            : <*spi>     = Pointer to SPI structure
*                     <pio_mask> = Configure which pins are set to low level
* Functions called  : None
* Returns           : None
******************************************************************************/
void CSP_SPIPioClear(CSP_SPI_T *const spi, U32_T pio_mask)
{
   /* Set PIO State */
   CSP_SPI_SET_CODR(spi, pio_mask);
}


/******************************************************************************
* Function          : CSP_SPIPioSet
* Description       : Set the PIO to high level 
* Inputs            : <*spi>     = Pointer to SPI structure
*                     <pio_mask> = Configure which pins are set to high level
* Functions called  : None
* Returns           : None
******************************************************************************/
void CSP_SPIPioSet(CSP_SPI_T *const spi, U32_T pio_mask)
{
   /* Set PIO State */
   CSP_SPI_SET_SODR(spi, pio_mask);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区免费观看| 日韩中文欧美在线| 日本一区二区三区四区| 精品国产3级a| 欧美成人性战久久| 日韩精品一区二区三区蜜臀 | 色综合久久综合网97色综合| 国产成人在线观看免费网站| 国产精品18久久久久久久久久久久| 国产一区二区三区精品视频| 精品一区二区免费视频| 国产精品亚洲专一区二区三区| 精品无码三级在线观看视频| 国产揄拍国内精品对白| 国产美女久久久久| 成人白浆超碰人人人人| 97se狠狠狠综合亚洲狠狠| 一本久道中文字幕精品亚洲嫩| 欧美视频在线观看一区二区| 5858s免费视频成人| 欧美大片日本大片免费观看| 2020国产精品自拍| 国产精品久久久久久户外露出 | 亚洲成人tv网| 奇米色777欧美一区二区| 国内一区二区在线| thepron国产精品| 色吊一区二区三区| 欧美丰满一区二区免费视频| 日韩欧美国产综合在线一区二区三区| 久久综合九色综合97_久久久| 久久久精品免费观看| 亚洲啪啪综合av一区二区三区| 午夜精品一区二区三区免费视频 | 成人app软件下载大全免费| 一本到不卡精品视频在线观看| 欧美美女一区二区在线观看| 欧美成人video| 成人欧美一区二区三区视频网页 | 不卡一区二区三区四区| 91福利视频久久久久| 欧美一区二区三区在线| 欧美激情一区在线| 亚洲成人综合视频| 国产一区二区精品久久91| 色婷婷精品久久二区二区蜜臀av | 中文字幕第一区综合| 亚洲国产精品嫩草影院| 国产精品正在播放| 在线观看三级视频欧美| 久久夜色精品国产欧美乱极品| 亚洲色图视频网站| 免费的国产精品| 成人激情黄色小说| 日韩亚洲欧美综合| 亚洲欧洲日产国码二区| 老鸭窝一区二区久久精品| 99v久久综合狠狠综合久久| 日韩一级黄色片| 亚洲综合男人的天堂| 国产河南妇女毛片精品久久久| 欧美性猛交xxxx乱大交退制版| 久久亚洲精品小早川怜子| 午夜精品一区在线观看| 99久久99久久久精品齐齐| 欧美zozozo| 亚洲综合色婷婷| 不卡一区二区在线| 久久影院午夜片一区| 日韩精品乱码av一区二区| 91热门视频在线观看| 国产亚洲成aⅴ人片在线观看| 亚洲成人av在线电影| 色综合久久中文综合久久97| 国产片一区二区三区| 美腿丝袜亚洲一区| 欧美性大战久久久久久久蜜臀 | 国产ts人妖一区二区| 日韩欧美专区在线| 亚洲午夜在线视频| 色综合色综合色综合| 欧美国产成人精品| 国产精品一区二区无线| 日韩欧美国产综合一区| 日本最新不卡在线| 欧美日韩精品久久久| 亚洲综合丝袜美腿| 色系网站成人免费| 亚洲欧美一区二区三区久本道91| 成人激情av网| 国产精品视频第一区| 懂色av一区二区夜夜嗨| 久久久精品2019中文字幕之3| 精品午夜久久福利影院 | 午夜国产不卡在线观看视频| 色婷婷久久综合| 亚洲视频免费在线观看| bt欧美亚洲午夜电影天堂| 欧美国产精品一区| 国产91精品久久久久久久网曝门| 久久精品亚洲精品国产欧美 | 欧美电影在线免费观看| 亚洲国产一二三| 欧美日韩免费高清一区色橹橹| 亚洲午夜在线电影| 欧美日韩免费观看一区三区| 午夜av一区二区三区| 欧美男生操女生| 日韩国产精品久久久久久亚洲| 欧美一区二区女人| 国产一区二三区好的| 精品福利在线导航| 日韩精品欧美精品| 日韩一级片在线播放| 黄页网站大全一区二区| 国产欧美日韩三区| av在线播放不卡| 亚洲精品视频在线看| 欧美在线观看视频一区二区三区| 亚洲国产精品影院| 日韩午夜精品电影| 国产露脸91国语对白| 国产精品美女久久久久aⅴ| voyeur盗摄精品| 亚洲国产精品久久久久秋霞影院 | 欧美一区二区三区小说| 久久成人久久爱| 久久影院电视剧免费观看| 成人午夜在线免费| 夜夜爽夜夜爽精品视频| 欧美日韩高清一区二区三区| 男女性色大片免费观看一区二区 | 91丨porny丨户外露出| 久久精品夜夜夜夜久久| 国产精品综合一区二区三区| 国产欧美日韩在线| 色素色在线综合| 天堂午夜影视日韩欧美一区二区| 欧美成人在线直播| av电影在线观看一区| 一区二区三区四区av| 6080yy午夜一二三区久久| 国产精品18久久久久久久网站| 亚洲欧美另类久久久精品| 51精品视频一区二区三区| 国产一区二区毛片| 亚洲品质自拍视频| 日韩欧美成人午夜| 91丨九色porny丨蝌蚪| 日韩av不卡在线观看| 日本一区二区三区四区 | 日本一区二区三区视频视频| 色综合中文字幕| 天天综合日日夜夜精品| 337p日本欧洲亚洲大胆精品| va亚洲va日韩不卡在线观看| 日韩精品成人一区二区三区| 国产欧美综合在线| 日韩欧美国产综合一区| 91视频在线观看免费| 久久激情五月激情| 亚洲精品老司机| 久久综合给合久久狠狠狠97色69| 91极品美女在线| 国产一区二区导航在线播放| 亚洲成av人片在www色猫咪| 国产欧美日产一区| 欧美日本在线视频| 99久久婷婷国产综合精品电影| 日本成人在线电影网| 自拍视频在线观看一区二区| 日韩欧美一区二区免费| 91传媒视频在线播放| 成人午夜看片网址| 麻豆国产欧美日韩综合精品二区| 亚洲色大成网站www久久九九| 久久精品日产第一区二区三区高清版| 91精品久久久久久蜜臀| 在线一区二区三区四区| av中文字幕不卡| 国模冰冰炮一区二区| 日韩二区三区四区| 亚洲激情自拍视频| 国产精品美女视频| 久久久久9999亚洲精品| 日韩欧美的一区| 777久久久精品| 欧美日韩国产影片| 在线观看亚洲专区| 91视频一区二区| 粉嫩高潮美女一区二区三区| 激情六月婷婷久久| 麻豆高清免费国产一区| 天天色天天操综合| 性做久久久久久久久| 亚洲国产精品视频| 亚洲一区欧美一区| 亚洲国产精品久久久久婷婷884 | 亚洲三级免费电影| 综合在线观看色|