发新帖我要提问
12
返回列表
打印
[其他]

CC1100E程序卡在中断里了,求大神帮忙,搞掂私人发红包

[复制链接]
手机看帖
扫描二维码
随时随地手机跟帖
21
加油吧威基基|  楼主 | 2020-1-24 13:50 | 只看该作者 回帖奖励 |倒序浏览
gaoyang9992006 发表于 2020-1-24 13:35
现象描述】:在单机发送中,要求该机发送完成后转入接收状态,等待接收。不管有没有接收到语音数据,若发送 ...

好的,谢谢哥指点,我晚上再试试,今天过节回一下老家,晚上回去搞搞试试看,祝您新春快乐。

使用特权

评论回复
22
gaoyang9992006| | 2020-1-24 15:12 | 只看该作者
加油吧威基基 发表于 2020-1-24 13:50
好的,谢谢哥指点,我晚上再试试,今天过节回一下老家,晚上回去搞搞试试看,祝您新春快乐。 ...

嗯嗯,不要串门走亲戚,最近周边都封村了。

使用特权

评论回复
23
加油吧威基基|  楼主 | 2020-1-24 19:41 | 只看该作者
gaoyang9992006 发表于 2020-1-24 15:12
嗯嗯,不要串门走亲戚,最近周边都封村了。

好的哥

使用特权

评论回复
24
加油吧威基基|  楼主 | 2020-1-24 21:51 | 只看该作者
gaoyang9992006 发表于 2020-1-24 13:35
现象描述】:在单机发送中,要求该机发送完成后转入接收状态,等待接收。不管有没有接收到语音数据,若发送 ...

大哥,这个问题还是没有解决到,我发一下代码你看看。

下面的代码不往FIFO里面写数据直接进入发射模式是没有问题的,是有发射的。
void CC1100E_Init()
{
    Spi_Init();           //数据线初始化
    Delay_nmss(5);
   //SI=0;
    CSIN=0;
   SCLK11=0;
   CSIN=1;
   
    Delay_nmss(10);               
    CC1100E_POWER_UP_RESET();//上电复位CC1100
        Delay_nmss(10);
    CC1100E_WriteRfSettings();//配置CC1100的寄存器
        Delay_nmss(10);
        Spi_Strobe(CCxxx0_SIDLE);
        Delay_nmss(10);
        Spi_WriteBurstReg(CCxxx0_PATABLE,PaTabel,8);  //SPI写寄存器功率配置
        Delay_nmss(10);
         Spi_Strobe(CCxxx0_SRX);
         Delay_nmss(10);
         Spi_Strobe(CCxxx0_SIDLE);//退出接收和TX和睡眠状态,只有晶体运作
         Spi_Strobe(CCxxx0_STX);//进入发射模式
}


下面这个代码是往FIFO里面写数据的.是没有发射,但while (GDO0);这个确通过了。就是没有发射。
void CC1100E_SendPacket(uchar *txBuffer, uchar size)
{
    Spi_Strobe(CCxxx0_SIDLE);           //退出RX/TX模式关闭频率合成器并退出无线唤醒模式
        Delay_nmss(1);
    Spi_WriteBurstReg(CCxxx0_TXFIFO, txBuffer, size);
        Delay_nmss(1);
    Spi_Strobe(CCxxx0_STX); //进入发送模式发送数据
        Delay_nmss(1);
    // Wait for GDO0 to be set -> sync transmitted        等待GDO0设置->同步传输
    while (!GDO0);
    // Wait for GDO0 to be cleared -> end of packet           等待GDO0设置->同步发送等待GDO0清除->数据包结束
     while (GDO0);
   //  Spi_Strobe(CCxxx0_SFTX);
        Delay_nmss(1);
}

void CC1100E_Init()
{
    Spi_Init();           //数据线初始化
    Delay_nmss(5);
   //SI=0;
    CSIN=0;
   SCLK11=0;
   CSIN=1;
   
    Delay_nmss(10);               
    CC1100E_POWER_UP_RESET();//上电复位CC1100
        Delay_nmss(10);
    CC1100E_WriteRfSettings();//配置CC1100的寄存器
        Delay_nmss(10);
        Spi_Strobe(CCxxx0_SIDLE);
        Delay_nmss(10);
        Spi_WriteBurstReg(CCxxx0_PATABLE,PaTabel,8);  //SPI写寄存器
        Delay_nmss(10);
         Spi_Strobe(CCxxx0_SRX);
         Delay_nmss(10);
         Spi_Strobe(CCxxx0_SIDLE);//退出接收和TX和睡眠状态,只有晶体运作
         CC1100E_SendPacket(SendBuff,8);//往FIFO写数据加发送

}       

使用特权

评论回复
25
gaoyang9992006| | 2020-1-25 12:44 | 只看该作者
void halRfSendPacket(uint8 *txBuffer, uint8 size)

{
halSpiStrobe(CCxxx0_SIDLE);
//首先执行SIDLE滤波命令强制芯片进入空闲状态,
//wwt delayms_rf(2);
//发送数据后延迟一会,等待数据全部发送出去
halSpiStrobe(CCxxx0_SFTX); //清空TX FIFO缓冲区内容。
halSpiWriteReg(CCxxx0_TXFIFO, size); //写入缓冲地址、发送的数据个数
halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //写入缓冲地址、发送的数据
//MARCSTATE_Flag=halSpiReadReg(CCxxx0_MARCSTA TE);//测试,读状态机状态
//while(MARCSTA TE_Flag==0x01);//=0x01(IDLE模式),判断是否退出IDLE模式,附加P2IE &= ~BIT6; //_DINT();//禁止中断//P2.3禁止中断
halSpiStrobe(CCxxx0_STX); //进入发送模式,发送数据
//由于模式寄存器已配置,发送结束后会继续保持在接收模式下
//发送不使用中断信号GDO0,接收使用中断信号GDO0
while (!GDO0);// Wait for GDO0 to be set -> sync transmitted
while (GDO0); // Wait for GDO0 to be cleared -> end of packet
P2IFG&=~BIT6;//软件清零GDO0,发送数据不产生中断
P2IE |= BIT6;//使能总中断_EINT(); //P2.3允许中断
delayms_rf(2);//发送数据后延迟一会,等待数据全部发送出去
halSpiStrobe(CCxxx0_SIDLE);//首先执行SIDLE滤波命令强制芯片进入空闲状态,//wwt halSpiStrobe(CCxxx0_SRX); //再次进入接收状态

}

//***************************************************************************** ************

//函数名:uint8 halRfReceivePacket(uint8 *rxBuffer, uint8 *length)

//输入:

//输出:0:错误

// 1:正确

// 功能描述:接收数据包

// 当需要接收数据时, 首先将CC1100配置成接收状态,

// 一旦收到符合要求的数据, CC1100就会把收到的数据存入接收FIFO ,

// 同时引脚GDO0 会有一个脉冲出现, 这个脉冲可以用来通知

// MCU 有一个数据包已被CC1100 收到, MCU 就可以通过SPI口将CC1100 收到的数据取出来。

// GDO0_____|-----|______

//***************************************************************************** ************

uint8 halRfReceivePacket(uint8 *rxBuffer, uint8 length)

{

uint8 status[2];

uint8 packetLength = 0;

delayms_rf(2);//发送数据后延迟一会,等待数据全部发送出去

if((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) //如果接的字节数不为0(先读RXBYTES状态寄存器,再&0x7F)

{

packetLength = halSpiReadReg(CCxxx0_RXFIFO);//读出第一个字节,此字节为该帧数据长度

if (packetLength <= length) //如果帧数据长度小于等于用户设置的长度

{

halSpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, packetLength); //读出所有接收到的数据

length = packetLength; //把接收数据长度的修改为当前数据的长度

// Read the 2 appended status bytes (status[0] = RSSI, status[1] = LQI)

halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2);//读出CRC校验位

//RSSI_dec1=status[0];

halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区

halSpiStrobe(CCxxx0_SRX); //再次进入接收状态

RF_Length=length;//wwt

return (status[1] & CRC_OK);//如果校验成功返回接收成功

}

else

{

length = packetLength;

halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区

halSpiStrobe(CCxxx0_SRX); //再次进入接收状态

return 0;

}

}

else

{

halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区

halSpiStrobe(CCxxx0_SRX); //再次进入接收状态

return 0;

}

}

使用特权

评论回复
26
gaoyang9992006| | 2020-1-25 12:44 | 只看该作者
给你参考一下代码。
IDLE后紧接着用STX试试看。

使用特权

评论回复
27
加油吧威基基|  楼主 | 2020-1-25 18:33 | 只看该作者
gaoyang9992006 发表于 2020-1-25 12:44
给你参考一下代码。
IDLE后紧接着用STX试试看。

好的,谢谢哥,一会我测试一下,看看结果怎样。

使用特权

评论回复
28
cooldog123pp| | 2020-1-26 12:05 | 只看该作者
打个断点,看看停在哪里,没有开中断,你停在中断,那你把中断入口函数注释掉,看看是不是正常。

使用特权

评论回复
29
forrest11| | 2020-2-1 16:54 | 只看该作者
加油吧威基基 发表于 2020-1-24 21:51
大哥,这个问题还是没有解决到,我发一下代码你看看。

下面的代码不往FIFO里面写数据直接进入发射模式是 ...

volatile GDO0;

使用特权

评论回复
30
wushiye54| | 2020-4-17 13:18 | 只看该作者
加油吧威基基 发表于 2020-1-21 23:26
论坛回复太慢,能否留个联系方式?现在也放假了,我也不想打扰你愉快的假期,你有空旧回复一下,最好留个 ...

解决了没?没解决的话可以加我QQ2417976350我帮你看一下

使用特权

评论回复
31
加油吧威基基|  楼主 | 2020-4-28 17:48 | 只看该作者
wushiye54 发表于 2020-4-17 13:18
解决了没?没解决的话可以加我QQ2417976350我帮你看一下

没有尼,哥,我直接换另外一只IC了,已经量产,哥,谢谢您。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则