|
// ----------------------------------------------------------------------
// 無線模塊初始化
// ----------------------------------------------------------------------
void RF_init(void)
{
SpiWriteRegister(0x07, 0x80);//SW reset //向0X07地址 寫入0X80 軟件復位
while ( RF4432_IRQ == 1); //讀取中斷狀態 清除中斷 釋放 SI4432_NIRQ
ItStatus1 = SpiReadRegister(0x03); //讀取中斷狀態 清除中斷 釋放 SI4432_NIRQ //read the Interrupt Status1 register
ItStatus2 = SpiReadRegister(0x04); //read the Interrupt Status2 register
SpiWriteRegister(0x06, 0x80);
SpiWriteRegister(0x07, 0x01); //write 0x80 to the Operating & Function Control1 register
SpiWriteRegister(0x09, 0x64); //云寶
//SpiWriteRegister(0x09, 0x7f); //思為
SpiWriteRegister(0x0A, 0x05); //關閉低頻輸出
SpiWriteRegister(0x0B, 0xEA); //GPIO 0 當做普通輸出口
SpiWriteRegister(0x0C, 0xEA); //GPIO 1 當做普通輸出口
SpiWriteRegister(0x0D, 0xF4); //GPIO 2 輸出收到的數據
SpiWriteRegister(0x70, 0x24); //0x2c); // 下面的設置根據Silabs 的Excel
SpiWriteRegister(0x1D, 0x40); // 使能 afc
///*/ 1.2K bps setting
SpiWriteRegister(0x1C, 0x16);
SpiWriteRegister(0x20, 0x83);
SpiWriteRegister(0x21, 0xc0); //
SpiWriteRegister(0x22, 0x13); //
SpiWriteRegister(0x23, 0xa9); //
SpiWriteRegister(0x24, 0x00); //
SpiWriteRegister(0x25, 0x04); //
SpiWriteRegister(0x2A, 0x14);// 1.2K bps 發射速率
SpiWriteRegister(0x6E, 0x09);
SpiWriteRegister(0x6F, 0xd5);
//SI4432_WriteReg(0x70, 0x2c);//
SpiWriteRegister(0x6D, 0x07); //07 設置為最大功率發射
SpiWriteRegister(0x0D, 0xFC); //GPIO 2 信道空閑指示(常態為低,忙為高)
SpiWriteRegister(0x79, 0x00); // 不需要跳頻
SpiWriteRegister(0x7A, 0x00); // 不需要跳頻
SpiWriteRegister(0x71, 0x22); // 發射不需要 CLK,FiFo , FSK模式
SpiWriteRegister(0x72, 0x30); // 頻偏為 30KHz
SpiWriteRegister(0x73, 0x00); // 沒有頻率偏差
SpiWriteRegister(0x74, 0x00); // 沒有頻率偏差
//SpiWriteRegister(0x75, 0x53); // 頻率設置 433.5
//SpiWriteRegister(0x76, 0x57); //
//SpiWriteRegister(0x77, 0x80);
SpiWriteRegister(0x75, 0x60); // 頻率設置 490
SpiWriteRegister(0x76, 0x7d); //
SpiWriteRegister(0x77, 0x00);
/*set the packet structure and the modulation type*/
//set the preamble length to 10bytes
SpiWriteRegister(0x34, 0x0C); //write 0x0A to the Preamble Length register
//set preamble detection threshold to 20bits
SpiWriteRegister(0x35, 0x2A); //write 0x2A to the Preamble Detection Control register
//Disable header bytes; set variable packet length (the length of the payload is defined by the
//received packet length field of the packet); set the synch word to two bytes long
SpiWriteRegister(0x33, 0x02); //write 0x02 to the Header Control2 register
//Set the sync word pattern to 0x2DD4
SpiWriteRegister(0x36, 0x2D); //write 0x2D to the Sync Word 3 register
SpiWriteRegister(0x37, 0xD4); //write 0xD4 to the Sync Word 2 register
//enable the TX & RX packet handler and CRC-16 (IBM) check
SpiWriteRegister(0x30, 0x8D); //write 0x8D to the Data Access Control register
//Disable the receive header filters
SpiWriteRegister(0x32, 0x00);
/*enable receiver chain*/
SpiWriteRegister(0x07, 0x05); //打開接收 //write 0x05 to the Operating Function Control 1 register
//Enable two interrupts:
// a) one which shows that a valid packet received: 'ipkval'
// b) second shows if the packet received with incorrect CRC: 'icrcerror'
SpiWriteRegister(0x05, 0x03); //打開 接收中斷 //write 0x03 to the Interrupt Enable 1 register
SpiWriteRegister(0x06, 0x00); //write 0x00 to the Interrupt Enable 2 register
//read interrupt status registers to release all pending interrupts
ItStatus1 = SpiReadRegister(0x03); //read the Interrupt Status1 register
ItStatus2 = SpiReadRegister(0x04);
}
|
|