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

📄 main._c

📁 ADI公司射频芯片7020+ATMEGA16射频模块源程序
💻 _C
字号:

#include  "dd.h"
#include  "crc16.h"



//extern void dd_initialise(void);
//extern void dd_idle(void);
//extern void receive_constant_frame(void);
void transmit_constant_frame(void);
void crc16_reset(void);
unsigned char uart_rx_rf_tx_count;
unsigned char temp_count[4];
unsigned int  temp_count1[4];
unsigned char led_state[2];
#define tx_never  1
#define tx_en     1
void main()
{
	dd_initialise();
    CLI();
	dd_read_ADF70XX_version();
	//dd_read_filter_cal();
//	dd_read_RSSI();
	dd_set_ADF7021_Power_off();
	
	dd_set_ADF7021_Power_on();
	//test_mode();
	//if (has_set_rx_mode_before == 1 & phy_state == PHY_IN_TX_MODE)	dd_set_TX_to_RX_mode();
    //else dd_set_RX_mode();
	dd_set_RX_mode();
	//dd_read_filter_cal();
    GICR|=0x20;            // Enable INT0 interrupt (Connecting ADF7021 INT/LOCK Pin)
	led_state[0]=0;
	led_state[1]=0;
	SEI();
	#if   tx_en
	rf_tx_state[0] = 1;
	uart_rx_rf_tx_count=9;
	#endif
	DDRB  &= ~(1<<SPI_MISO);
	PORTB |= 1<<SPI_MISO;
	while(1)
	{
		
		if(rf_tx_state[1]==1){
		    
			 if(rf_tx_state[2]==1){
			 
			      CLI();
				  dd_set_ADF7021_Power_off();
				  temp_count1[0]=0x8ff;
				  while(temp_count1[0]-->0)
	              {
	
	              }
			      dd_set_ADF7021_Power_on();
			      //if (has_set_rx_mode_before == 1 & phy_state == PHY_IN_TX_MODE)	dd_set_TX_to_RX_mode();
    		      //else dd_set_RX_mode();
				  dd_set_RX_mode();
    		      GICR|=0x20;             // Enable INT0 interrupt (Connecting ADF7021 INT/LOCK Pin)
			      SEI();
				  rf_tx_state[1]=0;
				  rf_tx_state[2]=0;
			 }
	    }
			                        
		if (rf_tx_state[0] == 1){
				
			dd_idle();	
			transmit_constant_frame();
			
			#if  tx_never
			
			rf_tx_state[1]=0;
			rf_tx_state[0] = 1;
			#else
			rf_tx_state[0] = 0;
			rf_tx_state[1] = 1;
			rf_tx_state[2] = 1;
			
			#endif
			//rf_tx_state[2]=0;
	    }

		
	}

//	for(;;)	{my_delay(10000);	P3 ^= 0x10;	}

}



/*****************************************************************************
Function:    		transmit_constant_frame
==============================================================================
Description:
	Transmit a frame including preamble & sync word, payload length, 
	payload and CRC
*****************************************************************************/
void transmit_constant_frame(void)
{
	// prepare tx frame header including preamble, sync word, payload length; the following is just an example
	
	
	//mac_tx_packet_header.seq_number = 0x0FF4;
	//mac_tx_packet_header.short_address = 0xAA;
	//mac_tx_packet_header.payload_length = uart_rx_rf_tx_count;
	unsigned int  delay_count;
	unsigned char j,i,byte;
	dd_set_ADF7021_Power_off();
	delay_count=0x8ff;
	PORTA |= 1<<RFMD_EN;
	DDRB  |= 1<<SPI_MISO;
	PORTB |= 1<<SPI_MISO;
	while(delay_count-->0)
	{
	
	}
	
    
	
	// prepare payload length
	//0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x12, 0x34, 0x56
	dd_port_data_tx_buffer[0]=0xAA;
	dd_port_data_tx_buffer[1]=0xAA;
	dd_port_data_tx_buffer[2]=0xAA;
	dd_port_data_tx_buffer[3]=0xAA;
	dd_port_data_tx_buffer[4]=0xAA;
	dd_port_data_tx_buffer[5]=0x12;
	dd_port_data_tx_buffer[6]=0x34;
	dd_port_data_tx_buffer[7]=0x56;
	#if tx_never
	dd_port_data_tx_buffer[8]=0x09;
	dd_port_data_tx_buffer[9]=0x55;
    dd_port_data_tx_buffer[10]=0x55;
	dd_port_data_tx_buffer[11]=0x55;
	dd_port_data_tx_buffer[12]=0x76;
	dd_port_data_tx_buffer[13]=0x54;
	dd_port_data_tx_buffer[14]=0x32;
	dd_port_data_tx_buffer[15]=0x07;
    dd_port_data_tx_buffer[16]=0x09;
	dd_port_data_tx_buffer[17]=0x09;
	#else
	dd_port_data_tx_buffer[8]=uart_rx_rf_tx_count;
	memcpy(&dd_port_data_tx_buffer[9], uart_rx_buffer, uart_rx_rf_tx_count);
	#endif
	//memcpy(&dd_port_data_tx_buffer[9], uart_rx_buffer, uart_rx_rf_tx_count);
    
	dd_set_ADF7021_Power_on();

	if (has_set_tx_mode_before == 1 & phy_state == PHY_IN_RX_MODE)	dd_set_RX_to_TX_mode();
	else dd_set_TX_mode();

    CLI(); 		

    dd_data_port_state = DATA_PORT_TRANSMITTING;
    dd_data_packet_phase = PACKET_PHASE_PREAMBLE;
	crc16_reset();
	
	SPCR  |= 0x80;          // Enable I2C/SPI interrupt	
  
	
        
	
	/* Enable SPI  */
	SPCR  |= 0x40;

	//p_mac_active_tx_frame = &mac_preamble_syncword[0];
	dd_port_data_tx_frame_idx = 1;
    //SBUF = p_mac_active_tx_frame[dd_port_data_tx_frame_idx]; 
	SPDR = dd_port_data_tx_buffer[dd_port_data_tx_frame_idx];
	dd_port_data_tx_frame_idx++;
	
	delay_count=0x8ff;
	while(delay_count-->0)
	{
	
	}
	dd_set_ADF7021_Power_off();
	
	PORTA &= ~(1<<RFMD_EN);
	DDRB  &= ~(1<<SPI_MISO);
	PORTB |= 1<<SPI_MISO;
	#if  tx_never
    my_delay_1(0xffff);
	uart_rx_rf_tx_count=9;
	#endif
	
    SEI();
}

/*****************************************************************************
Function:    		receive_constant_frame
==============================================================================
Description:
	Receive a frame including preamble & sync word, payload length, 
	payload and CRC
*****************************************************************************/
void receive_constant_frame(void)
{ 
	CLI();

	dd_set_ADF7021_Power_on();
	if (has_set_rx_mode_before == 1 & phy_state == PHY_IN_TX_MODE)	dd_set_TX_to_RX_mode();
    else dd_set_RX_mode();

    GICR|=0x20;            // Enable INT0 interrupt (Connecting ADF7021 INT/LOCK Pin)

	SEI();

}


void crc16_reset(void)
{
    crc_lo = crc_hi = 0;
}


unsigned int crc16(unsigned char byte)
{
    unsigned char combination;

    // First calculate the combination term 
    combination = crc_lo ^ byte;
 
    // Now update the CRC register 
    crc_lo = crc_hi ^ crc_lut_low[combination];
    crc_hi = crc_lut_high[combination];

    return (crc_hi << 8) | crc_lo;
}



/*****************************************************************************
 * $History: main.c $
 * 
 * *****************  Version 1,0  *****************
 * User:            Date: 3/22/07    
 * Function:
	- UART RPC(Uart Remote Control)
	- Power up in tx 	(optimised wake up sequence)
	- Power up in rx 	(optimised wake up sequence)
	- Transmit packet 	(preamble+SWD+header+length+constant payload+CRC)
	- Receive packet 	(preamble+SWD+header+length+constant payload+CRC)
	- Tx to Rx
	- Rx to Tx
	- Do RSSI measurement
	- Do AFC and IF filter cal adjust readback
	- Do ADC readback (Battery, temperature, external ADC) (note different ADC readback sequence dependant 
	  on in power on, tx or rx mode)
 ****************************************************************************/


/* EOF */



⌨️ 快捷键说明

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