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

📄 main.c.svn-base

📁 si4432官方的程序
💻 SVN-BASE
字号:
/*** ============================================================================**** FILE**  main.c**** DESCRIPTION**  This is the main file of the project.	    **** CREATED**  Silicon Laboratories Hungary Ltd**** COPYRIGHT**  Copyright 2008 Silicon Laboratories, Inc.  **	http://www.silabs.com**** ============================================================================*/											/* ======================================================= *											 *						INCLUDE							   *							 				 * ======================================================= */#include "S8051.h"#include "uart.h"#include "Si4432.h"#include "EZLink_Modem_cmd.h"											/* ======================================================= *											 *						GLOBAL VARIABLE					   *							 				 * ======================================================= */extern idata uint8 BufChar;			//character counterextern idata uint8 o_ptr;			//circular buffer output pointerextern idata uint8 i_ptr;			//circular buffer input pointerxdata uint8 rf_ch;					//frequency channelxdata uint8 rf_pwr;					//RF output powerxdata uint8 rf_dr;					//dataratexdata uint8 opmode;					//command or data modexdata uint8 mode;					//normal or compatible modexdata uint8 swit_30ms;xdata uint8 rs232_timer;xdata uint8 rs232_timeout;extern xdata uint8 uart_ch_sent;								/* ============================================================ *								 *						Function PROTOTYPES						* 								 * ============================================================ */void Hw_Init(void);INTERRUPT_PROTO (UART0_ISR, INTERRUPT_UART0);	INTERRUPT_PROTO (TIMER2_ISR, INTERRUPT_TIMER2);								/* ============================================================ *								 *							MAIN PROGRAM						* 								 * ============================================================ */void main(void)															{	xdata uint8 packet[MAX_PAYLOAD+1], length;		//Transmit packet 	xdata uint8 TxPacketPtr;						//Transmit packet pointer			BufChar	= 0;			i_ptr = 0;					o_ptr = 0;	opmode = 0;				//default operation mode(command mode)	mode = 0;				//default normal mode										TxPacketPtr = 0;	rs232_timer = 0;	rs232_timeout = 30;		//timeout 1 s	Hw_Init();					//initialize the MCU periperals	if( PB_PIN == 0)		//if the button pushed after reset, the demo would run in compatible mode	{		TR_LED_PIN = 1;		mode = 1;		while( PB_PIN == 0); 			}	TR_LED_PIN = 0;			printAbout();			//print the FW information to UART*/		rf_pwr = 7;							//default output power	rf_ch = 0;							//default frequency channel	if (mode == 0)	{			rf_dr = 2;							//default datarate 9.6 kbps	}	else 	{		rf_dr = 0;							//default datarate 9.6 kbps	}	RfInitHw();				//initialize the radio*/	RFIdle();	RFReceive();			//receive enable	CMD_init();		while(1)														//main loop	{		// Synchronized routines:        //==========================================================        //---- 10ms soft interrupt area:        		 while(swit_30ms)         {           	--swit_30ms;        	if(rs232_timer && rs232_timer <= rs232_timeout) ++rs232_timer;         // increase the rx timer, if it is running         if (CMD_PIN == 1)			{					opmode = 1;												//data mode			}			else			{				opmode = 0;												//command mode			} 	         }      	// NOT synchronized routines:      	//==========================================================		//==========================================================						if (BufChar)												//if there is any char in the uart buffer		{			if (opmode == 0)										//command mode			{				CmdExec(ReadBuffer());			}			else													//data mode			{				if (TxPacketPtr < MAX_PAYLOAD)				{					packet[TxPacketPtr++]= ReadBuffer();				//save the received byte				}				if ((TxPacketPtr >= MAX_PAYLOAD)||(packet[TxPacketPtr-1] == MESSAGE_END))				{					TR_LED_PIN = 1;					RFIdle();					TxFIFOReset();					RFTransmit(&packet[0],TxPacketPtr);					TxPacketPtr = 0;					rs232_timer = 0;					TR_LED_PIN = 0;					RFIdle();					RxFIFOReset();					RFReceive();				//enable the receiver chain again				}			}			}					if(opmode == 1)		{			if(rs232_timer > rs232_timeout)			{				TR_LED_PIN = 1;				RFIdle();				TxFIFOReset();				RFTransmit(&packet[0],TxPacketPtr);				TxPacketPtr = 0;				rs232_timer = 0;				TR_LED_PIN = 0;				RFIdle();				RxFIFOReset();				RFReceive();				//enable the receiver chain again			}				}								/* ================================================== */							/* 				Linktest button pressed				  */							/* ================================================== */				switch( RFPacketReceived(&packet[0], &length) )		{				case RF_PACKET_RECEIVED:					//blink RX LED					RC_LED_PIN = 1;					//print packet content					packet[length] = 0;					printf("%s", &packet[0]);					//wait a bit for showing the LED a bit longer					delay_ms(50);					//release RX LED					RC_LED_PIN = 0;					//check whether ACK needs to be sent or not					if( memcmp(&packet[0], "Link ??", 7) == 0 )					{						//send ACK						TR_LED_PIN = 1;						//send a packet						length = 9;						strcpy(&packet[0],"Link OK\r\n");						RFIdle();						TxFIFOReset();						RFTransmit(&packet[0],length);						//wait a bit for showing the LED a bit longer						delay_ms(50);						//releaze the LED						TR_LED_PIN = 0;					}									RFIdle();					RxFIFOReset();					RFReceive();				break;				case RF_NO_PACKET:					if( PB_PIN == 0 )					{//push button is pressed -> send a packet						//wait for releaze the button						while(PB_PIN == 0);						//blink the LED						TR_LED_PIN = 1;						//send a packet						length = 9;						strcpy(&packet[0],"Link ??\r\n");						RFIdle();						TxFIFOReset();						RFTransmit(&packet[0],length);						//wait a bit for showing the LED a bit longer						delay_ms(50);						//releaze the LED						TR_LED_PIN = 0;						//start receiving						RFIdle();						RxFIFOReset();						RFReceive();					}				break;				case RF_CRC_ERROR:				default:					//restart RX					RFIdle();					RxFIFOReset();					RFReceive();				break;		}	}}								/* ================================================ */								/*						UART0 ISR					*/								/* ================================================ */INTERRUPT(UART0_ISR, INTERRUPT_UART0) {	if( RI0 == 1 )													//check RX interrupt	{						UartRxISR();												//call the UART RX interrupt handler		RI0 = 0;													//clear IT Flag	}		if( TI0 == 1)	{		uart_ch_sent = 1;		TI0 = 0;	}	}INTERRUPT(TIMER2_ISR, INTERRUPT_TIMER2){	++swit_30ms;  	TF2H = 0;}/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  +  + FUNCTION NAME:  void Init(void)  +  + DESCRIPTION:    This function configures the HW    +  +	INPUT:			None  +  + RETURN:         None  +  + NOTES:          None  +  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/void Hw_Init(void){	DisableGlobalIt();     /*Disable the Watchdog Timer*/	PCA0MD &= ~0x40;                       PCA0MD = 0x00;								// Disable interrupts 		/* Internal Oscillator SYSCLK  (24.5 MHz)*/	OSCICN    = 0x8F;   FLSCL     = 0x40;   CLKSEL    = 0x00;		/*Initialize I/O ports*/	P0MDIN    = 0xFF;					   P1MDIN    = 0xFF;  	P2MDIN	  = 0xFF;	P0MDOUT   = 0x12;	P1MDOUT   = 0x4D;						   P2MDOUT   = 0x01;	P0     	  |= 0xE0;                      //Set P0 inputs	P1		  |= 0x12;						//Set P1 inputs       		SFRPAGE  = 0x0F;	P0DRV	  	= 0x12;	   P1DRV    = 0x4D;   P2DRV    = 0x01;    	SFRPAGE  = 0x00;	XBR0     = 0x01;   XBR1     = 0x40;   XBR2     = 0x40;		//Initialize SPI	SetHwMasterSpi();	//Initialize Uart	UartInit();	//Initialize Timer2	Timer2Init();			TR_LED_PIN = 1;	delay_ms(5);	RC_LED_PIN = 1;	delay_ms(5);	TR_LED_PIN = 0;	delay_ms(5);	RC_LED_PIN = 0;		EnableGlobalIt();}

⌨️ 快捷键说明

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