CC1101: CC1101,IOCFG2改为0x06,进行中断接收,通讯距离减少很多

Prodigy 140 points
Part Number: CC1101

将CC1101的IOCFG2改为0x06,使用中断接收信号,通讯距离比轮询接收少了100多米。请问可能是什么原因,有没有中断接收的例程。

一下是我的中断接收程序

  • 您好,

    已经收到了您的案例,调查需要些时间,感谢您的耐心等待。

  • 您好,

    首先、我不知道您的设置、或者您说您有一个轮询接收器(您是轮询 GDO 引脚、轮询寄存器吗?)时、您在轮询什么内容?

    此外、我不知道 GDO0的配置是什么、或者是否有下降或上升中断。

    另一方面、您不应在 ISR 中进行大量处理、也不应实现软件延迟。

    您的软件只需执行以下操作:

    void main(void)
    {
        // initialize MCU and peripherals
    
        // Write radio registers (use defaut from SmarrtRF Studio to start with)
    
    	// Configure falling ede interrupt on GDOx (IOCFGx = 0x06)
    
        // Set radio in RX
        trxSpiCmdStrobe(CC1101_SRX);
    
        // Infinite loop 
        while(TRUE)
    	{
    		// wait for packet received interrupt (falling edge interrupt)
            if(packetSemaphore == ISR_ACTION_REQUIRED)
    		{
                // Read number of bytes in RX FIFO
                cc1101SpiReadReg(CC1101_RXBYTES,&rxBytes, 1);
                
                // Check that we have bytes in FIFO
                if(rxBytes != 0)
    			{
                    // Check for RX FIFO overflow (MSB of RXBYTES)
                    if(rxBytes & 0x80)
    				{
                        // Flush RX FIFO
                        trxSpiCmdStrobe(CC1101_SFRX);
                    }
    				else
    				{
                        // Read n bytes from RX FIFO
                        cc1101SpiReadRxFifo(rxBuffer,(rxBytes));
                        
                        // Check CRC ok (CRC_OK: bit7 in second status byte)
                    }
                }
          
                // Reset packet semaphore
                packetSemaphore = ISR_IDLE;
    
                // Set radio back in RX
                trxSpiCmdStrobe(CC1101_SRX);
            }
        }
    }
    
    static void rxISR(void)
    {
        // Set packet semaphore
        packetSemaphore = ISR_ACTION_REQUIRED;
    
        // Clear ISR flag
    }

  •  你好,感谢您的回复,GDO0引脚的配置位0x06,轮询接收的意思是在主循环里轮询GDO0引脚,寄存器的配置如下

    你的程序对我很有价值,还有一个问题是关于接收中断中的内容耗时较长会影响通讯距离吗?还是说有可能是别的原因?望请回复,谢谢。

  • 关于中断中的延迟问题,是因为进入rx不是立即会进入, 芯片会进入一些状态后才会真正进入,特别是cpu快的,  不然可能会导致判断状态异常。

  • 您好,

    与在引脚上轮询相比、产生中断不会影响范围。 我只是想您可能会因为代码问题而丢失数据包、良好的软件实践总是意味着您不应在 ISR 中花费太多时间执行任何操作。

    我很抱歉、但我不理解对拖延的解释。

    在接收到数据包之前、您不应有中断(GDOx 信号上的下降沿中断)、如果这样做、则不需要任何延迟。

    发生此中断时、无线电已经恢复到空闲状态(只要您使用 SmartRF Studio 的建议设置)。

  • 您好,

      非常感谢你的用心回答,进入接收状态后加延迟是一位之前用过C1101的前辈给我的建议,不过我还是决定按照你给的意见试一下。再次感谢你的回答,你的建议对我至关重要。

  • 您好,

    我对此没有补充意见。

    我不知道客户拥有什么硬件、他们使用什么设置、或者他们是否按照我的解释尝试更改了代码。

    如果他们在使用轮询的一种射频配置中获得所需的灵敏度、然后他们只是从轮询更改为中断、并且失去了100m 范围(相同的射频设置和相同的硬件)、那么软件显然存在问题。

    我们对所有 OUT 测试使用中断并获取 SmartRF Studio 中所有设置的灵敏度数据表编号、因此使用中断不会导致射频性能下降。