搜索
bottom↓
回复: 7

SI4432 接收数据 好像有问题,不知道是什么原因?

[复制链接]

出0入0汤圆

发表于 2013-2-2 11:15:18 | 显示全部楼层 |阅读模式
本帖最后由 Am-PCB 于 2013-2-2 11:47 编辑

现附上程序
  1.   问题详述:第一次循环后,NIRQ的值就变为1(对应的NIRQ引脚电平为高)而不会再变为0,不会再进入if,也就是说只接收一次数据。困惑。。。
  2. while(1)
  3.         {        
  4.                 if( NIRQ == 0 )
  5.                 {         
  6.                         //NIRQ = 1;
  7.                         //disable the receiver chain
  8.                         SpiWriteRegister(0x07, 0x01); //write 0x01 to the Operating Function Control 1 register
  9.                           //read interrupt status registers
  10.                         ItStatus1 = SpiReadRegister(0x03);                                                                                                //read the Interrupt Status1 register
  11.                         ItStatus2 = SpiReadRegister(0x04);                                                                                                //read the Interrupt Status2 register
  12.                                                   
  13.                         if((ItStatus1 & 0x02) == 0x02)
  14.                          {         //ItStatus1 = SpiReadRegister(0x03);                                                                                //read the Interrupt Status1 register
  15.                                  //        ItStatus2 = SpiReadRegister(0x04);                                                                                //read the Interrupt Status2 register
  16.                                                                  
  17.                                   //Read the length of the received payload
  18.                                  length = SpiReadRegister(0x4B);                                                                                          //read the Received Packet Length register
  19.                                  //check whether the received payload is not longer than the allocated buffer in the MCU
  20.                                  //Get the received payload from the RX FIFO
  21.                                         for(temp8=0;temp8 < length; temp8++)  
  22.                                         {
  23.                                                 payload[temp8] = SpiReadRegister(0x7F);                                                                //read the FIFO Access register
  24.                                         }  
  25.                                         for(i=0;i<length;i++)
  26.                                         {
  27.                                                 rd1 = payload[i];
  28.                                                 rd1 = rd1<<1;
  29.                                         }                 
  30.                                                                                                                      
  31.                                    //check whether the acknowledgement packet received
  32.                                    successful_flag = 1;
  33.                                timeout=0; //check whether an expected packet received, this should be acknowledged
  34.                                    //}
  35.                                    //if( length == 8 )
  36.                                //{           
  37.                                         if(successful_flag)
  38.                                         {            
  39.                                                 led1();   
  40.                                             //lcd_printf_string("        ", ROW(0x00)|LEN(0x08)|COL(0x00));
  41.                                                 //lcd_printf_string("ok      ", ROW(0x01)|LEN(0x08)|COL(0x00));                        
  42.                                         }
  43.                                         else
  44.                                         {
  45.                                                 //lcd_printf_string("        ", ROW(0x00)|LEN(0x08)|COL(0x00));
  46.                                                 //lcd_printf_string("fail    ", ROW(0x01)|LEN(0x08)|COL(0x00));
  47.                                         }
  48.                                         rd = AdpcmDecode(rd1);
  49.                                  //}
  50.                     }        
  51.                           //reset the RX FIFO
  52.                      SpiWriteRegister(0x08, 0x02);                                                                                                        //write 0x02 to the Operating Function Control 2 register
  53.                   SpiWriteRegister(0x08, 0x00);                                                                                                        //write 0x00 to the Operating Function Control 2 register
  54.                           //enable the receiver chain again
  55.                           SpiWriteRegister(0x07, 0x05);                                                                                                        //write 0x05 to the Operating Function Control 1 register
  56.                 }                 
  57.         }        
复制代码

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

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2013-7-18 15:02:07 | 显示全部楼层
你好,请问这个问题能不能给点提示呢?
我也碰到了类似情况。楼主解决了吗?
我用中断方式接收的,进入 【包有效中断】0x02 ,收取数据包,重新设置寄存器0x07为 XTON | RX 模式(0x05)。但是经常就停止接收了。

后来在主循环里,一直轮询这个模式寄存器,发现中断设置成0x05后(中断里设置后05后,再读取,确认是0x05,正常的),在主循环里轮询会发现有一半几率会从自动从0x05变回0x01。
看手册里是只有【包有效中断】才会变回0x01。

出0入0汤圆

 楼主| 发表于 2013-7-18 15:55:22 | 显示全部楼层
mute 发表于 2013-7-18 15:02
你好,请问这个问题能不能给点提示呢?
我也碰到了类似情况。楼主解决了吗?
我用中断方式接收的,进入 【 ...

这个问题最后貌似解决了,因为这个是帮同学做的,后来就交给他本人处理了,加上时间太长,至于问题到底出在哪里确实记不清了,不过当时好像是加了一段LED程序,放在原来程序不同的位置之处,来判断哪里没执行到,再有针对性地修改,是这样做的。没帮到你,非常不好意思,功能强大的芯片往往不太容易控制,希望你能早日解决问题!!!

出0入0汤圆

发表于 2013-7-19 14:49:12 | 显示全部楼层
唉,我连初始化都看不懂

出0入0汤圆

发表于 2013-9-1 17:30:12 | 显示全部楼层
现在我也也是貌似这样的问题,IRQ脚跟不上节拍,

出0入0汤圆

 楼主| 发表于 2013-9-1 22:06:50 | 显示全部楼层
功能强大的芯片往往不容易控制,多点耐心,一定能做出来。

出0入0汤圆

发表于 2013-9-10 16:37:06 | 显示全部楼层
楼主解决了吗?

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-10-3 03:20

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

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