xesmot 发表于 2015-12-24 21:13:00

CC1101 发送后无法进入休眠

本帖最后由 xesmot 于 2015-12-25 10:51 编辑

请各位大侠帮帮忙!
方案采用MSP430F2132+CC1101,目前收发正常,但是功耗一直降不下来,后来通过示波器监测,发现在接收到数据后,2132和1101应都进入了低功耗状态,电流大约200uA,但是在发送完数据后,并没有进入低功耗状态,电流大约在2mA左右,在接收到数据后进入休眠的语句和发送数据后进入休眠的语句都是下面这句:

halSpiStrobe(0x39);// 设定CC1101芯片进入休眠模式

请问什么地方需要注意?
===================================
这是接收后的处理:
。。。。
if((LEI_JIA.adata)==RxBuf)//检验和正确,置无线接收数据需处理标记
                     {
                     halSpiStrobe(i);// 设定CC1101芯片进入休眠模式
。。。。。。。。。。。。。。。。。
===================================
这是发送后的处理:
halRfSendPacket(TxBuf,8);//发送数据
halSpiStrobe(0x39);// 设定CC1101芯片进入休眠模式
PROG_SLEEP_FLAG=1;//程序片休眠标记
。。。。。。。。。。

==============================
这是休眠进入前的处理
。。。。。。。。。。
if(PROG_SLEEP_FLAG)//程序片休眠标记
      {
      PROG_SLEEP_FLAG=0;//程序片休眠标记
   halSpiStrobe(0x39);// 设定CC1101芯片进入休眠模式
   P1OUT &=0x40; //将输出口均置为0
   P2OUT &=~0X02; //将输出口均置为0
   P3OUT &=0X0F; //将SPI接口外的管脚均置为0
   LPM3;//CPU进入休眠
   }
。。。。。。。。。。。。。。。。。

这是发送数据函数,在这个函数里面已经有对GDO0的判断了,所以奇怪,究竟是什么地方还没照顾到导致无法进入休眠,而是进入了空闲状态。
void halRfSendPacket(INT8U *txBuffer, INT8U size)
{
    halSpiWriteReg(CCxxx0_TXFIFO, size);
    halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size);      //写入要发送的数据
    halSpiStrobe(CCxxx0_STX);   //进入发送模式发送数据
    // Wait for GDO0 to be set -> sync transmitted
//    while (!GDO0);
    while ((GDO0_IN&GDO0)==0);
    // Wait for GDO0 to be cleared -> end of packet
//    while (GDO0);
    while (GDO0_IN&GDO0);
    halSpiStrobe(CCxxx0_SFTX);
}

丢丢时光机 发表于 2015-12-24 21:27:18

得等待数据发送完成后,再发送CC1101睡眠指令!GDO0配置为0x06,然后通过GDO0判断,数据是否已经发送完成。

xesmot 发表于 2015-12-25 10:50:36

丢丢时光机 发表于 2015-12-24 21:27
得等待数据发送完成后,再发送CC1101睡眠指令!GDO0配置为0x06,然后通过GDO0判断,数据是否已经发送完成。 ...

这是发送数据函数,在这个函数里面已经有对GDO0的判断了,所以奇怪,究竟是什么地方还没照顾到导致无法进入休眠,而是进入了空闲状态。
void halRfSendPacket(INT8U *txBuffer, INT8U size)
{
    halSpiWriteReg(CCxxx0_TXFIFO, size);
    halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size);        //写入要发送的数据
    halSpiStrobe(CCxxx0_STX);   //进入发送模式发送数据
    // Wait for GDO0 to be set -> sync transmitted
//    while (!GDO0);
    while ((GDO0_IN&GDO0)==0);
    // Wait for GDO0 to be cleared -> end of packet
//    while (GDO0);
    while (GDO0_IN&GDO0);
    halSpiStrobe(CCxxx0_SFTX);
}

丢丢时光机 发表于 2015-12-25 13:11:04

xesmot 发表于 2015-12-25 10:50
这是发送数据函数,在这个函数里面已经有对GDO0的判断了,所以奇怪,究竟是什么地方还没照顾到导致无法进 ...

halSpiStrobe(CCxxx0_SFTX); 这个后面发送休眠指令不行吗?如果不行的话,你检查下GDO0的信号对不对
页: [1]
查看完整版本: CC1101 发送后无法进入休眠