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

📄 main.c

📁 通过CC2500无线射频芯片接收无线数据
💻 C
字号:
#include "In430.h"
#include "include.h"
extern char paTable[];
extern char paTableLen;
char txBuffer[4];
int adc[2];//用来取出ADC转换结果
#define spiMode (1)
#define adcMode (0)
void init_SPI();
void init_ADC();
void init_sysCLK();
void init_timeA();
int get_ANGL_OUTX();
int get_ANGL_OUTY();

unsigned int i;
int data_x,data_y;//接受返回的ADIS的x,y通道采集的数据
int time_flag=0;
//char c,d,Tstart,Tend,TFIFO,pkt;

void main (void)
{
    
   WDTCTL = WDTPW + WDTHOLD; 
   init_sysCLK();//初始化系统时钟,选择XT2为时钟源,2MHz
   TI_CC_SPISetup(); 
   TI_CC_PowerupResetCCxxxx();
   writeRFSettings(); 
   TI_CC_SPIWriteBurstReg(TI_CCxxx0_PATABLE, paTable, paTableLen);
   
   TI_CC_GDO0_PxIES |= TI_CC_GDO0_PIN;       // Int on falling edge (end of pkt)
   TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN;      // Clear flag
   TI_CC_GDO0_PxIE |= TI_CC_GDO0_PIN;        // Enable int on end of packet
   
#if adcMode
    init_ADC();
#endif
    
#if spiMode
    init_SPI();
#endif
   _EINT();         //开中断
  
    txBuffer[0] = 3;    // Packet length
    txBuffer[1] = 0x02; // Packet address
    txBuffer[2] = 0x00;
    txBuffer[3] = 0x00;
    //TI_CC_SPIWriteBurstReg(TI_CCxxx0_TXFIFO, txBuffer, 4);//写入数据
    //Tstart=TI_CC_SPIReadStatus(TI_CCxxx0_TXBYTES)&0x7F;
    //TI_CC_SPIStrobe(TI_CCxxx0_STX);//开始发送
    //pkt=TI_CC_SPIReadStatus(TI_CCxxx0_PKTSTATUS);
    //Tend=TI_CC_SPIReadStatus(TI_CCxxx0_TXBYTES)&0x7F;
  while(1)
  {
      #if spiMode
        if(time_flag)
        {
          time_flag=0;
          data_x=get_ANGL_OUTX();
          txBuffer[3]=(char)((data_x&0xFF00)>>8);
          txBuffer[2]=(char)(data_x&0x00FF);
          RFSendPacket(txBuffer,4);//发送采集的第一个ADIS通道x数据
          data_y=get_ANGL_OUTY();
          txBuffer[3]=(char)((data_y&0xFF00)>>8);
          txBuffer[2]=(char)(data_y&0x00FF);
          RFSendPacket(txBuffer,4);//发送采集的第二个ADIS通道y数据
         
        }
        
      #endif
    
      #if adcMode
        if(time_flag)
        {
          ADC12CTL0 |= ADC12SC;//开始转换
          time_flag=0;
        }
      #endif
        _BIS_SR(LPM3_bits + GIE);  
  }

}
                         

void init_SPI()
{
  P5SEL=0x0E;
  P5DIR=0x0B;
  U1CTL = CHAR+SYNC+MM+SWRST;
  U1TCTL=CKPH+SSEL0+SSEL1+STC;
  U1BR0=0x002;
  U1BR1=0x000;
  U1MCTL=0x000;
  ME2=USPIE1;
  U0CTL &=~ SWRST;
}

void init_sysCLK()
{
  BCSCTL1 &= ~XT2OFF;
  do
  {
    IFG1 &= ~OFIFG;
    for(i=0xFF;i>0;i--);
  }while((IFG1&OFIFG)!=0);
  BCSCTL2=SELM1+SELS+DIVM_2+DIVS_1;//MCLK由XT2 4分频,SMCLK 2分频
}

void init_timeA()
{
  TACTL=TASSEL1+ID1+ID0+MC0+TACLR;//MCLK时钟8分频,增计数模式
  TACCTL0=CCIE;
  TACCR0=5000;
}

void init_ADC()
{
  P6SEL=0xC0;
  ADC12CTL0 &=~ ENC; 
  ADC12CTL0=REFON+REF2_5V+ADC12ON;
  ADC12CTL1=CSTARTADD_6+SHS_1+SHP+CONSEQ_1;
  ADC12MEM6=SREF_1+INCH_6;
  ADC12MEM7=SREF_1+INCH_7+EOS;
  ADC12IE=0x80;//使能中断ADC12IFG.7
  ADC12CTL0 |= ENC; 
}

int get_ANGL_OUTX()
{
  int angl_datax;
  int angl_dataxh,angl_dataxl;
  P5SEL &=~ BIT0;
  P5DIR |= BIT0;
  P5OUT &=~ BIT0;
  IFG2&=~URXIFG1;
  U1TXBUF=0x0E;//发送角度输出的地址
  while(!(IFG2&URXIFG1));
  IFG2&=~URXIFG1;
  U1TXBUF=0x0E; 
  while(!(IFG2&URXIFG1));
  IFG2&=~URXIFG1;
  U1TXBUF=0x0E; //伪写获得高8位角度数据
  while(!(IFG2&URXIFG1));
  IFG2&=~URXIFG1;
  angl_dataxh=U1RXBUF;
  U1TXBUF=0x0E; //伪写获得低8位角度数据
  while(!(IFG2&URXIFG1));
  IFG2&=~URXIFG1;
  angl_dataxl=U1RXBUF;
  P5OUT |= BIT0;
  angl_datax=((angl_dataxh<<8)&0xFF00)+angl_dataxl;
  return angl_datax;
}

int get_ANGL_OUTY()
{
  int angl_datay;
  int angl_datayh,angl_datayl;
  P3SEL &=~ BIT7;
  P3DIR |= BIT7;
  P3OUT &=~ BIT7;
  IFG2&=~URXIFG1;
  U1TXBUF=0x0E;//发送角度输出的地址
  while(!(IFG2&URXIFG1));
  IFG2&=~URXIFG1;
  U1TXBUF=0x0E; 
  while(!(IFG2&URXIFG1));
  IFG2&=~URXIFG1;
  U1TXBUF=0x0E; //伪写获得高8位角度数据
  while(!(IFG2&URXIFG1));
  IFG2&=~URXIFG1;
  angl_datayh=U1RXBUF;
  U1TXBUF=0x0E; //伪写获得低8位角度数据
  while(!(IFG2&URXIFG1));
  IFG2&=~URXIFG1;
  angl_datayl=U1RXBUF;
  P3OUT |= BIT7;
  angl_datay=((angl_datayh<<8)&0xFF00)+angl_datayl;
  return angl_datay;
}

#pragma vector=TIMERA0_VECTOR
__interrupt void TimerA(void)
{
  time_flag = 1;
  //清除定时器A的中断标志
}

#pragma vector=ADC_VECTOR
__interrupt void adc_ISR (void)
{
    adc[0]=ADC12MEM6;//清除AD转换中断标志
    adc[1]=ADC12MEM7;
    txBuffer[3]=(char)((adc[0]&0x0F00)>>8);
    txBuffer[2]=(char)(adc[0]&0xFF);
    RFSendPacket(txBuffer,4);//发送采集到的AD转换第6通道数据
    txBuffer[3]=(char)((adc[1]&0x0F00)>>8);
    txBuffer[2]=(char)(adc[1]&0xFF);
    RFSendPacket(txBuffer,4);//发送采集到的AD转换第7通道数据
}

#pragma vector=PORT2_VECTOR
__interrupt void port2_ISR (void)
{
  P2IFG &=~ TI_CC_GDO0_PIN;  
}

⌨️ 快捷键说明

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