搜索
bottom↓
回复: 25

哎!怎么说呢?si4432停在发射这里了,出不去!

[复制链接]

出0入0汤圆

发表于 2011-5-23 15:08:30 | 显示全部楼层 |阅读模式
我是这样设置的,参考了论坛里面的一些资料
void RfInitHw(void)
{


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

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

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

void RF_T(unsigned char *dat,unsigned char len)
{
   unsigned char i;
   SpiWriteAddressData((REG_WRITE | TXPower), 0x06);
   SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x01);
   SpiWriteAddressData((REG_WRITE | OperatingFunctionControl2), 0x01);
   SpiWriteAddressData((REG_WRITE | OperatingFunctionControl2), 0x00);

   SpiWriteAddressData((REG_WRITE | InterruptEnable1), 0x00);
   SpiWriteAddressData((REG_WRITE | InterruptEnable2), 0x00);

   SpiWriteAddressData((REG_WRITE | TransmitPacketLength),len);
       
   for(i=0;i<len;i++)  
   {
      SpiWriteAddressData((REG_WRITE | FIFOAccess),*dat);
      dat++;
   }

   
   SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x09); //TX
   SpiWriteAddressData((REG_WRITE | InterruptEnable1), 0x04); //使能发送有效包中断      
   
   do
   {
      test=SpiWriteAddressData((REG_READ | InterruptStatus1), 0x00);  
   }while((test&0x04)==0);  
      
   SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x05); //into manual receive mode
       
}

现在死到while((test&0x04)==0);  这里了,读出的始终是0x20,SPI读写这块应该没什么问题,因为我读了一些寄存器,例如0x00寄存器,读出是0x08,GPIO1Configuration,读出是0x15,证明spi读写应该没什么问题,现在为什么停在发射那块,始终包发送中断不能置位呢?哎!

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2011-5-23 15:23:02 | 显示全部楼层
水深火热之中!

出0入0汤圆

 楼主| 发表于 2011-5-23 17:54:30 | 显示全部楼层
数据长度和帧头错误都修正了,还是不行啊!

出0入0汤圆

发表于 2011-5-24 00:46:52 | 显示全部楼层
SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x09); //TX
   SpiWriteAddressData((REG_WRITE | InterruptEnable1), 0x04); //使能发送有效包中断

这两句换换顺序试试

出0入0汤圆

 楼主| 发表于 2011-5-24 07:00:21 | 显示全部楼层
试过了,不行的!

出0入0汤圆

 楼主| 发表于 2011-5-24 10:13:43 | 显示全部楼层
ddd!

出0入0汤圆

 楼主| 发表于 2011-5-24 14:01:54 | 显示全部楼层

出0入0汤圆

 楼主| 发表于 2011-5-24 17:16:37 | 显示全部楼层
d!

出0入0汤圆

 楼主| 发表于 2011-5-25 09:35:40 | 显示全部楼层
dd!

出0入0汤圆

 楼主| 发表于 2011-5-25 10:24:17 | 显示全部楼层
抓狂啊!现在硬件应该没什么问题,初始化的时候可以捕捉到irq变低的情况,spi读写都能返回正确数据,就是发送时状态位不置位,更别提irq变低了!现在都怀疑这个片子哪块有问题了!所有数据都是excel表格生成的,对了很多遍,应该没什么问题!

test=SpiWriteAddressData((REG_READ | InterruptStatus1), 0x00);  
test=SpiWriteAddressData((REG_READ | InterruptStatus2), 0x00);  
SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x80);

while(IRQ_H);

test=SpiWriteAddressData((REG_READ | InterruptStatus1), 0x00);
test=SpiWriteAddressData((REG_READ | InterruptStatus2), 0x00);

出0入0汤圆

发表于 2011-5-25 10:30:30 | 显示全部楼层
发之前清除收发FIFO

出0入0汤圆

 楼主| 发表于 2011-5-25 10:41:46 | 显示全部楼层
清了,还是不行
SpiWriteAddressData((REG_WRITE | OperatingFunctionControl2), 0x03);
   SpiWriteAddressData((REG_WRITE | OperatingFunctionControl2), 0x00);

出0入0汤圆

 楼主| 发表于 2011-5-25 10:45:33 | 显示全部楼层
SpiWriteAddressData((REG_WRITE | TransmitPacketLength),(len-1));
       
   /*for(i=0;i<len;i++)  
   {
      SpiWriteAddressData((REG_WRITE | FIFOAccess),dat);      
      
   } */
   SpiWriteBurst((REG_WRITE | FIFOAccess),dat,len);

   SpiWriteAddressData((REG_WRITE | InterruptEnable1), 0x04); //使能发送有效包中断
   SpiWriteAddressData((REG_WRITE | InterruptEnable2), 0x00);
   
   
   SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x09); //TX

   执行发送程序后,根本InterruptStatus1读回读不到发射状态结束标志位,更别提irq变化了,读了一下DeviceStatus,发现没有进入发射状态,实在让人很郁闷啊!

出0入0汤圆

发表于 2011-5-25 11:14:03 | 显示全部楼层
RF_ENUM RFTransmit(uint8 length)
{
        xdata uint8;
        //set packet content
        SpiRfWriteAddressData((REG_WRITE | TransmitPacketLength), length);                                       
        GREEN=0;
        /*
        for(temp8=0;temp8<length;temp8++)
        {
                SpiRfWriteAddressData((REG_WRITE | FIFOAccess),packet[temp8]);               
        }
        */
        //enable the packet sent interrupt
        SpiRfWriteAddressData((REG_WRITE | InterruptEnable1), 0x04);
        SpiRfWriteAddressData((REG_WRITE | InterruptEnable2), 0x00);
   //releaze all IT flags
        SpiReadWriteWord(InterruptStatus1 << 8);
        SpiReadWriteWord(InterruptStatus2 << 8);
        //enable transmitter
        SpiRfWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x09);
        //EA=0;
        //wait for the packet sent interrupt
        //while(RF_IRQ_PIN == 1)
        while (RF_NIRQ_PIN==1)
        {
        }
        GREEN=1;
        ItStatus1 = SpiRfReadRegister( InterruptStatus1 );
        ItStatus2 = SpiRfReadRegister( InterruptStatus2 );
        SpiRfWriteAddressData((REG_WRITE | InterruptEnable1), 0x04);
        //EA=1;
        return RF_OK;
}

ClearTxFIFO();
                        G_sendremotepcflag=0;
                        recbuf[2]=0xfe;
                        recbuf[3]=RSSI;
                        for (loop=0;loop<22;loop++)
                                        SpiRfWriteAddressData((REG_WRITE|FIFOAccess),recbuf[loop]);               
                        SpiRfWriteAddressData((REG_WRITE | TXPower),7);
                        RFTransmit(22);
                        RFReceiveConfig();

出0入0汤圆

发表于 2011-5-25 11:14:33 | 显示全部楼层
我上面是一次22字节,死等IO=0的查询法

出0入0汤圆

 楼主| 发表于 2011-5-25 11:35:52 | 显示全部楼层
试过了你的方法,还是不行!呵呵,多谢了!我估计这个片子有点问题!可惜手头只有一个自制的模块!

出0入0汤圆

 楼主| 发表于 2011-5-25 16:19:52 | 显示全部楼层
买了2个现成的板子,先把硬件问题排除在外,省得傻老婆等嗫汉子可劲傻等!再顶顶,看看还有什么影响不能发送的问题

出0入0汤圆

 楼主| 发表于 2011-5-27 10:59:42 | 显示全部楼层
硬件有问题,程序是好的!

出0入0汤圆

发表于 2011-5-28 12:59:40 | 显示全部楼层
没看楼主程序,不知楼主是否将天线分集开关设置正确,一般默认上电是接收,呵呵小弟乱猜的,楼主可以参照官方编程手册自己重新写一写,

出0入0汤圆

 楼主| 发表于 2011-5-30 12:53:30 | 显示全部楼层
呵呵!终于调通了!频点,发射速率,频偏等等都可以调节了!给后人两点建议
1)网上的程序只能参考,不能使用
2)要调节的参数按照silabs网站excel文件计算!

出0入0汤圆

发表于 2011-5-30 13:57:41 | 显示全部楼层
你还没说是网上程序中的哪一段出错了咧

出0入0汤圆

发表于 2012-3-28 16:27:23 | 显示全部楼层
我也正在调这个,也是S在IRQ上面,跟楼主是同样问题,不知道楼主最后是怎么样解决的

出0入0汤圆

发表于 2012-3-28 17:34:17 | 显示全部楼层
embeddev 发表于 2011-5-30 12:53
呵呵!终于调通了!频点,发射速率,频偏等等都可以调节了!给后人两点建议
1)网上的程序只能参考,不能使 ...

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

本版积分规则

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

GMT+8, 2024-3-29 22:13

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

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