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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ti_cc_spi.c

?? 基于MSP430單片機的菜單級無限通信程序
?? C
?? 第 1 頁 / 共 4 頁
字號:
//----------------------------------------------------------------------------
//  Description:  This file contains functions that allow the MSP430 device to 
//  access the SPI interface of the CC1100/CC2500.  There are multiple 
//  instances of each function; the one to be compiled is selected by the 
//  system variable TI_CC_RF_SER_INTF, defined in "TI_CC_hardware_board.h".
//
//  MSP430/CC1100-2500 Interface Code Library v1.0
//
//  K. Quiring
//  Texas Instruments, Inc.
//  July 2006
//  IAR Embedded Workbench v3.41
//----------------------------------------------------------------------------


#include "include.h"



//----------------------------------------------------------------------------
//  void TI_CC_SPISetup(void)
//
//  DESCRIPTION:
//  Configures the assigned interface to function as a SPI port and
//  initializes it.
//----------------------------------------------------------------------------
//  void TI_CC_SPIWriteReg(char addr, char value)
//
//  DESCRIPTION:
//  Writes "value" to a single configuration register at address "addr".
//----------------------------------------------------------------------------
//  void TI_CC_SPIWriteBurstReg(char addr, char *buffer, char count)
//
//  DESCRIPTION:
//  Writes values to multiple configuration registers, the first register being
//  at address "addr".  First data byte is at "buffer", and both addr and
//  buffer are incremented sequentially (within the CCxxxx and MSP430,
//  respectively) until "count" writes have been performed.
//----------------------------------------------------------------------------
//  char TI_CC_SPIReadReg(char addr)
//
//  DESCRIPTION:
//  Reads a single configuration register at address "addr" and returns the
//  value read.
//----------------------------------------------------------------------------
//  void TI_CC_SPIReadBurstReg(char addr, char *buffer, char count)
//
//  DESCRIPTION:
//  Reads multiple configuration registers, the first register being at address
//  "addr".  Values read are deposited sequentially starting at address
//  "buffer", until "count" registers have been read.
//----------------------------------------------------------------------------
//  char TI_CC_SPIReadStatus(char addr)
//
//  DESCRIPTION:
//  Special read function for reading status registers.  Reads status register
//  at register "addr" and returns the value read.
//----------------------------------------------------------------------------
//  void TI_CC_SPIStrobe(char strobe)
//
//  DESCRIPTION:
//  Special write function for writing to command strobe registers.  Writes
//  to the strobe at address "addr".
//----------------------------------------------------------------------------


// Delay function. # of CPU cycles delayed is similar to "cycles". Specifically,
// it's ((cycles-15) % 6) + 15.  Not exact, but gives a sense of the real-time
// delay.  Also, if MCLK ~1MHz, "cycles" is similar to # of useconds delayed.
void TI_CC_Wait(unsigned int cycles)
{
  while(cycles>15)                          // 15 cycles consumed by overhead
    cycles = cycles - 6;                    // 6 cycles consumed each iteration
}


// SPI port functions
#if TI_CC_RF_SER_INTF == TI_CC_SER_INTF_USART0


void TI_CC_SPISetup(void)
{
  TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN;   //#define TI_CC_CSn_PxOUT         P5OUT
                                      //#define TI_CC_CSn_PxDIR         P5DIR
                                      //#define TI_CC_CSn_PIN           0x01
  TI_CC_CSn_PxDIR |= TI_CC_CSn_PIN;         // /CS disable 用P5

  ME1 |= USPIE0;                            // Enable USART0 SPI mode
  UCTL0 |= CHAR + SYNC + MM;                // 8-bit SPI Master **SWRST** 為什么后面不加上+SWRST
  UTCTL0 |= CKPH + SSEL1 + SSEL0 + STC;     // SMCLK, 3-pin mode
  UBR00 = 0x02;                             // UCLK/2
  UBR10 = 0x00;                             // 0
  UMCTL0 = 0x00;                            // No modulation
  TI_CC_SPI_USART0_PxSEL |= TI_CC_SPI_USART0_SIMO | TI_CC_SPI_USART0_SOMI | TI_CC_SPI_USART0_UCLK;
                                            //#define TI_CC_SPI_USART0_PxSEL  P3SEL
                                            //#define TI_CC_SPI_USART0_SIMO   0x02
                                            //#define TI_CC_SPI_USART0_SOMI   0x04
                                            //#define TI_CC_SPI_USART0_UCLK   0x08
                                            // SPI option select 用P3
  TI_CC_SPI_USART0_PxDIR |= TI_CC_SPI_USART0_SIMO + TI_CC_SPI_USART0_UCLK;
                                            // SPI TX out direction 設(shè)P3的輸出
  UCTL0 &= ~SWRST;                          // Initialize USART state machine
}

void TI_CC_SPIWriteReg(char addr, char value)
{
    TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN;      // /CS enable用P5
    while (TI_CC_SPI_USART0_PxIN&TI_CC_SPI_USART0_SOMI);// Wait for CCxxxx ready
    //#define TI_CC_SPI_USART0_SOMI   0x04
    //#define TI_CC_SPI_USART0_PxIN   P3IN        // chosen MSP430 device datasheet.
    IFG1 &= ~URXIFG0;                       // Clear flag from first dummy byte
    //#define IFG1_               (0x0002)  // Interrupt Flag 1 
    //#define URXIFG0             (0x40)
    U0TXBUF = addr;                         // Send address
    while (!(IFG1&URXIFG0));                // Wait for TX to finish
    IFG1 &= ~URXIFG0;                       // Clear flag from first dummy byte
    U0TXBUF = value;                        // Send value
    while (!(IFG1&URXIFG0));                // Wait for end of data TX
    TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN;       // /CS disable
}

void TI_CC_SPIWriteBurstReg(char addr, char *buffer, char count)
{
    char i;

    TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN;      // /CS enable
    while (TI_CC_SPI_USART0_PxIN&TI_CC_SPI_USART0_SOMI);// Wait for CCxxxx ready
    U0TXBUF = addr | TI_CCxxx0_WRITE_BURST; // Send address TI_CCxxx0_WRITE_BURST=0x40就象協(xié)議規(guī)定的
    //#define TI_CCxxx0_WRITE_BURST  0x40
    while (!(IFG1&UTXIFG0));                // Wait for TX to finish
    for (i = 0; i < count; i++)
    {
      U0TXBUF = buffer[i];                  // Send data
      while (!(IFG1&UTXIFG0));              // Wait for TX to finish
    }
    IFG1 &= ~URXIFG0;
    while(!(IFG1&URXIFG0));
    TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN;       // /CS disable
}

char TI_CC_SPIReadReg(char addr)
{
  char x;

  TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN;        // /CS enable
  while (TI_CC_SPI_USART0_PxIN&TI_CC_SPI_USART0_SOMI);// Wait for CCxxxx ready
  U0TXBUF = (addr | TI_CCxxx0_READ_SINGLE); // Send address
  while (!(IFG1&URXIFG0));                  // Wait for TX to finish
  IFG1 &= ~URXIFG0;                         // Clear flag set during last write
  U0TXBUF = 0;                              // Dummy write so we can read data
  while (!(IFG1&URXIFG0));                  // Wait for RX to finish
  x = U0RXBUF;                              // Read data
  TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN;         // /CS disable

  return x;
}

void TI_CC_SPIReadBurstReg(char addr, char *buffer, char count)
{
  unsigned int i;

  TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN;        // /CS enable
  while (TI_CC_SPI_USART0_PxIN&TI_CC_SPI_USART0_SOMI);// Wait for CCxxxx ready
  IFG1 &= ~URXIFG0;                         // Clear flag
  U0TXBUF = (addr | TI_CCxxx0_READ_BURST);  // Send address TI_CCxxx0_READ_BURST=00x80
  while (!(IFG1&UTXIFG0));                  // Wait for TXBUF ready
  U0TXBUF = 0;                              // Dummy write to read 1st data byte
  // Addr byte is now being TX'ed, with dummy byte to follow immediately after
  while (!(IFG1&URXIFG0));                  // Wait for end of addr byte TX
  IFG1 &= ~URXIFG0;                         // Clear flag
  while (!(IFG1&URXIFG0));                  // Wait for end of 1st data byte TX
  // First data byte now in RXBUF
  for (i = 0; i < (count-1); i++)
  {
    U0TXBUF = 0;                            //Initiate next data RX, meanwhile..
    buffer[i] = U0RXBUF;                    // Store data from last data RX
    while (!(IFG1&URXIFG0));                // Wait for end of data RX
  }
  buffer[count-1] = U0RXBUF;                // Store last RX byte in buffer
  TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN;         // /CS disable
}

// For status/strobe addresses, the BURST bit selects between status registers
// and command strobes.不明白
char TI_CC_SPIReadStatus(char addr)
{
  char x;

  TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN;        // /CS enable
  while (TI_CC_SPI_USART0_PxIN & TI_CC_SPI_USART0_SOMI);// Wait for CCxxxx ready
  IFG1 &= ~URXIFG0;                         // Clear flag set during last write
  U0TXBUF = (addr | TI_CCxxx0_READ_BURST);  // Send address
  while (!(IFG1&URXIFG0));                  // Wait for TX to finish
  IFG1 &= ~URXIFG0;                         // Clear flag set during last write
  U0TXBUF = 0;                              // Dummy write so we can read data
  while (!(IFG1&URXIFG0));                  // Wait for RX to finish
  x = U0RXBUF;                              // Read data
  TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN;         // /CS disable

  return x;
}

void TI_CC_SPIStrobe(char strobe)
{
  TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN;        // /CS enable
  while (TI_CC_SPI_USART0_PxIN&TI_CC_SPI_USART0_SOMI);// Wait for CCxxxx ready
  U0TXBUF = strobe;                         // Send strobe
  // Strobe addr is now being TX'ed
  IFG1 &= ~URXIFG0;                         // Clear flag
  while (!(IFG1&URXIFG0));                  // Wait for end of addr TX
  TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN;         // /CS disable
}

void TI_CC_PowerupResetCCxxxx(void)
{
  TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN;					// /CS disable
  TI_CC_Wait(30);                       //delay
  TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN;				// /CS enable
  TI_CC_Wait(30);
  TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN;					// /CS disable
  TI_CC_Wait(45);

  TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN;        // /CS enable
  while (TI_CC_SPI_USART0_PxIN&TI_CC_SPI_USART0_SOMI);// Wait for CCxxxx ready
  //#define TI_CC_SPI_USART0_PxIN   P3IN        // chosen MSP430 device datasheet.
  //#define TI_CC_SPI_USCIB1_SOMI   0x04
  U0TXBUF = TI_CCxxx0_SRES;                 // Send strobe // Reset chip.
  #define U0TXBUF_            (0x0077)  // USART 0 Transmit Buffer 
  //#define TI_CCxxx0_SRES         0x30        // Reset chip.
  // Strobe addr is now being TX'ed
  IFG1 &= ~URXIFG0;                         // Clear flag
  //#define IFG1_               (0x0002)  // Interrupt Flag 1 
  //#define URXIFG0             (0x40)
  while (!(IFG1&URXIFG0));                  // Wait for end of addr TX
  while (TI_CC_SPI_USART0_PxIN&TI_CC_SPI_USART0_SOMI);
  TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN;         // /CS disable
}


#elif TI_CC_RF_SER_INTF == TI_CC_SER_INTF_USART1


void TI_CC_SPISetup(void)
{
  TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN;
  TI_CC_CSn_PxDIR |= TI_CC_CSn_PIN;         // /CS disable

  /////IE2 |= UCB0TXIE + UCB0RXIE; ///ME2 |= USPIE1;                            // Enable USART1 SPI mode同步中斷模式使能
  UCB0CTL0 |=UCMST + UCSYNC + UCCKPL + UCMSB; ///UCTL1 |= CHAR + SYNC + MM;           // 8-bit SPI Master **SWRST** 高字節(jié)先
  UCB0CTL1 |= UCSSEL_2;////UCSSEL0 + UCSSEL1 + UCSWRST;///UTCTL1 |= CKPL + SSEL1 + SSEL0 + STC;     // SMCLK, 3-pin mode
  UCB0BR0 = 0X09;////UCB0BR0 = 0x02;                             // UCLK/2
  UCB0BR1 = 0x00;                             // 
  ////UCA0MCTL = 0x6b; //UMCTL1 = 0x00;                            // No modulation
  TI_CC_SPI_USART1_PxSEL |= TI_CC_SPI_USART1_SIMO + TI_CC_SPI_USART1_SOMI + TI_CC_SPI_USART1_UCLK;
                                            // SPI option select
  TI_CC_SPI_USART1_PxDIR |= TI_CC_SPI_USART1_SIMO + TI_CC_SPI_USART1_UCLK;
                                            // SPI TXD out direction
  UCB0CTL1 &= ~UCSWRST; ///UCTL1 &= ~SWRST;                          // Initialize USART state machine
}

void TI_CC_SPIWriteReg(char addr, char value)
{
    TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN;      // /CS enable
    while (TI_CC_SPI_USART1_PxIN&TI_CC_SPI_USART1_SOMI);// Wait for CCxxxx ready
    IFG2 &= ~UCB0RXIFG;///URXIFG1;                       // Clear flag清中斷
    UCB0TXBUF = addr;///U1TXBUF = addr;                         // Send address
    while (!(IFG2&UCB0RXIFG/*URXIFG1*/));                // Wait for TX to finish
    IFG2 &= ~UCB0RXIFG;/*URXIFG1*/                       // Clear flag
    UCB0TXBUF = value;//U1TXBUF = value;                        // Load data for TX after addr
    while (!(IFG2&UCB0RXIFG/*URXIFG1*/));                // Wait for end of addr TX
    TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN;       // /CS disable
}

void TI_CC_SPIWriteBurstReg(char addr, char *buffer, char count)
{
    char i;

    TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN;      // /CS enable
    while (TI_CC_SPI_USART1_PxIN&TI_CC_SPI_USART1_SOMI);// Wait for CCxxxx ready
    
    IFG2 &=  ~UCB0RXIFG;   ////
    
    UCB0TXBUF = addr | TI_CCxxx0_WRITE_BURST;///U1TXBUF = addr | TI_CCxxx0_WRITE_BURST; // Send address
    while (!(IFG2&UCB0TXIFG/*UTXIFG1*/));                // Wait for TX to finish
    for (i = 0; i < count; i++)
    {
      IFG2 &=  ~UCB0RXIFG;   //// 
      
      UCB0TXBUF = buffer[i];///U1TXBUF = buffer[i];                  // Send data
      while (!(IFG2&UCB0TXIFG/*UTXIFG1*/));              // Wait for TX to finish
    }
    IFG2 &= ~UCB0RXIFG;///URXIFG1;
    while(!(IFG2&UCB0RXIFG/*URXIFG1*/));
    TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN;       // /CS disable
}

char TI_CC_SPIReadReg(char addr)
{
  char x;

  TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN;        // /CS enable
  while (TI_CC_SPI_USART1_PxIN&TI_CC_SPI_USART1_SOMI);// Wait for CCxxxx ready
  IFG2 &= ~UCB0RXIFG;///URXIFG1;                         // Clear flag set during addr TX
  UCB0TXBUF = (addr | TI_CCxxx0_READ_SINGLE);///U1TXBUF = (addr | TI_CCxxx0_READ_SINGLE); // Send address
  while (!(IFG2&UCB0RXIFG/*URXIFG1*/));                  // Wait for TXBUF ready
  IFG2 &= ~UCB0RXIFG;///URXIFG1;                         // Clear flag set during addr TX
  UCB0TXBUF = 0;///U1TXBUF = 0;                              // Load dummy byte for TX after addr
  while (!(IFG2&UCB0RXIFG/*URXIFG1*/));                  // Wait for end of dummy byte TX
  x = UCB0RXBUF;///U1RXBUF;                              // Read data
  TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN;         // /CS disable

  return x;
}

void TI_CC_SPIReadBurstReg(char addr, char *buffer, char count)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆产精品久久久久久| 国产一区二区三区高清播放| 亚洲一卡二卡三卡四卡五卡| 国内精品伊人久久久久av一坑 | 欧美探花视频资源| 久久青草欧美一区二区三区| 亚洲成人激情社区| a4yy欧美一区二区三区| 欧美zozozo| 香蕉成人啪国产精品视频综合网| 精品一区中文字幕| 国产成人精品一区二区三区网站观看| 日韩一区二区三区电影| 亚洲女人的天堂| 风流少妇一区二区| 综合久久久久综合| 国产成人av在线影院| 日韩久久久精品| 亚洲国产日韩在线一区模特| www..com久久爱| 中文字幕第一区第二区| 极品尤物av久久免费看| 欧美另类变人与禽xxxxx| 亚洲一区免费在线观看| 色综合色狠狠天天综合色| 亚洲国产精品ⅴa在线观看| 国产在线麻豆精品观看| 日韩欧美亚洲另类制服综合在线| 亚洲.国产.中文慕字在线| 91国产成人在线| 亚洲三级视频在线观看| 97久久精品人人澡人人爽| 国产精品毛片a∨一区二区三区| 国产一区在线不卡| 精品国产伦理网| 免费人成网站在线观看欧美高清| 91麻豆精品国产91| 日韩不卡一区二区三区| 欧美一区二区视频在线观看2020 | 亚洲成av人片在www色猫咪| 欧美欧美午夜aⅴ在线观看| 91老司机福利 在线| 亚洲日本在线看| 91麻豆精东视频| 一区二区三区不卡在线观看| 欧洲日韩一区二区三区| 亚洲国产精品综合小说图片区| 欧美中文字幕不卡| 青青草精品视频| 欧美videos中文字幕| 国内一区二区在线| 国产精品欧美一级免费| 在线免费不卡视频| 日韩不卡手机在线v区| 日韩美女视频一区二区在线观看| 国产精品白丝jk白祙喷水网站| 国产精品天干天干在线综合| 91福利视频网站| 麻豆精品视频在线观看视频| 国产亚洲精品超碰| 色婷婷久久久久swag精品| 日韩一区精品字幕| 国产日韩欧美精品电影三级在线| av电影在线观看一区| 日韩黄色片在线观看| 国产亚洲制服色| 91麻豆国产在线观看| 免费观看在线色综合| 国产精品视频九色porn| 欧美日韩国产123区| 国模大尺度一区二区三区| 亚洲三级在线免费观看| 日韩三级免费观看| 91丨porny丨国产| 日本免费新一区视频 | 在线成人免费观看| 国产精品一二三| 亚洲高清中文字幕| 国产亚洲制服色| 91精品国产福利在线观看| 高清国产一区二区三区| 日韩电影在线一区二区三区| 国产精品久线在线观看| 欧美va在线播放| 欧美视频第二页| 成人avav在线| 国产精品一区免费视频| 午夜视频在线观看一区二区| 国产精品网站在线观看| 日韩午夜激情电影| 欧美日韩一区久久| 不卡的av在线| 大陆成人av片| 韩国av一区二区三区四区| 午夜久久久久久久久久一区二区| 国产精品视频一二三区| 欧美大白屁股肥臀xxxxxx| 在线观看日韩一区| www.久久久久久久久| 国产精品影视网| 国产在线麻豆精品观看| 免费观看在线综合| 日韩国产欧美在线播放| 亚洲自拍都市欧美小说| 亚洲美女视频在线观看| 国产精品卡一卡二卡三| 亚洲国产精华液网站w| 久久看人人爽人人| 亚洲精品一区在线观看| 91精品国产手机| 欧美日韩极品在线观看一区| 欧美三级视频在线| 欧美无砖砖区免费| 欧美色精品在线视频| 欧美在线啊v一区| 色先锋资源久久综合| 色妞www精品视频| 91亚洲国产成人精品一区二三| 成人丝袜18视频在线观看| 成人性生交大片免费| 波多野结衣亚洲一区| 91网址在线看| 日本韩国一区二区三区视频| 欧美视频你懂的| 日韩一区二区中文字幕| 久久综合久久综合亚洲| 久久嫩草精品久久久久| 国产精品无遮挡| 亚洲欧美经典视频| 亚洲午夜久久久久久久久电影网| 亚洲高清久久久| 麻豆久久久久久久| 国产在线视频不卡二| av高清不卡在线| 欧美日韩精品三区| 精品久久久久av影院 | 国产成人免费视频精品含羞草妖精| 国产成人高清在线| 91小视频在线| 欧美精品高清视频| 久久精品夜色噜噜亚洲aⅴ| 中文字幕乱码亚洲精品一区| 一区二区三区在线观看欧美| 日韩av高清在线观看| 国产精品一区二区三区网站| 91网站视频在线观看| 欧美日高清视频| 久久久噜噜噜久久人人看| 一区二区三区中文字幕| 久久精品国产一区二区三区免费看| 国产不卡一区视频| 欧美中文字幕一区| 久久亚洲综合av| 亚洲三级电影网站| 久久精品99国产国产精| 一本一本大道香蕉久在线精品 | 国产日产欧美一区| 亚洲精品成a人| 久草热8精品视频在线观看| 91美女在线观看| 日韩精品一区二区三区视频在线观看 | 99久久精品国产一区二区三区| 色婷婷激情一区二区三区| 91麻豆精品国产91久久久久| 中文一区二区在线观看| 亚洲第一在线综合网站| 国产精品亚洲人在线观看| 激情五月播播久久久精品| 欧美日韩在线免费视频| 国产精品国产自产拍在线| 日韩—二三区免费观看av| 波多野结衣91| 精品国产凹凸成av人网站| 亚洲成人资源在线| www.亚洲色图| 久久九九99视频| 日韩激情av在线| 欧美日韩1234| 亚洲精品视频观看| 丁香一区二区三区| 久久亚洲精品小早川怜子| 日韩国产欧美一区二区三区| eeuss影院一区二区三区| 日韩亚洲欧美中文三级| 亚洲电影欧美电影有声小说| 色综合久久中文综合久久牛| 欧美国产精品专区| 激情图片小说一区| 欧美日韩高清在线播放| 亚洲主播在线播放| 色婷婷综合视频在线观看| 国产精品麻豆久久久| 91官网在线免费观看| 亚洲免费观看高清| av亚洲产国偷v产偷v自拍| 久久精品亚洲一区二区三区浴池| 久久久不卡网国产精品二区| 国产乱色国产精品免费视频| 亚洲成a人v欧美综合天堂| 中文字幕在线视频一区|