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

📄 starnetdevice.c

📁 都是主从板程序
💻 C
字号:

/**************************************************************
*    Includes
**************************************************************/
#include <hidef.h> /* for EnableInterrupts macro */
#include "device_header.h" /* include peripheral declarations */
#include "pub_def.h"
#include "mcu_hw_config.h"
#include "MC13192_hw_config.h"
#include "simple_mac.h"
#include "bootloader user api.h"
#include "lighting_demo_device.h"
#include "freescale_radio_hardware.h"


#include "ascii_utilities.h"
/**************************************************************
*    Data definitions
**************************************************************/
byte gu8RTxMode; /* Current mode of the MC13192 XCVR */
byte LEDS; /* LED on/off information */
byte rxcount;


/**************************************************************
*    Main Program
**************************************************************/
void main(void)
{
  tTxPacket sTxPacket;
  tRxPacket sRxPacket;
  byte au8RxDataBuffer[26];
  byte au8TxDataBuffer[26];

  /* Initialize variables */
  UINT16 u16LEDOldTime = 0;
  UINT16 u16RTXOldTime = 0;
  UINT16 u16PBOldTime = 0;
  UINT16 u16OldTime = 0;
  UINT16 u16NewTime = 0;
  UINT16 u16LagTime1 = 0;
  UINT16 u16LagTime2 = 0;
  UINT16 u16Count = 0;
  UINT8 u8PBState = 0;
  UINT8 u8AppStatus = 0;
  UINT8 u8GetLed = 0;
  UINT8 u8Crap = 0;
  UINT8 u8XcvrMode = 0;
  UINT8 u8LEDStatus = 1;
  UINT8 u8DeviceNum = 0;
  UINT8 u8DeviceLed = 0;
  UINT8 u8LightLed = 0x00; /* initial */
  UINT8 u8Garbage = 0;
  UINT8 u8Channel = 1;
  UINT8 u8LastDsn = 0xFF;
  UINT8 u8Count1 = 0;
  UINT8 u8RfIcVersion=0;
  UINT8 flag=0;
  UINT8 i=0;
  UINT8 reced=0;
  UINT8 u8ED=0x00;
  
  sTxPacket.u8DataLength = 0;
  sTxPacket.pu8Data = &au8TxDataBuffer[0];
  sRxPacket.u8DataLength = 0;
  sRxPacket.pu8Data = &au8RxDataBuffer[0];
  sRxPacket.u8MaxDataLength = 30;
  sRxPacket.u8Status = 0;


  MCUInit();
  RadioInit();
  
  /* Begin init */
  rxcount = 0x00; /* Number of times device received the same request */

  LED1DIR = 1; /* LED directions */
  LED2DIR = 1;
  LED3DIR = 1;
  LED4DIR = 1;

  MLMESetMC13192ClockRate(MC13192_CLKO_FREQ); /* 8 MHz bus clock (see lighting_demo_device.h) */
  UseExternalClock();
  
  /******************************************************************
  To adjust output power call the MLME_MC13192_PA_output_adjust() with:
  
  MAX_POWER     (+3 to +5dBm)
  NOMINAL_POWER (0 dBm)
  MIN_POWER     ~(-16dBm)
  
  or somewhere custom ? (0-15, 11 (NOMINAL_POWER) being Default power)

    ******************************************************************/
    //MLMEMC13192PAOutputAdjust(MAX_POWER);    //Set MAX power setting
  //MLMEMC13192PAOutputAdjust(MIN_POWER);    //Set MIN power setting
  MLMEMC13192PAOutputAdjust(NOMINAL_POWER);    //Set Nominal power setting    
  /* Application init */
  SRTISC=SRTISC&~0x07; /* Disable wake up timer. */
  SPMSC2=SPMSC2&~0x03; /* Enable deep sleep mode stop3. */
  TPM1SC = 0x0F; /* Timer divide by 128. (16uS timebase for 8MHz bus clock). */
  PB0PU = 1; /* Pushbutton directions and pull-ups */
  PB0DIR = 0;
  PB1PU = 1;
  PB1DIR = 0;
  PB2PU = 1;
  PB2DIR = 0;
  PB3PU = 1;
  PB3DIR = 0;
  KBI1SC_KBIMOD = 0;
  KBI1SC_KBI1E =0; /* Pushbutton interrupts not used */
  PB0IE =0;
  PB1IE =0;
  PB2IE =0;
  PB3IE =0;
  /* Enable all interrupts and ready to go */
  MC13192_IRQ_IE_BIT = 1;
  EnableInterrupts;
  /* "Walk" LEDs to indicate this is a device. */
  LedDrive(0x01);
  MCUDelay (WALKON);
  LedDrive(0x02);
  MCUDelay (WALKON);
  LedDrive(0x04);
  MCUDelay (WALKON);
  LedDrive(0x08);
  MCUDelay (WALKON);
  /* LEDs off for a short */ 
  LedDrive(0x00);
  MCUDelay (LONGFLASHOFF);
  /* Allow SECURITY LED to glow for a short. Indicates Group. */
  LedDrive(SECURITY);
  MCUDelay(LONGFLASHON);
  /* Now all LEDs off. */
  LedDrive(0x00);
  
  u16LEDOldTime = MCUReadTmr1 ();
  u16RTXOldTime = u16LEDOldTime;
  LEDS = LEDPORT; /* Initialize LEDS to the actual port setting */
 
  for(;;) 
  { 
  if(flag==0) 
  {
    u8Channel=u8Channel+1;
    if (u8Channel==5)
    u8Channel=1;
    MLMESetChannelRequest(((u8Channel-1)<<2) + (u8Channel-1)); 
        au8TxDataBuffer[0] = 0xE1; 
        au8TxDataBuffer[1] = 0xCC;
        au8TxDataBuffer[2] = SECURITY; 
        au8TxDataBuffer[3] = 0x00; 
        au8TxDataBuffer[4] = u8Channel; 
        au8TxDataBuffer[5] = 0x01; 
        au8TxDataBuffer[6] = 0x00; 
        au8TxDataBuffer[7] = channelREQ;
        sTxPacket.u8DataLength = 8;
        u16NewTime = MCUReadTmr1 ();
        u16RTXOldTime = u16NewTime;
        while ((u16NewTime-u16RTXOldTime) < DWELLTIME) 
        {
            u16NewTime = MCUReadTmr1 ();
        } 
        MCPSDataRequest(&sTxPacket); 
        u16NewTime = MCUReadTmr1 ();
        u16RTXOldTime = u16NewTime;
        LedDrive(u8Channel); 
        while ((u16NewTime-u16RTXOldTime) < DWELLTIME2)
        {
            u16NewTime = MCUReadTmr1 ();
        }      
   
    MLMERXEnableRequest(&sRxPacket, RXTIMEOUT); 
    while (gu8RTxMode != IDLE_MODE) 
    {
    LOW_POWER_WHILE();  
    }
    if (sRxPacket.u8Status == SUCCESS)
    {
              
      if ((au8RxDataBuffer[0] == 0xE1) && (au8RxDataBuffer[1] == 0xCC) && (au8RxDataBuffer[2] == SECURITY) && (au8RxDataBuffer[4] == u8Channel)&&(au8RxDataBuffer[7] == channelCMD)) 
      {
        if (au8RxDataBuffer[5] == u8LastDsn) 
                    rxcount++; 
        else
        {           LedDrive(u8Channel);
                   //flag=1;
                    reced= au8RxDataBuffer[3];
                    u8ED=MLMEEnergyDetect();             
                    u8AppStatus=1;
                    u8LastDsn = au8RxDataBuffer[5]; 
        }
      }
     
     
    }

    
   if(u8AppStatus==1) 
   {
     for(i=0;i<sRxPacket.u8DataLength+1;i++) 
     {
      au8TxDataBuffer[i]=au8RxDataBuffer[i] ;
     }
     au8TxDataBuffer[1] = u8ED;
     au8TxDataBuffer[3] =reced;
     au8TxDataBuffer[7] =numREQ;
     sTxPacket.u8DataLength = 8;
        u16NewTime = MCUReadTmr1 ();
        u16RTXOldTime = u16NewTime;
      
        while ((u16NewTime-u16RTXOldTime) < DWELLTIME) 
        {
            u16NewTime = MCUReadTmr1 ();
        }
        MCPSDataRequest(&sTxPacket);
     u16NewTime = MCUReadTmr1 ();
     u16RTXOldTime = u16NewTime;
        while ((u16NewTime-u16RTXOldTime) < DWELLTIME2) 
        {
            u16NewTime = MCUReadTmr1 ();
        }
    // u8AppStatus=2;
     MLMERXEnableRequest(&sRxPacket, 0x); 
   }
   while (gu8RTxMode != IDLE_MODE) 
    {
    LOW_POWER_WHILE();  
    }
    if ((sRxPacket.u8Status == SUCCESS) && (au8RxDataBuffer[0] == 0xE1) && (au8RxDataBuffer[1] == u8ED) && (au8RxDataBuffer[2] == SECURITY) && (au8RxDataBuffer[3] == reced)&& (au8RxDataBuffer[7] == deliverCMD))
    {
                if ((au8RxDataBuffer[5] == u8LastDsn)) 
                {
                    rxcount++; 
                }
                else
                {   
                    u8DeviceNum=au8RxDataBuffer[4];
                    flag=1;
                    LedDrive(u8DeviceNum);
                    rxcount = 1;
                    u8AppStatus=2;
                    u8LastDsn = au8RxDataBuffer[5]; 
                }
     }
   
  if (u8AppStatus==2) 
  { 
  for(i=0;i<sRxPacket.u8DataLength+1;i++) 
     {
      au8TxDataBuffer[i]=au8RxDataBuffer[i] ;
     }
     au8TxDataBuffer[1] = u8ED;
     au8TxDataBuffer[3] = reced;
     au8TxDataBuffer[7] = ACKBACK;
     sTxPacket.u8DataLength = 8;
        u16NewTime = MCUReadTmr1 ();
        u16RTXOldTime = u16NewTime;
        
        while ((u16NewTime-u16RTXOldTime) < DWELLTIME)
        {
         u16NewTime = MCUReadTmr1 ();
        }
        MCPSDataRequest(&sTxPacket);
        u16NewTime = MCUReadTmr1 ();
        u16RTXOldTime = u16NewTime;
        while ((u16NewTime-u16RTXOldTime) < DWELLTIME2) 
        {
         u16NewTime = MCUReadTmr1 ();
        }
     u16RTXOldTime = u16NewTime;
     u8AppStatus=0;
    // MLMERXEnableRequest(&sRxPacket, 0x);
    
  }
   
 }  
   
   
 }  
   
}
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
  

/**************************************************************
*    Function:     LED driver
*    Parameters: state. 1-4 is light only that LED. 5 is turn all off, 6 is all on.
*    Return:        none
**************************************************************/
void LedDrive (UINT8 state)
{
  switch (state)
  { 
    case 0x00:
    LED1 = 1;
    LED2 = 1;
    LED3 = 1;
    LED4 = 1;
    break;
    case 0x01:
    LED1 = 0;
    LED2 = 1;
    LED3 = 1;
    LED4 = 1;
    break;
    case 0x02:
    LED1 = 1;
    LED2 = 0;
    LED3 = 1;
    LED4 = 1;
    break;
    case 0x03:
    LED1 = 0;
    LED2 = 0;
    LED3 = 1;
    LED4 = 1;
    break;
    case 0x04:
    LED1 = 1;
    LED2 = 1;
    LED3 = 0;
    LED4 = 1;
    break;
    case 0x05:
    LED1 = 0;
    LED2 = 1;
    LED3 = 0;
    LED4 = 1;
    break;
    case 0x06:
    LED1 = 1;
    LED2 = 0;
    LED3 = 0;
    LED4 = 1;
    break;
    case 0x07:
    LED1 = 0;
    LED2 = 0;
    LED3 = 0;
    LED4 = 1;
    break;
    case 0x08:
    LED1 = 1;
    LED2 = 1;
    LED3 = 1;
    LED4 = 0;
    break;
    case 0x09:
    LED1 = 0;
    LED2 = 1;
    LED3 = 1;
    LED4 = 0;
     break;
    case 0x0a:
    LED1 = 1;
    LED2 = 0;
    LED3 = 1;
    LED4 = 0;
    break;
    case 0x0b:
    LED1 = 0;
    LED2 = 0;
    LED3 = 1;
    LED4 = 0;
    break;
    case 0x0c:
    LED1 = 1;
    LED2 = 1;
    LED3 = 0;
    LED4 = 0;
    break;
    case 0x0d:
    LED1 = 0;
    LED2 = 1;
    LED3 = 0;
    LED4 = 0;
    break;
    case 0x0e:
    LED1 = 1;
    LED2 = 0;
    LED3 = 0;
    LED4 = 0;
    break;
    case 0x0f:
    LED1 = 0;
    LED2 = 0;
    LED3 = 0;
    LED4 = 0;
    break;
   
  }
  return;
}


/**************************************************************
*    Function:     LED state return
*    Returns LED state. 0xFF is on, 0x00 is off.
**************************************************************/


/**************************************************************
*    Function:     Received data handler
*    Parameters: tRxPacket
**************************************************************/
void MCPSDataIndication(tRxPacket *sRxPacket)
/* Just a direct return. Main loop will handle it. */
{
}

/**************************************************************
*    Function:     MC13192 reset handler (not yet implemented)
*    Parameters: none
**************************************************************/
void MLMEMC13192ResetIndication (void)
{
  LED1 = 0;
  LED2 = 0;
  LED3 = 0;
  LED4 = 0;
  for(;;);
}

/**************************************************************
*    Function:     Read MCU timer.
*    Parameters: none
*    Return:        16-bit timer value.
**************************************************************/
UINT16 MCUReadTmr1(void)
{
  UINT16  w; /* w[0] is MSB, w[1] is LSB */
  ((UINT8*)&w)[0] = TPM1CNTH; /* MSB */
  ((UINT8*)&w)[1] = TPM1CNTL; /* LSB */
  return w;
}

/**************************************************************
*    Function:     Delay.
*    Parameters: Delay u16Count
*    Return:        none.
**************************************************************/
void MCUDelay (UINT16 delay_t)
{
  UINT16 u16MCUOldTime;
  UINT16 u16MCUNewTime;
  u16MCUOldTime = MCUReadTmr1();
  u16MCUNewTime = u16MCUOldTime;
  while ((u16MCUNewTime-u16MCUOldTime) < delay_t)
  {
    u16MCUNewTime = MCUReadTmr1();
  }
}

⌨️ 快捷键说明

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