?? rf.c
字號(hào):
input: none
output: none
Describe: RF進(jìn)入等待模式
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: 設(shè)置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的速率參數(shù)
output: none
Describe: 設(shè)置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進(jìn)入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進(jìn)入發(fā)射模式
Notice: 在進(jìn)入發(fā)射狀態(tài)時(shí)要改變載波頻率
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: 軟件復(fù)位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數(shù)
2.value 寫寄存器的值
output: none
Describe: 寫數(shù)據(jù)到RF內(nèi)部的寄存器
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.在調(diào)用該函數(shù)時(shí)一定要先將MCU與SDIO相連的pin設(shè)置為輸入
2.在調(diào)用該函數(shù)前一定要先寫入需要讀的寄存器地址
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: 寫數(shù)據(jù)到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寄存器讀數(shù)據(jù)
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 寫入的字節(jié)數(shù)
output: none
Describe: 寫數(shù)據(jù)到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個(gè)字節(jié)
{
write_register(0x08,Rf_Send_Buf[i]);
}
RF_SCS_HIGH();
}
/***************************************************
name: read_data_from_fifo
input: none
output: none
Describe: 從RF的FIFO中讀取數(shù)據(jù)
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個(gè)字節(jié)
{
Rf_Rec_Buf[i] = read_register();
}
RF_SCS_HIGH();
}
/***************************************************
name: send_data_by_RF
input: send_byte_cnt 發(fā)送字節(jié)數(shù)
output: none
Describe: 通過(guò)RF發(fā)送數(shù)據(jù)
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 (如果是設(shè)置為中斷接收,在發(fā)送時(shí)應(yīng)該屏蔽該中斷)
A7105_entry_stby(); // RX -> STBY -> TX
A7105_setup_channel(Rf_Rec_Channel+1); // 設(shè)置發(fā)射頻率
delay_2us(50);
write_data_to_fifo(send_byte_cnt); // 寫數(shù)據(jù)到fifo
A7105_entry_tx(); // 進(jìn)入發(fā)送狀態(tài)發(fā)送數(shù)據(jù)
delay_2us(150); // 從通過(guò)軟件命令讓RF進(jìn)入發(fā)送狀態(tài)到開始發(fā)送,這中間有140us的延時(shí)
// 因此這里要經(jīng)過(guò)>=140us 的延時(shí)后再讀GPIO1的狀態(tài)
RF_GPIO1_INPUT();
while(GET_RF_GPIO1()) // GPIO1由高變低表示發(fā)送完成。GPIO1在這里的狀態(tài)取決于0x0b寄存器的設(shè)置
{
}
delay_2us(10);
A7105_setup_channel(Rf_Rec_Channel); // 設(shè)置接收頻率
delay_2us(100);
A7105_entry_rx(); // 進(jìn)入接收狀態(tài)(發(fā)送完成后返回到接收狀態(tài))
IE1 = 0; // 這里要清除中斷標(biāo)志,以免影響接收
// EX1 = 1;
}
}
/***************************************************
name: rec_rf_data
input: none
output: none
Describe: 接收RF數(shù)據(jù)
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);
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -