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

📄 rf.c

📁 单片机与a7105组成无线收发程序2.4G多通道
💻 C
📖 第 1 页 / 共 2 页
字号:
input:		none
output:		none
Describe:	RF进入等待模式 
Notice:	
creat date:	2008-7-20
creator:	dengyihong	
***************************************************/
void A7105_entry_stby(void)
{
    A7105_write_command(RF_CMD_STBY); 
    delay_2us(100);
}

/***************************************************
name:		A7105_setup_wpll
input:		none
output:		none
Describe:	  	
Notice:	
creat date: 2008-7-20
creator:	dengyihong	
***************************************************/
void A7105_setup_wpll(void)
{
    A7105_write_command(RF_CMD_PLL);
}

/***************************************************
name:		A7105_setup_channel
input:      channel RF工作通道
output:     none
Describe:   设置RF的工作频率
Notice:	
creat date: 2008-8-7
creator:    dengyihong	
***************************************************/
void A7105_setup_channel(U8 channel)
{
    A7105_write_register(RF_REG_PLL1,channel);
}


/***************************************************
name:		A7105_setup_data_rate
input:		data_rate_cnt 要写入A7105的速率参数
output:		none
Describe:	设置A7105的速率 
Notice:
creat date: 2008-8-8
creator:	dengyihong		
***************************************************/
void A7105_setup_data_rate(U8 data_rate_cnt)
{
	A7105_write_register(RF_REG_DATA_RATE,data_rate_cnt);
}


/***************************************************
name:		rf_entry_rx
input:		none
output:		none
Describe:	RF进入RX模式 
Notice:
creat date: 2008-7-20
creator:	dengyihong		
***************************************************/
void A7105_entry_rx(void)
{
    A7105_write_command(RF_CMD_RX); 
    RF_TX_PA_OFF();
}

/***************************************************
FileName:	rf_entry_tx
input:		none
output:		none
Describe:	RF进入发射模式 
Notice:		在进入发射状态时要改变载波频率
creat date: 2008-7-20
creator:	dengyihong		
***************************************************/
void A7105_entry_tx(void)
{
    A7105_write_command(RF_CMD_TX); 
	RF_TX_PA_ON();
}


/***************************************************
name:		A7105_reset_chip
input:		none
output:		none
Describe:	软件复位A7105	
Notice:
creat date:	2008-7-20
creator:	dengyihong		
***************************************************/
void A7105_reset_chip(void)
{       
    A7105_write_register(RF_REG_MODE,0x00);            // A7105芯片Reset 
}


/***************************************************
name:		A7105_reset_RX_fifo
input:		none
output:		none
Describe:	reset RX fifo
Notice:
creat date: 2008-7-20
creator:	dengyihong		
***************************************************/
void A7105_reset_RX_fifo(void)
{
    A7105_write_command(RF_CMD_RX_FIFO_RESET);	
}


/***************************************************
FileName:	A7105_reset_TX_fifo
input:		none
output:		none
Describe:	reset TX fifo
Notice:
creat date:	2008-7-20
creator:	dengyihong		
***************************************************/
void A7105_reset_TX_fifo(void)
{
    A7105_write_command(RF_CMD_TX_FIFO_RESET);		
}


/***************************************************
name:		write_register
input:		1.bits     写入寄存器的bit数
			2.value    写寄存器的值
output:		none
Describe:	写数据到RF内部的寄存器
Notice:
creat date:	2008-7-20
creator:	dengyihong	
***************************************************/
void write_register(U8 bits,U8 value)
{
    U8 i = 0;
	
    for(i=0; i<bits; i++)
    {
        if(value & 0x80)
        {
            RF_SDIO_HIGH();
        }        
        else
        {
            RF_SDIO_LOW();
        }
        RF_SCK_HIGH();
        value <<= 0x01;
        RF_SCK_LOW();
    }    
}
	
/***************************************************
name:		read_register
input:		none
output:		ret_byte 
Describe:	读取RF寄存器的值
Notice:		1.在调用该函数时一定要先将MCU与SDIO相连的pin设置为输入
			2.在调用该函数前一定要先写入需要读的寄存器地址
creat date:	2008-7-20
creator:	dengyihong		
***************************************************/
U8 read_register(void)
{
    U8 i = 0;
    U8 ret_byte = 0;
    
	RF_SDIO_INPUT();
    for(i=0; i<0x08; i++)
    {
        ret_byte <<= 0x01;
        if(GET_RF_SDIO())
        {
            ret_byte |= 0x01;	
        }
        RF_SCK_HIGH();               	
        RF_SCK_LOW();
    } 
    return ret_byte;
}
	
	

/***************************************************
name:		A7105_write_command
input:		command: 写入到RF的命令
output:		none
Describe:	写命令到RF
Notice:      
creat date:	2008-7-20
creator:	dengyihong		
***************************************************/
void A7105_write_command(U8 command)
{
    RF_SCS_LOW();
    write_register(0x04, command);
    RF_SCS_HIGH();
}

/***************************************************
name:		A7105_write_register
input:		1. address 写寄存器的地址
			2. value 写寄存器的值
output:		none
Describe:	写数据到RF寄存器	
Notice:
creat date:	2008-7-20
creator:	dengyihong		
***************************************************/
void A7105_write_register(U8 address,U8 value)
{
    RF_SCS_LOW();
    
    address &= 0x7f;				// write data register
    write_register(0x08,address);	// write address
    write_register(0x08,value);		// write data
    
    RF_SCS_HIGH();
}

/***************************************************
name:		A7105_read_register
input: 		address 写入要读寄存器的地址
output:		temp
Describe:	从RF寄存器读数据	
Notice:
creat date:	2008-7-20
creator:	dengyihong		
***************************************************/
U8 A7105_read_register(U8 address)
{
    U8 temp = 0;
    
    RF_SCS_LOW(); 
    
    address &= 0x7f;
    address |= 0x40;
    write_register(0x08,address);
//    RF_SDIO_INPUT();
    temp = read_register();
    
    RF_SCS_HIGH();
    
    return temp;
}




/***************************************************
name:		A7105_write_ID
input:		none
output:		none
Describe:	写入ID
Notice:
creat date:	2008-7-20
creator:	dengyihong		
***************************************************/

void A7105_write_ID(void)
{
    RF_SCS_LOW();
    
    write_register(0x08,RF_REG_ID_DATA);		// write address
    
    write_register(0x08,RF_ID_CODE0);			// 写ID code				
    write_register(0x08,RF_ID_CODE1);
    write_register(0x08,RF_ID_CODE2);
    write_register(0x08,RF_ID_CODE3);	
    
    RF_SCS_HIGH();
}


/***************************************************
name:		A7105_read_ID
input:		none
output:		none
Describe:	从RF中读ID	
Notice:
creat date:	2008-7-20
creator:	dengyihong		
***************************************************/

void A7105_read_ID(U8 *read_ptr)
{
    U8 id_buff[4] = {0};
	
    RF_SCS_LOW();
    
    write_register(0x08,(RF_REG_ID_DATA | 0x40));			// 先写入要读的寄存器地址

    RF_SDIO_INPUT();        
    *read_ptr++ = read_register(); 
    *read_ptr++ = read_register();
    *read_ptr++ = read_register();
    *read_ptr++ = read_register();       

    RF_SCS_HIGH(); 	
}



/***************************************************
name:		write_data_to_fifo
input:		send_cnt 写入的字节数
output:		none
Describe:	写数据到FIFO中	
Notice:
creat date:	2008-7-20
creator:	dengyihong		
***************************************************/
void write_data_to_fifo(U8 send_cnt)
{
    U8 i = 0;
	
	if(send_cnt > RF_FIFO_LEN)
	{
		send_cnt = RF_FIFO_LEN;
	}

    RF_SCS_LOW();  
    write_register(0x08,RF_REG_FIFO_DATA);				// 先写地址
    for(i=0; i<send_cnt; i++)						// 这里固定写RF_FIFO_LEN个字节
    {
		write_register(0x08,Rf_Send_Buf[i]);	    
    } 
    RF_SCS_HIGH();  
}

/***************************************************
name:		read_data_from_fifo
input:		none
output:		none
Describe:	从RF的FIFO中读取数据	
Notice:
creat date:	2008-7-20
creator:	dengyihong		
***************************************************/
void read_data_from_fifo(void)
{
    U8 i = 0;
    U8 rec_cnt = 0;
	 
    RF_SCS_LOW();
    write_register(0x08,RF_REG_FIFO_DATA|0x40);			// 先写地址和读命令
    
    for(i=0; i<RF_FIFO_LEN; i++)						// 这里是固定读RF_FIFO_LEN个字节
    {
		Rf_Rec_Buf[i] = read_register();
    }
    RF_SCS_HIGH();        
}



/***************************************************
name:		send_data_by_RF
input:		send_byte_cnt  发送字节数
output:		none
Describe:	通过RF发送数据	
Notice:
creat date:	2008-7-20
creator:	dengyihong		
***************************************************/
void send_data_by_RF(U8 send_byte_cnt)
{
    if(send_byte_cnt)
    {
//        EX1 = 0;							// disable int1 interrupt (如果是设置为中断接收,在发送时应该屏蔽该中断)
		
        A7105_entry_stby();					// RX -> STBY -> TX 			
		A7105_setup_channel(Rf_Rec_Channel+1);	// 设置发射频率
        delay_2us(50);    
        write_data_to_fifo(send_byte_cnt);		// 写数据到fifo          
        A7105_entry_tx();						// 进入发送状态发送数据
        delay_2us(150);							// 从通过软件命令让RF进入发送状态到开始发送,这中间有140us的延时
												// 因此这里要经过>=140us 的延时后再读GPIO1的状态																						
		RF_GPIO1_INPUT();
		while(GET_RF_GPIO1())					// GPIO1由高变低表示发送完成。GPIO1在这里的状态取决于0x0b寄存器的设置
        {

        }
        delay_2us(10);
        A7105_setup_channel(Rf_Rec_Channel);	// 设置接收频率  	
        delay_2us(100);
        A7105_entry_rx();						// 进入接收状态(发送完成后返回到接收状态)

		IE1 = 0;								// 这里要清除中断标志,以免影响接收
//		EX1 = 1;
    }
}


/***************************************************
name:		rec_rf_data
input:		none
output:		none
Describe:	接收RF数据	
Notice:
creat date:	2008-7-20
creator:	dengyihong		
***************************************************/
void rec_rf_data(void)
{
    U8 temp_buf = 0;
	
    temp_buf = A7105_read_register(0x00); 	
    read_data_from_fifo();                                     
	A7105_entry_rx();
	delay_2us(100);
}



⌨️ 快捷键说明

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