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

📄 main.c

📁 CHIPCON公司射频芯片CC1100驱动程序
💻 C
字号:
//******************************************************************************
// 常州联力用户卡的测试程序
//******************************************************************************
#include "msp430x12x.h"	
#include"MSP430.h"
#include"CC2500.h"
#include"MSP430.c"
//#include"CC2500LIB.C"
#include"CC2500.C"



#define  wake_no  0
#define  wake_ok  1


#define  IntFlag_pulseA      0x02
#define  IntFlag_pulseB      0x04
#define  IntFlag_rf          0x08
#define  IntFlag_power       0x10

//#define  consump_write_en    0x01

#define  main_delay          0x01
#define  valve_delay         0x02
#define  voice_delay         0x04
#define  rf_delay            0x01


#define  pulse_wakeup        0x01
#define  rf_wakeup           0x02
#define  power_wakeup        0x04

#define  no_deal             0x00;
#define  tx_en               0x01

#define max_uart_buffer_size 30


void InitAirInt();

void RF_DEAL();

void PULSE_DEAL(void);

void POWER_DEAL(void);

void timea_set(void);

void rx_delay(void);
void rx_delay_1(void);
void timea_set1(void);
void timea_off1(void);
void uart_send(void);

BYTE IntFlag[2] ;
//BYTE txBuffer_CC2500[] = {5, 1, 1,1,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};				                  
//BYTE rxBuffer_CC2500[0x5]={0};
unsigned char txBuffer_CC2500[8]={2,0,0,2,3,4,5,6};
unsigned char txBuffer_CC25001[30]={0x0a,0x18,0,1,2,3,0x18,2,1,0x39,0x16};
unsigned char rxBuffer_CC2500[30];

unsigned char uart_rx_buffer[30],uart_buffer_rx_idx,time_count,time_count_en;
unsigned char uart_tx_buffer[30],uart_buffer_tx_count,uart_rx_rf_tx_count;

unsigned char address[7],run_status,timer_status;
unsigned char packet_leng,tx_count;
unsigned int  count_normal,count_main,count_valve,count_voice;
unsigned int  count_main_max;
/*
//==============================================================================
//for software
void InitCC2500(void)
{
	POWER_UP_RESET_CC2500();
	halRfWriteRfSettings();
	halSpiWriteBurstReg(CC2500_PATABLE,paTable,sizeof(paTable));
}*/
//==============================================================================
void main(void)
{
  unsigned char	i,k,temp;
  InitMSP430F1232();
  //i=0;  
  Dly1mS(6);
   
  MCLK_HF();
   // i=1;
  InitCC2500();
  //P3OUT |= VOICE_A;
  //halSpiStrobe(CC2500_SCAL);
  Dly1mS(60);
  halSpiStrobe(CC2500_SIDLE);
  //halSpiStrobe(CC2500_SRX); 
  InitAirInt();
  
  address[0]=0x11;
  address[1]=0x22;
  address[2]=0x33;
  
//
//  halSpiWriteReg(CC2500_MCSM2, 0x01); // RX_TIME = 3
// (duty cycle = 1.563% when WOR_RES = 0)
//  halSpiWriteReg(CC2500_WOREVT1, 0xff); // EVENT0 = 800
//  halSpiWriteReg(CC2500_WOREVT0, 0xff);
//  halSpiWriteReg(CC2500_WORCTRL, 0xe8); // EVENT1 = 3
// RC_CAL = 1
// WOR_RES = 0
//--------------------------------------------------------------------------------
  Dly1mS(3); // Wait for RCOSC calibration
//halSpiWriteReg(CCxxx0_WORCTRL, 0x30); // EVENT1 = 3
// RC_CAL = 0
// WOR_RES = 0
//calib1 = halSpiReadStatus(CCxxx0_RCCTRL1_STATUS);
//calib0 = halSpiReadStatus(CCxxx0_RCCTRL0_STATUS);
//halSpiWriteReg(CCxxx0_RCCTRL1, calib1);
//halSpiWriteReg(CCxxx0_RCCTRL0, calib0);
   
   
   
  // halSpiStrobe(CC2500_SWORRST);
  // halSpiStrobe(CC2500_SWOR);
  time_count_en=0;
  run_status=no_deal;
  uart_buffer_rx_idx=0;
  IntFlag[0]=0;
  
  P3OUT |= TX_UART;
  //P3OUT &= ~VOICE_A;
//--------------------------------------------------------------------------------
   _EINT();
  
   //============================================================================
   
   timea_set();
   
   
  while(1)  //for RX 
  {
    if(run_status==tx_en){
#if    1
        for(k=0;k<uart_rx_rf_tx_count;k++){
          txBuffer_CC25001[k+1]=uart_rx_buffer[k];  
          }
        txBuffer_CC25001[0]=uart_rx_rf_tx_count;
        txBuffer_CC2500[1]=txBuffer_CC25001[2];
        txBuffer_CC2500[2]=txBuffer_CC25001[3];
        run_status=no_deal;
#endif 
    //    for(temp=0;temp<2;temp++){
        Dly1mS(100); 
        halSpiWriteReg(CC2500_SYNC1,0xd3);/////
	halSpiWriteReg(CC2500_SYNC0,0x91);/////
        count_main=0;
        count_main_max=76;
        while(count_main<count_main_max){
        //Dly1mS(1);
        
        //halRfSendPacket(txBuffer_CC2500,(txBuffer_CC2500[0]+1));
        
        halRfSendPacket(txBuffer_CC2500,3);
         //Dly1mS(2);   
        halSpiStrobe(CC2500_SFTX);
        }
           
        Dly1mS(2);
        halSpiWriteReg(CC2500_SYNC1, 0x91);/////
	halSpiWriteReg(CC2500_SYNC0, 0xd3);/////
        count_main=0;
        count_main_max=10;
        while(count_main<count_main_max){
          
        halRfSendPacket(txBuffer_CC25001,txBuffer_CC25001[0]+1);
        halSpiStrobe(CC2500_SFTX);
        
        }
        Dly1mS(2);
        halSpiStrobe(CC2500_SIDLE);
        halSpiStrobe(CC2500_SRX);
        count_main=0;
        count_main_max=40;
        if(temp==2){
          _NOP();
          
        }
        while(count_main<count_main_max){
          
          
          if(IntFlag[0]&IntFlag_rf){
           
           temp=3;
           IntFlag[0]&=~IntFlag_rf ;
           i=30;
           halRfReceivePacket(rxBuffer_CC2500,  &i);
           //P3OUT |= VOICE_A;
          temp=4;
          for(k=0;k<packet_leng;k++){
            
           uart_tx_buffer[k]=rxBuffer_CC2500[k];
          }
          uart_buffer_tx_count=packet_leng;
          uart_send();
          count_main=count_main_max;
          
          }
        }
        //}
      //}
        //P3OUT &= ~VOICE_A;
        //WDTCTL=0;
        //run_status=tx_en;
         halSpiStrobe(CC2500_SIDLE);
        // halSpiStrobe(CC2500_SRX);
  }    
  //run_status=tx_en;

       
        
  }
  
}
  
  //============================================================================



void InitAirInt()
{
  P1IFG = 0;
  P1IES |= BIT3+BIT1;       // Int on falling edge (end of pkt)
  P1IFG &= ~BIT3;      // Clear flag
  P1IFG &= ~BIT1;      // Clear flag
  P1IE |= BIT3+BIT1;
  
//  P2IE |= BIT0;        // Enable int on end of packet
  //_BIC_SR(LPM3_bits);
}





#if   0
void RF_DEAL (void) {
  
  
   BYTE length;
   IntFlag[0]  &= ~IntFlag_rf;
   halSpiStrobe(CC2500_SIDLE);
   length =sizeof(rxBuffer_CC2500);
   if (halRfReceivePacket(&rxBuffer_CC2500[0],&length)) { 
     
        //halSpiStrobe(CC2500_SIDLE);            
        // P1OUT^=LED_RUN;
        if(wakeup_status==wake_no){
             
            
              if((rxBuffer_CC2500[0]==address[0])&&(rxBuffer_CC2500[1]==address[1])&&
               
                 (rxBuffer_CC2500[2]==address[2])){
                   
                  wakeup_status=wake_ok;
                  Dly1mS(100);     
                  halSpiStrobe(CC2500_SRX); 
                 }else{
                 
                 count_main=count_main_max;
                 }
        }else{
          
        Dly1mS(100);
        halRfSendPacket(txBuffer_CC2500,(txBuffer_CC2500[0]+1));
        Dly1mS(100);     
        halSpiStrobe(CC2500_SRX); 
        }
  
  
  
  
   }


}
#endif





void timea_set(void)

{
  TAR=0x0000;
  CCTL0 = CCIE;                             // CCR0 interrupt enabled
  CCR0 = 20000;
  
  TACTL = TASSEL_2 + MC_1+ID_3;             // SMCLK, upmode
  
}


void timea_off(void)

{
  CCTL0 = 0x0000; 
  TACTL = TASSEL_2 + MC_1;
  TACTL &=~0xff3f;
  TAR=0x0000;
}
    
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
  
 count_normal++;
 count_main++;
 tx_count++;
 if(time_count_en==1){
   
   
   if(time_count++>3){
   
          time_count=0;
	  time_count_en=0;
          run_status=tx_en;
	  uart_rx_rf_tx_count=uart_buffer_rx_idx;
	  uart_buffer_rx_idx=0;
   }
   
   
 }
  
  
}      


#pragma vector=PORT1_VECTOR
__interrupt void port1_ISR (void)
{
   BYTE rx_buf,i;
  if(P1IFG&BIT3){
  IntFlag[0] |= IntFlag_rf;
  P1IFG &= ~BIT3;
  }
  if(P1IFG&BIT1){
     rx_delay();
     rx_delay_1();
    for(i=0;i<8;i++){
  
       rx_buf=rx_buf>>1;
       rx_buf&=0x7f;
       if(P1IN&RX_UART){
      
          rx_buf|=0x80;
       }
       rx_delay();
    } 
    uart_rx_buffer[uart_buffer_rx_idx]=rx_buf;
    if(uart_buffer_rx_idx++==0){
      
      time_count_en=1;

    }
	  
    if(uart_buffer_rx_idx>=max_uart_buffer_size ){
   
      uart_buffer_rx_idx=0;
    }
	  
    time_count=0;
   
   P1IFG&=~BIT1;
   }

}

void rx_delay(void){
BYTE i;  
for(i=0;i<8;i++){
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();

_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();

_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();

_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
     
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
}
}
void rx_delay_1(void){
  
  
 _NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();

_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();

_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP(); 
  
 


_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
     
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();


}






void uart_send(void){
  
  BYTE  i,j,tx_buf;
  _DINT();
  for(j=0;j<uart_buffer_tx_count;j++){
      tx_buf=uart_tx_buffer[j];
     P3OUT &= ~TX_UART;
     rx_delay();
     rx_delay_1();
    for(i=0;i<8;i++){
      if(tx_buf&0x01){
        P3OUT |= TX_UART;
      }
      else{
        P3OUT &= ~TX_UART;
      }
       tx_buf=tx_buf>>1;
       rx_delay();
    } 
    P3OUT |= TX_UART;
    //for(i=0;i<10;i++){
    rx_delay();
    rx_delay();
    rx_delay();
    //}
  
  }
  _EINT();
  
  
}

⌨️ 快捷键说明

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