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

📄 mt.c

📁 SmartRF04EB+CC2431EM的测试代码
💻 C
字号:
//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------

#include "includes.h"

//-----------------------------------------------------------------------------
// TYPES
//-----------------------------------------------------------------------------

typedef struct{
   uint8 index;
   char Str[BUF_SIZE];
}Buffer;

//-----------------------------------------------------------------------------
// LOCAL VARIABLES
//-----------------------------------------------------------------------------

Buffer Buf;
char   inStr;

//-----------------------------------------------------------------------------
// LOCAL FUNCTIONS
//-----------------------------------------------------------------------------

void PrintHelp(void);
void UART_Process(void);
void intTIMER(void);
uint16 ConvertChar(char *pData,byte len);

/******************************************************************************
 * @fn      main
 *
 * @brief   Modul test code
 *
 * @param   none
 *
 * @return  none
 *****************************************************************************/

void main(void)
{
    SET_MAIN_CLOCK_SOURCE(CRYSTAL);

    DISABLE_ALL_INTERRUPTS();

    INIT_LED1();
	intTIMER();
    initUART();
	
	INT_GLOBAL_ENABLE(true);

	memset(Buf.Str,' ',BUF_SIZE);
   	Buf.index = 0;

    PrintHelp();

	while(( inStr = getUART() )!= ESC )
    {
		switch ( inStr )
        {
      		case ENTER:
              	UART_Process();
         		break;
      		case BACK_SPACE:
         		if (Buf.index > 0)
                {
            		Buf.index--;
            		Buf.Str[Buf.index] = ' ';
         		}
         		break;

      		default:
         		if (Buf.index < BUF_SIZE)
                {
            		Buf.Str[Buf.index] = inStr;
            		Buf.index++;
        	 	}
         		break;
      	}
   	}
}//End main
/******************************************************************************
 * @fn      PrintHelp
 *
 * @brief   help for command
 *
 * @param   none
 *
 * @return  none
 *****************************************************************************/

void PrintHelp(void)
{
  	SoftVer();
    printf((char*)"- Commad Explain:                           \n");
    printf((char*)"- ??          // Help                       \n");
    printf((char*)"- ?v          // cc2430 version             \n");
    printf((char*)"- ?c          // cc2430 temperature         \n");
    printf((char*)"- re          // Restart MCU cc2430         \n");
    printf((char*)"- ch [param]  // Channel   (param:11~16)    \n");
    printf((char*)"- pw [param]  // Out Power (param:? help)   \n");
    printf((char*)"- tx [param]  // Send      (param:1~125)    \n");
    printf((char*)"- rx [param]  // Recive    (param:1~250)    \n");
	printf((char*)"- le [param]  // LED flash (param:1~3)      \n");
    printf((char*)"/------------------------------------------/\n");
}
/******************************************************************************
 * @fn      UART_Process
 *
 * @brief   UART_Process
 *
 * @param   none
 *
 * @return  none
 *****************************************************************************/

void UART_Process(void)
{
  	uint8  i;
    uint16 temp;
    uint32 frequency;
	/* 指令头检查 */
    if(Buf.index<2)
    {
		printf((char*)"Command len error!\n");
     	goto CLR;
    }
	else if((Buf.index>2)&&(Buf.Str[2]!=' '))
    {
        printf((char*)"Command error!\n");
		goto CLR;
    }
    /* ?? */ // 帮助
    if(!strncmp(Buf.Str,"??",2))
      PrintHelp();
    /* ?v */ // cc2430 版本
    else if((!strncmp(Buf.Str,"?v",2))
          ||(!strncmp(Buf.Str,"?V",2)))
    {
     	McuVer();
    }
	/* ?c */ // cc2430温度
    else if((!strncmp(Buf.Str,"?c",2))
          ||(!strncmp(Buf.Str,"?C",2)))
    {
     	temp = getTemperature();
     	printf((char *)"%d℃\n", temp);
    }
    /* re */ // 复位
	else if((!strncmp(Buf.Str,"re",2))
          ||(!strncmp(Buf.Str,"RE",2)))
		Reset();
    /* ch */ // 频道
	else if((!strncmp(Buf.Str,"ch",2))
          ||(!strncmp(Buf.Str,"CH",2)))
    {
    	frequency = ConvertChar(&Buf.Str[3],(Buf.index-3));
 		if(!frequency)
        {
            printf((char*)"Please input parameters!\n");
        	goto CLR;
        }
		else if((frequency<11)||(frequency>16))
		{
			printf((char*)"frequency error!\n");
			goto CLR;
		}
		frequency -= 11;
		frequency  = 5000*frequency;
		frequency += 2405000;
			
		if(RfConfig(frequency))
			printf((char*)"set channel OK!\n");
		else
		printf((char*)"set channel Failed!\n");
    }
    /* pw */ // 发射功率
	else if((!strncmp(Buf.Str,"pw",2))
          ||(!strncmp(Buf.Str,"PW",2)))
    {
		if(Buf.Str[3]=='?')
		{
			printf((char*)"Power[dBm] 0.6  0.5  0.3  0.2  -0.1 -0.4 -0.9 -1.5 -2.7 -4.0 -5.7 -7.9 -10.8...\n");
			printf((char*)"TXCTRLL :  255  223  191  159   127  95   63   31   27   23   19   15    11 ...\n");
			printf((char*)"Power[dBm] ... -15.4 -18.6 -25.2\n");
	 		printf((char*)"TXCTRLL :  ...   7     6     3  \n");
			goto CLR;
		}
		temp = ConvertChar(&Buf.Str[3],(Buf.index-3));
        if(!temp)
        {
            printf((char*)"Please input parameters!\n");
        	goto CLR;
        }
		RADIO_SET_TX_POWER(temp);
		printf((char*)"set OutPower OK!\n");
    }
	/* tx */ // 发送
	else if((!strncmp(Buf.Str,"tx",2))
          ||(!strncmp(Buf.Str,"TX",2)))
    {
		temp = ConvertChar(&Buf.Str[3],(Buf.index-3));
		if(!temp)
        {
            printf((char*)"Please input parameters!\n");
        	goto CLR;
        }
		if(temp>RF_BUF_SIZE)
		{
			printf((char*)"length error!\n");
			goto CLR;
		}
		for(i=0; i<temp; i++)
			RfBuf[i] = i;
		if(RfSendPacket(RfBuf,temp))
			printf((char*)"Radio Tx %d bytes Complete!\n", temp);
		else
			printf((char*)"Radio Tx Failed at %d!\n", temp);
    }
	/* rx */ // 接收
	else if((!strncmp(Buf.Str,"rx",2))
          ||(!strncmp(Buf.Str,"RX",2)))
    {
		RfRecvtimeOut = ConvertChar(&Buf.Str[3],(Buf.index-3));
      	if(!RfRecvtimeOut)
        {
            printf((char*)"Please input parameters!\n");
        	goto CLR;
        }
		if(RfReceivePacket(RfBuf,&Rssi,&Lqi,RfRecvtimeOut))
		{
			if( RfRecvLength < 2)
				RfRecvLength = 2;
			printf((char*)"Radio Rx %d bytes successful![Rssi %d LQI %d]\n", (RfRecvLength-2),(Rssi-45),Lqi);
		}
		else
			printf((char*)"Radio Rx Failed at %d bytes!\n", RfRecvLength);
    }
	/* le */ // LED 闪烁频率
	else if((!strncmp(Buf.Str,"le",2))
          ||(!strncmp(Buf.Str,"LE",2)))
    {
		temp = ConvertChar(&Buf.Str[3],(Buf.index-3));
      	if(!temp)
        {
            printf((char*)"Please input parameters!\n");
        	goto CLR;
        }
		else if((temp<1)||(temp>3))
		{
			printf((char*)"led falsh frequency error!\n");
			goto CLR;
		}
        TIMER1_INIT();
    	if(SetTimer1Period(temp*20000)) // us
    	{
        	TIMER1_ENABLE_OVERFLOW_INT(TRUE);
        	INT_ENABLE(INUM_T1, INT_ON);
        	TIMER1_RUN(true);
         	printf((char*)"set led fash OK!\n");
    	}
        else
          	printf((char*)"set led fash Failed!\n");

    }
    /* null */ // 指令不存在
    else
		printf((char*)"Command error!\n");

CLR:memset(Buf.Str, ' ', BUF_SIZE);
	Buf.index = 0;
}
/******************************************************************************
 * @fn      intTIMER
 *
 * @brief   intTIMER
 *
 * @param   none
 *
 * @return  none
 *****************************************************************************/
void intTIMER(void)
{
    TIMER1_INIT();
    if(SetTimer1Period(200000)) // us
    {
        TIMER1_ENABLE_OVERFLOW_INT(TRUE);
        INT_ENABLE(INUM_T1, INT_ON);
        TIMER1_RUN(true);
    }
}
/******************************************************************************
 * @fn      T1_IRQ
 *
 * @brief   T1_IRQ
 *
 * @param   none
 *
 * @return  none
 *****************************************************************************/
#pragma vector=T1_VECTOR
__interrupt void T1_IRQ(void)
{
    EA = false;

    if(T1CTL & 0x10)                // T1 overflow
    {
		LED1 = !LED1;
	}
	EA = true;
	T1CTL &= ~0x10;
}
/******************************************************************************
 * @fn      ConvertChar
 *
 * @brief    asiic to byte
 *
 * @param   none
 *
 * @return  uint16
 *****************************************************************************/

uint16 ConvertChar(char *pData,byte len)
{
	uint8  i;
    uint16 val=0;

   	for(i=0; i<len; i++)
   	{
		if ((*( pData+i) >= '0') && (*(pData+i) <= '9'))
      		val = val*10 + *( pData+i) - '0';
   	}
   return val;
}
/*------------------------------------------------------------------------------
                                        0ooo
						      ooo0     (   )
                              (   )     ) /
						       \ (     (_/
	    				        \_)        By:cuiqingwei [gary]
------------------------------------------------------------------------------*/

⌨️ 快捷键说明

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