⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 +̤

📁 使用CC1101无线模块进行多机通信
💻
📖 第 1 页 / 共 2 页
字号:
/*-----------------------------------------------------------------------------
名称:无线模块发送程序
功能:发送一串数据
描述:
      P1.5--------------------------CSn_PIN
      P1.4--------------------------GDO0_PIN
      P1.3--------------------------SPI_SOMI
      P1.2--------------------------SPI_CLK
      P1.1--------------------------SPI_SIMO

------------------------------------------------------------------------------*/


#include  <msp430x14x.h>
#include <stdlib.h>
#include "CC1101_h.h"

#define CSn_PIN       BIT5
#define GDO0_PIN      BIT4
#define SPI_SOMI      BIT3             //输出(和GDO1为同一个脚)
#define SPI_CLK      BIT2 
#define SPI_SIMO      BIT1

#define    CSn_1()     P1OUT |= CSn_PIN     //CS = 1
#define    CSn_0()     P1OUT &=~CSn_PIN     //CS = 0

#define    CLK_1()     P1OUT |= SPI_CLK     //CLK = 1
#define    CLK_0()     P1OUT &=~SPI_CLK     //CLK = 0

#define    SIMO_1()    P1OUT |=  SPI_SIMO     // SIMO = 1
#define    SIMO_0()    P1OUT &= ~SPI_SIMO     // SIMO = 0

#define    Val_SOMI    P1IN & SPI_SOMI


unsigned char RxFlag;


//------------------------------------------------------------------------------
//延时微妙
//------------------------------------------------------------------------------
void Delay_us(unsigned int cycles)
{
  while(cycles>15)                          // 15 cycles consumed by overhead
    cycles = cycles - 6;                    // 6 cycles consumed each iteration
}

//------------------------------------------------------------------------------
//延时毫秒
//------------------------------------------------------------------------------
void Delay_ms(unsigned char count)
{
    while(count--)
    Delay_us(1000);
}

//-----------------------------------------------------------------------------
//spi输出数据,并返回状态信息
//-----------------------------------------------------------------------------
unsigned char SPI_bitbang_out(unsigned char value)
{
     unsigned char i;
     unsigned char rTemp;
     for(i = 0; i < 8; i++)
     {  
         CLK_0();          // Set clock low 
         if(value & 0x80)    // If bit is high...
               SIMO_1();     // Set SIMO high...
         else
               SIMO_0();    // Set SIMO low...
         value = value << 1;       
         CLK_1();           // Set clock high
         rTemp <<= 1;
         if(Val_SOMI)  
             rTemp |= 0x01; 
         else
             rTemp &= 0xfe; 
     }
     CLK_0();             // Set clock low 
    return(rTemp);
}


//------------------------------------------------------------------------------
// 输入8位数据
//------------------------------------------------------------------------------
unsigned char SPI_bitbang_in(void)
{ 
     unsigned char i;
     unsigned char rTemp;
     for(i = 8; i > 0; i--)
     {   
         CLK_1();    // Set clock high
         rTemp <<= 1;
         if(Val_SOMI)   
             rTemp |= 0x01;
         else
              rTemp &= 0xfe;
         CLK_0();     // Set clock low    
     }
     return(rTemp);
}

//------------------------------------------------------------------------------
//spi写寄存器   地址+数据
//------------------------------------------------------------------------------

void SPIWriteReg(unsigned char addr, unsigned char value)
{
    CSn_0();            // CS enable
    while (Val_SOMI);    // Wait for CCxxxx ready
    SPI_bitbang_out(addr); // Send address
    SPI_bitbang_out(value);// Send data
    CSn_1();            // CS disable
}

//------------------------------------------------------------------------------
//spi写突发寄存器
//------------------------------------------------------------------------------

void SPIWriteBurstReg(unsigned char addr, unsigned char *buffer, unsigned char count)
{
     unsigned char i;
     CSn_0();            // CS enable
     while (Val_SOMI);    // Wait for CCxxxx ready 
     SPI_bitbang_out(addr | CCxxx0_WRITE_BURST);   // Send address
     for (i = 0; i < count; i++)
     {
         SPI_bitbang_out(buffer[i]);     // Send data
     }
     CSn_1();            // CS disable
}

//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------

unsigned char SPIRead(unsigned char addr, unsigned char falg_read)
{
      unsigned char rTemp;
      CSn_0();            // CS enable
      while (Val_SOMI);    // Wait for CCxxxx ready
      SPI_bitbang_out(addr | falg_read);      // Send address
      rTemp = SPI_bitbang_in();               // Read data
      CSn_1();            // CS disable
      return ( rTemp );
}


//------------------------------------------------------------------------------
//spi从相应地址寄存器当中读取数据
//------------------------------------------------------------------------------
void SPIReadBurstReg(unsigned char addr, unsigned char *buffer, unsigned char count)
{
    unsigned char i;
     CSn_0();            // CS enable
     while (Val_SOMI);    // Wait for CCxxxx ready
     SPI_bitbang_out(addr | CCxxx0_READ_BURST);    // Send address
     for (i = 0; i < count; i++)
     {
         buffer[i] = SPI_bitbang_in();     // Read data
     }
     CSn_1();            // CS disable
}


//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------

unsigned char SPIStrobe(unsigned char strobe)
{
     unsigned char RxTxstatus;
     CSn_0();            // CS enable
    
     while (Val_SOMI);    // Wait for CCxxxx ready
     RxTxstatus = SPI_bitbang_out(strobe);       // Send strobe
     
     CSn_1();            // CS disable
     return(RxTxstatus);
}


//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------

void PowerupResetCCxxxx(void)
{
    CLK_0();     // Set clock low 
    SIMO_0();    // Set SIMO low...
    
    CSn_1();             // CS disable
    Delay_us(30);
     CSn_0();            // CS enable       
    Delay_us(30);
    CSn_1();            // CS disable
    Delay_us(45);

    CSn_0();            // CS enable
    
    while (Val_SOMI);   // Wait for CCxxxx ready
    SPI_bitbang_out(CCxxx0_SRES);  //?′λCC1101
    while (Val_SOMI);   // Wait for CCxxxx ready
    
    CSn_1();           // CS disable
}


//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------

void Initialize_CPU(void)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -