搜索
bottom↓
回复: 3

SI4432,还是调不出来,请高人指点下(附程序)

[复制链接]

出0入0汤圆

发表于 2010-3-23 09:15:00 | 显示全部楼层 |阅读模式
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  +
  + FUNCTION NAME:  void SPI_M8PortInit(void)
  +
  + DESCRIPTION:    Initialize the M8 SPI port
  +
  +        INPUT:                        data
  +
  + RETURN:         None
  +
  + NOTES:          It  control the nSEL pin
  +
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void SPI_M8PortInit(void)
{
        SCK_OUT;
        SCK_0;
        SDI_OUT;
        SDI_1;
        SDO_IN;
        SDO_1;
        NSEL_OUT;
        NSEL_1;
        Set_NIRQin;
        NIRQ_1;
        SDN_OUT;
        SDN_0;
}


/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  +
  + FUNCTION NAME:  uint16 MAKEUINT(uint8 data1,uint8 data2)
  +
  + DESCRIPTION:    make  uint8 to uint16
  +
  +        INPUT:                data1 and data2         
  +
  + RETURN:        
  +
  + NOTES:         
  +
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

uint16 MAKEUINT(uint8 data1,uint8 data2)
{
  uint16 WORD;
  
        WORD=data1;
        WORD=WORD<<8;
        WORD=WORD|data2;
        
return WORD;

}

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  +
  + FUNCTION NAME:  uint16 RFRegCon(uint8 reg,uint8 cmd)
  +
  + DESCRIPTION:    sends 16 length data to read or write register through the SPI port
  +
  +        INPUT:                register and control data         
  +
  + RETURN:        value of the register
  +
  + NOTES:         
  +
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
uint16 RFRegCon(uint8 reg,uint8 cmd){
        SDO_IN;
        uint8 ri;
        uint16 temp=0,value;
        value=MAKEUINT(reg,cmd);
        SCK_0;
        NSEL_0;
        for(ri=0;ri<16;ri++){
        SCK_0;
        if(0x8000&value){
        SDI_1;
        }
        else{
        SDI_0;  
        }
        
        SCK_1;
        value<<=1;
        temp<<=1;
        if(Read_SDO){
        temp|=0x0001;
        }
  }
  SCK_0;
  SDO_OUT;
  NSEL_1;
  
  return temp;
}

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  +
  + FUNCTION NAME:  void  RfChipInit(void)
  +
  + DESCRIPTION:     
  +
  +        INPUT:       
  +
  + RETURN:         none
  +
  + NOTES:        
  +
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void  RfChipInit()
{

  RFRegCon((REG_WRITE | OperatingFunctionControl1), 0x80);
RFRegCon((REG_WRITE | TXRampControl), 0x7F);
RFRegCon((REG_WRITE | AFCLoopGearshiftOverride), 0x00);
RFRegCon((REG_WRITE | FrequencyBandSelect), 0x53);    //set frequency
RFRegCon((REG_WRITE | NominalCarrierFrequency1), 0x4b);  //433HZ
RFRegCon((REG_WRITE | NominalCarrierFrequency0), 0x00);
RFRegCon((REG_WRITE | ModulationModeControl1), 0x00);
RFRegCon((REG_WRITE | ModulationModeControl2), 0x22); //asynchronous mode  FSK

RFRegCon((REG_WRITE | HeaderControl2), 0x02); //no head; sync word 3 and 2
RFRegCon((REG_WRITE | HeaderControl1), 0x00);
RFRegCon((REG_WRITE | PreambleLength), 0x04);   //2byte
RFRegCon((REG_WRITE | PreambleDetectionControl), 0x10); //8bit
RFRegCon((REG_WRITE | SyncWord3), 0x2d);
RFRegCon((REG_WRITE | SyncWord2), 0xd4);
//RFRegCon((REG_WRITE | TransmitPacketLength), 0x40);
RFRegCon((REG_WRITE | DataAccessControl), 0x88); //enable TX handling

RFRegCon((REG_WRITE | IFFilterBandwidth), 0x03); //BW=90kHZ
RFRegCon((REG_WRITE | ClockRecoveryOversamplingRatio), 0xa1);
RFRegCon((REG_WRITE | ClockRecoveryOffset2), 0x20);
RFRegCon((REG_WRITE | ClockRecoveryOffset1), 0x4e);
RFRegCon((REG_WRITE | ClockRecoveryOffset0), 0xa5);
RFRegCon((REG_WRITE | ClockRecoveryTimingLoopGain1), 0x00);
RFRegCon((REG_WRITE | ClockRecoveryTimingLoopGain0), 0x36);
RFRegCon((REG_WRITE | TXDataRate1), 0x02); //9600BPS
RFRegCon((REG_WRITE | TXDataRate0), 0x75);
RFRegCon((REG_WRITE | FrequencyDeviation), 0x48);
RFRegCon((REG_WRITE | ClockRecoveryGearshiftOverride), 0x13);
RFRegCon((REG_WRITE | GPIO0Configuration), 0x1f);
RFRegCon((REG_WRITE | GPIO1Configuration), 0x12); //GPIO_1 TX state
RFRegCon((REG_WRITE | GPIO2Configuration), 0x15); //GPIO_2 RX state
RFRegCon((REG_WRITE | OperatingFunctionControl2), 0x02);
RFRegCon((REG_WRITE | OperatingFunctionControl2), 0x00);
RFRegCon((REG_WRITE | InterruptEnable1), 0x02);

}

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  +
  + FUNCTION NAME:  void  RFTransmitByte(uint8 data)
  +
  + DESCRIPTION:     
  +
  +        INPUT:       
  +
  + RETURN:         none
  +
  + NOTES:        
  +
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void  RFTransmitByte(uint8 data)
{
  
    uint8  ItStatus1,ItStatus2;
  //release all IT flag
ItStatus1 = (uint8)(RFRegCon(InterruptStatus1,0));
ItStatus2 = (uint8)(RFRegCon(InterruptStatus2,0));
if((ItStatus1&0x04)==0x00)
{
  

  /* */
  //clear FIFO
RFRegCon(REG_WRITE | OperatingFunctionControl1, 0x01);   
RFRegCon(REG_WRITE | OperatingFunctionControl2, 0x01);
RFRegCon(REG_WRITE | OperatingFunctionControl2, 0x00);

RFRegCon(REG_WRITE | InterruptEnable1, 0x00);
RFRegCon(REG_WRITE | InterruptEnable2, 0x00);
//set packet content
RFRegCon(REG_WRITE | TransmitPacketLength, 1);
//set data
RFRegCon(REG_WRITE | FIFOAccess, data);
//enable transmitter
RFRegCon(REG_WRITE | OperatingFunctionControl1, 0x09);
//enable the wanted ITs
RFRegCon(REG_WRITE | InterruptEnable1, 0x04);        //发送完中断允许
RFRegCon(REG_WRITE |InterruptEnable2, 0x00);
   

}
  while(Read_NIRQ==1)
  {


;
  }

ledO1_UP;
delay_nms(500);
ledO1_DOWN;
delay_nms(500);


}

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  +
  + FUNCTION NAME:  void  RFReceiveReady(void)
  +
  + DESCRIPTION:     
  +
  +        INPUT:       
  +
  + RETURN:         none
  +
  + NOTES:        
  +
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
uint8 RFReceiveReady()
{
uint8 index,yyy,ttt,data;
RFRegCon((REG_WRITE | OperatingFunctionControl2), 0x02);
RFRegCon((REG_WRITE | OperatingFunctionControl2), 0x00);
RFRegCon((REG_WRITE | OperatingFunctionControl1), 0x05);

while(1)
{
yyy = RFRegCon((REG_READ | InterruptStatus1),0x00);
if(yyy&0x02) break;
     ledO1_UP;
delay_nms(500);
}


ledO1_DOWN;

delay_nms(500);

RFRegCon((REG_WRITE | OperatingFunctionControl1), 0x01);
RFRegCon((REG_WRITE | ReceivedPacketLength),1 );

data=RFRegCon((REG_READ | FIFOAccess),0x00);
return data;


}

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2010-3-23 09:37:59 | 显示全部楼层
两个模块不能互相通信,因为没有频谱仪,用示波器测了下TX有信号出来!

出0入0汤圆

发表于 2010-3-23 10:56:20 | 显示全部楼层
www.moreway.net。下一个4432的应用手册看看吧。比较详细

出0入0汤圆

发表于 2010-3-31 16:03:41 | 显示全部楼层
呃 想问下REG_WRITE | OperatingFunctionControl1是什么意思 是在哪预定义的?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-7 19:52

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表