? 欧美精品一区在线看,国产成人综合久久精品免费欧美91
全國服務熱線:0372-5968708
?
產品目錄
市場部聯(lián)系電話:
0372-5968708
傳真:0372-5968993
郵箱:ay5968708@163.com
中國﹒河南省安陽市文峰大道與朝陽路口國貿大廈A座9F
歡迎咨詢市場部在線客服!
技術支持
您當前位置:首頁 > 技術支持
JF24D如何設置頻率及數據通道
發(fā)布:xsj  發(fā)布日期:2012-03-06 15:06:01  瀏覽:5636次

** File name:           JF24D.c

** Last modified Date:  2010-11-6

** Last Version:        2.0

** Descriptions:        Every project should include a copy of this file.

**------------------------------------------------------------------------------------------------------

** Created by:          lizhiyuan

** Created date:        2010-11-6

** Version:            2.0

** Descriptions:        The original version

**------------------------------------------------------------------------------------------------------

** Modified by:

** Modified date:

** Version:

** Descriptions:JF24D新版本程序2.0

********************************************************************************************************/

#include"JF24D.h"

//寄存器組1  0-13號寄存器的初始值  

code UINT32 RegArrFSKAnalog[]={

0xE2014B40,

0x00004B40,

0x028CFCD0,

0x41390099,

0x0B869EC1,

0xA67F0224,

0x00400000,  

0x00000000,

0x00000000,

0x00000000,

0x00000000,

0x00000000,

0x001A7300,

0x36B48000,

};

 

//寄存器組1  14號寄存器的初始值  

code UINT8 RegArrFSKAnalogReg14[]=

{

0x41,0x20,0x08,0x04,0x81,0x20,0xCF,0xF7,0xFE,0xFF,0xFF

};

 

//寄存器組0初始值

code UINT8 RegArrFSK[][2]={

{0,0x0F}, //配置寄存器

{1,0x3F},

{2,0x3F}, //使能接收地址

{3,0x03}, //信道的數據長度

{4,0xff},

{5,0x17},    //頻道選擇寄存器 (更改17 可以改變2.4G 的頻率,改為181M 一共可以設置80個通道)

{6,0x17}, 

{7,0x07},     //狀態(tài)寄存器

{8,0x00}, //射頻設置寄存器

{9,0x00},

{12,0xc3},

{13,0xc4},

{14,0xc5},

{15,0xc6},

{17,0x20},

{18,0x20},

{19,0x20},

{20,0x20},

{21,0x20},

{22,0x20},

{23,0x00},

{28,0x3F},

{29,0x07}

};

 

code UINT8 RX0_Address[]={0x12,0x34,0x56,0x78,0x01}; //接收通道0的地址

說明:改變0X后面5組數字的任一組數可以更改每套模塊的IP地址,比如0x12 可以改為0x13,其他不變{0x13,0x34,0x56,0x78,0x01} 2只模塊地址一樣即可通訊 和其他不同的地址不能通訊,也互不干擾。改變地址可以數據通道。遙控可以,傳數據會誤碼。

code UINT8 RX1_Address[]={0xc2,0x56,0x34,0x12,0x02}; //接收通道1的地址

 

/************************************************************************************

**函數名稱:SPI_RW()

**函數描述:寫一個字節(jié)到JF24D,并返回讀出的字節(jié)

平時低電平,上升沿讀數據,下降沿寫數據

**入口參數:命令或地址

**出口參數:讀出的字節(jié)

************************************************************************************/       

UINT8 SPI_RW(UINT8 _byte)

{

UINT8 bit_ctr;

for(bit_ctr=0;bit_ctr<8;bit_ctr++)   

{

MOSI = (_byte & 0x80);         // 輸出,先輸出高位

_byte = (_byte << 1);// 下一位輸出值移位到高位

SCK = 1;// SCK置位

_byte |= MISO;        // MISO當前值    

SCK = 0;  // SCK清零 

}

return(_byte);  // 返回讀出的值

}

 

/**************************************************************

**函數名稱:SPI_Write_Reg()

**函數描述:寫寄存器的值

**入口參數:寄存器地址+命令,寄存器的值

**出口參數:無

**************************************************************/

void SPI_Write_Reg(UINT8 reg, UINT8 value)                 

{

CSN = 0;// 清零CSN,使能SPI

SPI_RW(reg);// 寫寄存器地址+命令

SPI_RW(value);// 寫相應的值

CSN = 1;                   // 置位CSN,禁止SPI

}

/**************************************************************

**函數名稱:SPI_Read_Reg()

**函數描述:讀寄存器的值

**入口參數:寄存器地址+命令

**出口參數:寄存器的值

**************************************************************/

UINT8 SPI_Read_Reg(UINT8 reg)

{

BYTE value;

CSN = 0;                // 清零CSN,使能SPI

SPI_RW(reg);            // 寫寄存器地址+命令

value = SPI_RW(0);      // 讀寄存器的值

CSN = 1;// 置位CSN,禁止SPI

 

return(value);         // 返回寄存器的值

}

/**************************************************************

**函數名稱:SPI_Read_Buf()

**函數描述:讀多字節(jié)寄存器的值

**入口參數:寄存器地址+命令,返回值的地址,寄存器值的長度

**出口參數:無

**************************************************************/  

void SPI_Read_Buf(UINT8 reg, UINT8 *pBuf, UINT8 bytes)     

{

UINT8 byte_ctr;&

CSN = 0;// 清零CSN,使能SPI

SPI_RW(reg);       // 寫寄存器地址+命令

for(byte_ctr=0;byte_ctr<bytes;byte_ctr++)

pBuf[byte_ctr] = SPI_RW(0);    // 讀寄存器的值

CSN = 1;// 置位CSN,禁止SPI

}

/**************************************************************

**函數名稱:SPI_Write_Buf()

**函數描述:寫多字節(jié)寄存器的值

**入口參數:寄存器地址+命令,寫入值的地址,寄存器值的長度

**出口參數:無

***************************************************************/     

void SPI_Write_Buf(UINT8 reg, UINT8 *pBuf, UINT8 bytes) reentrant    

{

UINT8 byte_ctr;

CSN = 0;// 清零CSN,使能SPI

SPI_RW(reg);    // 寫寄存器地址+命令

for(byte_ctr=0; byte_ctr<bytes; byte_ctr++) // 寫寄存器的值 

SPI_RW(*(pBuf+byte_ctr)); 

CSN = 1;// 置位CSN,禁止SPI      

}

 

/**************************************************************

**函數名稱:Enter_PRX()

**函數描述:切換到PRX模式

**入口參數:無

**出口參數:無

***************************************************************/

void Enter_PRX()

{

UINT8 value;

 

SPI_Write_Reg(FLUSH_RX,0);//清空接收FIFO

 

value=SPI_Read_Reg(STATUS);              // STATUS寄存器

SPI_Write_Reg(WRITE_REG+STATUS,value);    // 清零RX_DR、TX_DS、MAX_RT標志

 

value=SPI_Read_Reg(CONFIG);              // CONFIG寄存器

 

value=value&0xfd;//1清零

  SPI_Write_Reg(WRITE_REG + CONFIG, value); // 清零PWR_UP位,進入POWER_DOWN模式

 

value=value|0x03;//置位位1,位0

  SPI_Write_Reg(WRITE_REG + CONFIG, value); // 置位PWR_UPPRIM_RX,進入PRX模式

}

 

/**************************************************************

**函數名稱:Enter_PTX()

**函數描述:切換到PTX模式

**入口參數:無

**出口參數:無

***************************************************************/

void Enter_PTX()

{

UINT8 value;

 

SPI_Write_Reg(FLUSH_TX,0);//清空接收FIFO

 

value=SPI_Read_Reg(STATUS);           // STATUS寄存器

SPI_Write_Reg(WRITE_REG+STATUS,value); // 清零RX_DR、TX_DSMAX_RT標志

value=SPI_Read_Reg(CONFIG);           // CONFIG寄存器

value=value&0xfd;//1清零

SPI_Write_Reg(WRITE_REG+CONFIG, value);// 清零PWR_UP位,進入POWER_DOWN模式

 

value=value|0x02;//置位位1

value=value&0xfe;//0清零

SPI_Write_Reg(WRITE_REG + CONFIG, value); // 置位PWR_UP,清零PRIM_RX,進入PTX模式

}

 

/**************************************************************

**函數名稱:SwitchCFG()

**函數描述:切換寄存器組

**入口參數:將要切換到寄存器組,01

**出口參數:無

***************************************************************/

void SwitchCFG(char _cfg)

{

UINT8 Tmp;

 

Tmp=SPI_Read_Reg(STATUS);//STATUS寄存器

 

Tmp=Tmp&0x80;

 

if( ( Tmp&&(_cfg==0) )

||( (Tmp==0)&&_cfg ) ) //判斷當前寄存器組是否是將要切換的

{

SPI_Write_Reg(ACTIVATE_CMD,0x53);   //執(zhí)行切換

}

}

 

/**************************************************************

**函數名稱:Send_Packet()

**函數描述:發(fā)射數據包

**入口參數:寫發(fā)射FIFO命令,寫入值的地址,寄存器值的長度

**出口參數:無

***************************************************************/

void Send_Packet(UINT8 type,UINT8* pbuf,UINT8 len)

{

UINT8 fifo_sta;

 

fifo_sta=SPI_Read_Reg(FIFO_STATUS);  // 讀寄存器FIFO_STATUS

 

if((fifo_sta&FIFO_STATUS_TX_FULL)==0) //判斷發(fā)射FIFO是否滿

  SPI_Write_Buf(type, pbuf, len);   // 寫發(fā)射FIFO

}

 

/**************************************************************

**函數名稱:Receive_Packet()

**函數描述:接收數據包

**入口參數:讀接收FIFO命令,讀出值的地址

**出口參數:數據包的長度

***************************************************************/

UINT8 Receive_Packet(UINT8 rx_buf[MAX_PACKET_LEN])

{

UINT8 len,fifo_sta;

 

do

{

len=SPI_Read_Reg(R_RX_PL_WID_CMD);// 讀數據包長度

 

if(len<=MAX_PACKET_LEN)

{

SPI_Read_Buf(RD_RX_PLOAD,rx_buf,len);// 讀接收FIFO

}

else

{

SPI_Write_Reg(FLUSH_RX,0);//數據包長度大于最大長度,清空FIFO

}

 

fifo_sta=SPI_Read_Reg(FIFO_STATUS);//讀寄存器FIFO_STATUS

}while((fifo_sta&FIFO_STATUS_RX_EMPTY)==0); //如果不為空,繼續(xù)讀

return(len);//返回數據包長度

}

 

/**************************************************************

**函數名稱:JF24D_Init()

**函數描述:初始化JF24D

**入口參數:無

**出口參數:無

***************************************************************/  

void JF24D_Init()

{

INT8 i,j;

UINT8 WriteArr[4];

 

/************************初始化寄存器組1*********************************/

 SwitchCFG(1);   //切換到寄存器組1

 

 for(i=0;i<=8;i++) //寫前0-8號寄存器

 

  for(j=0;j<4;j++) 

{   

    WriteArr[j]=(RegArrFSKAnalog[i]>>(8*(j) ) )&0xff;  //將寄存器值存放到數組中,先高字節(jié)

   

  SPI_Write_Buf((WRITE_REG|i),&(WriteArr[0]),4); //寫寄存器

 

 

 for(i=9;i<=13;i++) //9-13號寄存器

 

  for(j=0;j<4;j++) 

    WriteArr[j]=(RegArrFSKAnalog[i]>>(8*(3-j) ) )&0xff; //將寄存器值存放到數組中,先低字節(jié)

   

  SPI_Write_Buf((WRITE_REG|i),&(WriteArr[0]),4); //寫寄存器

 }

 

SPI_Write_Buf((WRITE_REG|14),&(RegArrFSKAnalogReg14[0]),11); //14號寄存器

 

/***************REG4[0]=0,REG4[1]=0,REG4[3]=0REG4[23]=0 **************/

 for(j=0;j<4;j++) 

   WriteArr[j]=(RegArrFSKAnalog[4]>>(8*(j) ) )&0xff; 

  

 WriteArr[3]=WriteArr[3]&0xf4; 

 WriteArr[1]=WriteArr[1]&0x7F; 

 SPI_Write_Buf((WRITE_REG|4),&(WriteArr[0]),4); 

 

/***********REG4[25]=1,寫REG4[26]=1 *********************************/

 WriteArr[0]=WriteArr[0]|0x06; 

 SPI_Write_Buf((WRITE_REG|4),&(WriteArr[0]),4); 

 

/*************REG4[25]=0,寫REG4[26]=0*****************************/ 

WriteArr[0]=WriteArr[0]&0xf9; 

 SPI_Write_Buf((WRITE_REG|4),&(WriteArr[0]),4); 

 

/************REG4[0]=1,REG4[1]=1,REG4[3]=1REG4[23]=1***********/

 for(j=0;j<4;j++) 

   WriteArr[j]=(RegArrFSKAnalog[4]>>(8*(j) ) )&0xff; 

  

 SPI_Write_Buf((WRITE_REG|4),&(WriteArr[0]),4); 

 

/******************初始化寄存器組0**********************************/

 SwitchCFG(0); //切換到寄存器組0

 

 for(i=20;i>=0;i--) 

   SPI_Write_Reg((WRITE_REG|RegArrFSK[i][0]),RegArrFSK[i][1]);    //初始化前面定義的寄存器

  

 

 SPI_Write_Buf((WRITE_REG+RX_ADDR_P0),RX0_Address,5); //寫寄存器10,通道0地址   寄存器地址+命令,返回值的地址,寄存器值的長度

   

 SPI_Write_Buf((WRITE_REG+RX_ADDR_P1),RX1_Address,5); //寫寄存器11,通道1地址,及其余通道高位地址

  

 SPI_Write_Buf((WRITE_REG+TX_ADDR),RX0_Address,5); //寫寄存器16,發(fā)射通道地址

 

 i=SPI_Read_Reg(29); //讀寄存器29

 if(i==0) //是否需要激活

   SPI_Write_Reg(ACTIVATE_CMD,0x73);  //激活寄存器29

 for(i=22;i>=21;i--) 

   SPI_Write_Reg((WRITE_REG|RegArrFSK[i][0]),RegArrFSK[i][1]); //寫寄存器28、29

  }

 

/************************發(fā)射連續(xù)波CW*****************************/

#ifdef TX_CW

SwitchCFG(1); 

 WriteArr[0] = 0x41; 

 WriteArr[1] = 0x11; 

 WriteArr[2] = 0x04; 

 WriteArr[3] = 0x21; 

    SPI_Write_Buf((WRITE_REG|4),&(WriteArr[0]),4); 

 while(1); 

#endif

}

?
安陽市新世紀電子研究所有限公司 電話:0372-5968708  豫ICP備05021267號-1  豫公安網備 41050202000031號