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

📄 发送.c

📁 利用msp430控制cc1101进行两个模块之间的通信
💻 C
📖 第 1 页 / 共 2 页
字号:
#include  <msp430x14x.h>
#include <stdlib.h>
#include "CC1101_h.h"

#define CSn_PIN       BIT5
#define GDO0_PIN      BIT4
#define SPI_SOMI      BIT2             //P1.3  输入               输出        (和GDO1为同一个脚)
#define SPI_CLK      BIT1 
#define SPI_SIMO      BIT0

//**************************************************************
#define  LED_R          BIT7          //P2.7 输出
#define  LED_G          BIT6          //P2.7 输出
//*****************************************************************

#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


//********************************************************************
#define    LEDOFF_RED()     P2OUT |= LED_R     //LED_RED = 1  关闭
#define    LEDON_RED()      P2OUT &=~LED_R     //LED_RED = 0  打开

#define    LEDOFF_GREEN()     P2OUT |= LED_G     //LED_GEREEN = 1  关闭
#define    LEDON_GREEN()      P2OUT &=~LED_G     //LED_GREEN = 0   打开

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);
}
//-----------------------------------------------------------------------------
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);
}

//------------------------------------------------------------------------------------
// Input eight-bit value using selected bit-bang pins
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);
}

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
}

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 );
}

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)
{
     WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
      //************************************************************************************
      // Config bitbang pins
      P1DIR |= SPI_SIMO + SPI_CLK + CSn_PIN + BIT6;      //CS   CLK   SIMO(GDO1)为输出
      P1DIR &= ~( SPI_SOMI +GDO0_PIN);  //SOMI GDO0 GDO2 SW  为输入   
  
      P1OUT &= ~(SPI_SIMO  + SPI_CLK ) ;                         //CLK =0,SPI_SIMO= 0;                                                    
     //*************************************************************************
      P1OUT |= CSn_PIN;       //CSn_PIN =1    
                                     // SW,GHG 使用上拉电阻;
      //P1DIR |= BIT6;
}
char xx=0;
/*
void TxData(void)   //先采用查询发送
{
       P1OUT |= BIT6;
       P1IE &= ~GDO0_PIN;   //关闭GDO0中断           
      *********************************************************************************
       txBuffer[0] = xx++;  //数据长度目前固定为4
       txBuffer[1] = xx++;
       txBuffer[2] = xx++;
       txBuffer[3] = xx++;
       txBuffer[4] = xx++;
       txBuffer[5] = xx++;
       txBuffer[6] = xx++;
       txBuffer[7] = xx++;
       txBuffer[8] = xx++;
       txBuffer[9] = xx++;
       txBuffer[10] = xx++;
       txBuffer[11] = xx++;
       txBuffer[12] = xx++;
       txBuffer[13] = xx++;
       txBuffer[14] = xx++;
       txBuffer[15] = xx++;
       txBuffer[16] = xx++;
       txBuffer[17] = xx++;
       txBuffer[18] = xx++;
       txBuffer[19] = xx++;
       txBuffer[20] = xx++;
       txBuffer[21] = xx++;
       txBuffer[22] = xx++;
       txBuffer[23] = xx++;
       txBuffer[24] = xx++;
       txBuffer[25] = xx++;
       txBuffer[26] = xx++;
       txBuffer[27] = xx++;
       txBuffer[28] = xx++;
       txBuffer[29] = xx++;

⌨️ 快捷键说明

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