📄 rf.c
字号:
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 + -