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

📄 双工改进.c

📁 CC2430无线语音测试代码。两结点间通讯。IAR开发环境的工程文件。
💻 C
字号:
#include "hal.h"
#include "app_ex.h"
#include "cul.h"

//////////////////////////////////////////////////////////////////
//传输版

#define AUDIO_SEND     0
#define AUDIO_RECEIVE  1
#define ADDRESS_0 0x01
#define ADDRESS_1 0x02
#define RECEIVE_TIMEOUT               4
#define SENDLENGTH                    85


UINT8 audio_mode;
UINT8 myAddr;
UINT8 remoteAddr;
BOOL remoteAddressSet = FALSE;
BOOL myAddressSet = FALSE;

BYTE sendbuffer[SENDLENGTH];
BYTE* receiveBuffer;
BYTE* ReceiveBuffer;

UINT8 adc_value;
UINT8 adc_num;
UINT8 pulse_length;
UINT16 pulse_length_num;

void initAudio(void);
void sendAudio(void);
void receiveAudio(void);
void printRSSI(INT8 rssi);
UINT32 getFrequency(void);
UINT8 getAddress(UINT8 a);


////////////////////////////////////////////////////////////////
void initAudio(void)
{
   char *menuText[] = {(char *)" Client?", (char *)" Host?", (char *)" Set Freq?", (char *)" Set MyAddr?", (char *)" SetRemoteAddr"};
   BYTE result;
   UINT32 frequency = 2405000;

   initLcd();

   INIT_JOYSTICK();
   INIT_BUTTON();

   SET_MAIN_CLOCK_SOURCE(CRYSTAL);

   INIT_GLED();
   INIT_YLED();

   remoteAddressSet = FALSE;
   myAddressSet = FALSE;

   TXCTRLL=0xff;//cywu set txpwr to max

   while((result = lcdMenu(menuText, 5)) > 1)
   {
      if(result == 2)
      {
         frequency = getFrequency();
      }
      else if(result == 3)
      {
         lcdUpdate((char *)"Set myAddress",(char *)"");
         myAddr = getAddress(myAddr);
         myAddressSet = TRUE;
      }
      else if(result == 4)
      {
         lcdUpdate((char *)"Set remoteAddr",(char *)"");
         remoteAddr = getAddress(remoteAddr);
         remoteAddressSet = TRUE;
      }
      else{ // ABORT_MENU
         return;
      }

   }

   if(result == 1) // Host
   {
      audio_mode = AUDIO_RECEIVE;
      if(myAddressSet == FALSE)
      {
         myAddr = ADDRESS_1;
      }
      if(remoteAddressSet == FALSE)
      {
         remoteAddr = ADDRESS_0;
      }
      lcdUpdate((char *)"Host",(char *)"");
   }
   else // Client
   {
      audio_mode = AUDIO_RECEIVE;
      if(myAddressSet == FALSE)
      {
         myAddr = ADDRESS_0;
      }
      if(remoteAddressSet == FALSE)
      {
         remoteAddr = ADDRESS_1;
      }
      lcdUpdate((char *)"Client",(char *)"");
   }
   waitVisible(CLEARLY_VISIBLE);
   radioInit(frequency, myAddr);

}

////////////////////////////////////////////////////////////////
void main()
{

  adc_num = 0;
  pulse_length_num = 0;
  pulse_length = 0xff;
  for(int i=0;i<SENDLENGTH;i++)
  sendbuffer[i] = 0;

  while(getJoystickDirection() != CENTRED);
  initAudio();

  P0SEL=0x00;
  P1SEL=0x00;
  IO_DIR_PORT_PIN(0, 0, IO_IN);
  IO_ADC_PORT0_PIN(0, IO_ADC_EN);
  IO_DIR_PORT_PIN(1, 1, IO_OUT);


  TIMER1_INIT();
  halSetTimer1Period(128);

  TIMER34_INIT(4);
  halSetTimer34Period(4,128);
  TIMER34_PWM_CONFIG(4);

  ADC_ENABLE_CHANNEL(0);

  INT_GLOBAL_ENABLE(INT_ON);
  INT_ENABLE(INUM_T1, INT_ON);
  TIMER1_ENABLE_OVERFLOW_INT(TRUE);

   // Starting timer 1
  TIMER1_RUN(TRUE);
  TIMER4_RUN(TRUE);
  while(1)
  {
    if(audio_mode == AUDIO_SEND)
    {
      sendAudio();
      audio_mode = AUDIO_RECEIVE;
    }
    else//(audio_mode == AUDIO_RECEIVE)
    {
       receiveAudio();
    }
  }
}

///////////////////////////////////////////
   #pragma vector=T1_VECTOR
   __interrupt void T1_IRQ(void)
{
  if(T1CTL & 0x10)
  {
    ADC_ENABLE_CHANNEL(0);
    ADC_SINGLE_CONVERSION(ADC_REF_AVDD | ADC_8_BIT | ADC_AIN0);
    while(!ADC_SAMPLE_READY());
    ADC_DISABLE_CHANNEL(0);

    adc_value = ADCH;
    sendbuffer[adc_num] = adc_value*2;
    if(adc_num<SENDLENGTH-1)
      adc_num++;
    else
    {
      adc_num=0;
      audio_mode = AUDIO_SEND;
    }
    if(pulse_length_num<SENDLENGTH-1)
    {
      pulse_length = receiveBuffer[pulse_length_num];
      pulse_length_num++;
    }
    else
    {
      pulse_length_num=0;
      pulse_length = 0xff;
    }
    TIMER34_SET_PWM_PULSE_LENGTH(4,pulse_length);
  }
  T1CTL &= ~0x10;
}

//////////////////////////////////////////////
void sendAudio(void)
{
 radioSend(sendbuffer, sizeof(sendbuffer), remoteAddr, DO_NOT_ACK);
}
//////////////////////////////////////////////////
void receiveAudio(void)
{
   BYTE length;
   BYTE res;
   BYTE sender;

      res = radioReceive(&receiveBuffer, &length, RECEIVE_TIMEOUT,&sender);
      if(res == TRUE)
      {;
//         GLED = LED_ON;

//        printRSSI(receiveBuffer[0]);

//         for(int i=0;i<length&&i+store_num<STORESPACE;i++)
//           storedata[i+store_num] = receiveBuffer[i];
//         store_num=length-1;
      }
/*     else
      {
         lcdUpdate((char *)"Waiting",(char *)"");
         GLED = LED_OFF;
      }
      GLED = LED_OFF;*/
}
/////////////////////////////////////////////////////////////////////////////////////
UINT8 getAddress(UINT8 a)
{
   UINT8 address = a;
   char line[16];
   JOYSTICK_DIRECTION jsv;

   while(getJoystickDirection() != CENTRED);

   while((jsv = getJoystickDirection()) != RIGHT)
   {
      while(getJoystickDirection() != CENTRED);

      if(jsv == UP)
      {
         address++;
      }
      else if (jsv == DOWN)
      {
         address--;
      }

      sprintf(line,(char *)"Address: %d     ",address);
      lcdUpdateLine(LINE2, line);
   }
   return address;
}
////////////////////////////////////////////////////////////////////////////////////////
UINT32 getFrequency(void)
{
   UINT8 selection;
   char *menuText[] = {(char*)" 2405", (char*)" 2410", (char*)" 2415", (char*)" 2420", (char*)" 2425", (char*)" 2430", (char*)" 2435", (char*)" 2440", (char*)" 2445", (char*)" 2450", (char*)" 2455", (char*)" 2460", (char*)" 2465", (char*)" 2470", (char*)" 2475", (char*)" 2480", (char*)" 2485"};
   selection = lcdMenu(menuText, 17);
   if(selection != ABORT_MENU)
   {
      return (2405000 + 5000*selection);
   }
   else
   {
      return (2405000);
   }

}
///////////////////////////////////////////////////////////////////////
void printRSSI(INT8 rssi)
{
   char rssiString[16];
   sprintf(rssiString,  (char const *)"%d dBm", (rssi-45));

   lcdUpdateLine(LINE2, rssiString);
}

⌨️ 快捷键说明

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