?? rf.c.bak
字號:
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: none
output: none
Describe: 設置RF的工作頻率
Notice:
creat date: 2008-7-20
creator: dengyihong
***************************************************/
void A7105_setup_channel(U8 channel)
{
A7105_write_register(RF_REG_PLL1,channel);
}
/***************************************************
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);
}
/***************************************************
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);
}
/***************************************************
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;
RF_SCS_LOW();
write_register(0x08,RF_REG_FIFO_DATA); // 先寫地址
for(i=0; i<RF_FIFO_LEN; 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(20); // 設置發射頻率
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(19); // 設置接收頻率
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 + -