? 無線模塊專業網站!安陽市新世紀電子研究所專業研發生產小體積低功耗 無線模塊 無線收發模塊 2.4G無線模塊 無線遙控器 無線接收器 無線控制器
                1. 全國服務熱線:0372-5968708
                  ?
                  產品目錄
                  市場部聯系電話:
                  0372-5968708
                  傳真:0372-5968993
                  郵箱:ay5968708@163.com
                  中國﹒河南省安陽市文峰大道與朝陽路口國貿大廈A座9F
                  歡迎咨詢市場部在線客服!
                  技術支持
                  您當前位置:首頁 > 技術支持
                  JF24D如何設置頻率及數據通道
                  發布:xsj  發布日期:2012-03-06 15:06:01  瀏覽:5072次

                  ** 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},     //狀態寄存器

                  {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()

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

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

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

                  **出口參數:讀出的字節

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

                  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()

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

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

                  **出口參數:無

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

                  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()

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

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

                  **出口參數:無

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

                  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_UP,PRIM_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_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|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);   //執行切換

                  }

                  }

                   

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

                  **函數名稱:Send_Packet()

                  **函數描述:發射數據包

                  **入口參數:寫發射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) //判斷發射FIFO是否滿

                    SPI_Write_Buf(type, pbuf, len);   // 寫發射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); //如果不為空,繼續讀

                  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;  //將寄存器值存放到數組中,先高字節

                     

                    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; //將寄存器值存放到數組中,先低字節

                     

                    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]=0,REG4[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]=1,REG4[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,發射通道地址

                   

                   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

                    }

                   

                  /************************發射連續波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號
                  一区二区精品久久_国产毛片国语版手机在线_囯产目拍亚洲精品一页_亚洲AⅤ特级毛片_任我爽精品视频在线播放_精品久久久久中文字幕一区奶水