[其他]

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

[复制链接]
3214|34
手机看帖
扫描二维码
随时随地手机跟帖
加油吧威基基|  楼主 | 2020-1-14 23:37 | 显示全部楼层 |阅读模式
程序我是在网上找到的,SPI已经调通,配置寄存器也没有问题,就是发送数据会卡在中断。求大神们看看,指导一下。
//函数名:void halRfSendPacket(INT8U *txBuffer, INT8U size)
//输入:发送的缓冲区,发送数据个数
//输出:无
//功能描述:CC1100发送一组数据
//*****************************************************************************************

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);     //程序卡在这里了。
    // Wait for GDO0 to be cleared -> end of packet
    while (GDO0);
    delay(200);
        halSpiStrobe(CCxxx0_SFTX);
}

cc1100e无线.zip

60.63 KB

使用特权

评论回复
评论
xch 2020-1-17 12:47 回复TA
就看“ while (!GDO0); ” 这句 
xch 2020-1-17 12:47 回复TA
看一下反汇编。也用示波器看波形。 
加油吧威基基 2020-1-14 23:39 回复TA
程序我也发上来了,大神们有空帮小弟看看,我已经搞了一个月了,实在搞不好,求大神们帮帮忙,谢谢您们 

相关帖子

dirtwillfly| | 2020-1-15 08:30 | 显示全部楼层
你用的什么单片机?
浏览了下你的代码,没看到使用中断啊,spi好像也是io模拟的
你有没有用逻辑分析仪观察下时序?

使用特权

评论回复
加油吧威基基|  楼主 | 2020-1-15 15:53 | 显示全部楼层
dirtwillfly 发表于 2020-1-15 08:30
你用的什么单片机?
浏览了下你的代码,没看到使用中断啊,spi好像也是io模拟的
你有没有用逻辑分析仪观察 ...

SPI是IO模拟的,这个没有问题,读取都正常,中断,这个是CC1100E的一个中断,当发送数据同步字成功,GDO0就变高电平,发送完就变成低电平,所以程序就卡在这里了,GDO0没有变化,我也在网上看了很多这个程序,大家的都是卡在这个位置了。

使用特权

评论回复
加油吧威基基|  楼主 | 2020-1-15 16:06 | 显示全部楼层
dirtwillfly 发表于 2020-1-15 08:30
你用的什么单片机?
浏览了下你的代码,没看到使用中断啊,spi好像也是io模拟的
你有没有用逻辑分析仪观察 ...

我用的是STC的单片机

使用特权

评论回复
dirtwillfly| | 2020-1-15 17:53 | 显示全部楼层
加油吧威基基 发表于 2020-1-15 15:53
SPI是IO模拟的,这个没有问题,读取都正常,中断,这个是CC1100E的一个中断,当发送数据同步字成功,GDO0 ...

通过GDO0判断有时会失效。超过一定时间就重新初始化试试。

使用特权

评论回复
加油吧威基基|  楼主 | 2020-1-15 20:13 | 显示全部楼层
dirtwillfly 发表于 2020-1-15 17:53
通过GDO0判断有时会失效。超过一定时间就重新初始化试试。

兄弟CC1100E这个芯片你有没有用过

使用特权

评论回复
dirtwillfly| | 2020-1-16 08:38 | 显示全部楼层
加油吧威基基 发表于 2020-1-15 20:13
兄弟CC1100E这个芯片你有没有用过

没有。我用过cc1101.
cc1100太老了,最新版本的勘误手册都是10年前的了。

使用特权

评论回复
加油吧威基基|  楼主 | 2020-1-16 09:24 | 显示全部楼层
dirtwillfly 发表于 2020-1-16 08:38
没有。我用过cc1101.
cc1100太老了,最新版本的勘误手册都是10年前的了。

代码是通用的,能不能发给我看看尼,兄弟谢谢你了。

使用特权

评论回复
加油吧威基基|  楼主 | 2020-1-16 09:47 | 显示全部楼层
dirtwillfly 发表于 2020-1-16 08:38
没有。我用过cc1101.
cc1100太老了,最新版本的勘误手册都是10年前的了。

大哥你留个QQ或者微信,我加一下你,谢谢您。

使用特权

评论回复
dirtwillfly| | 2020-1-16 11:22 | 显示全部楼层
加油吧威基基 发表于 2020-1-16 09:24
代码是通用的,能不能发给我看看尼,兄弟谢谢你了。

抱歉,代码发给客户后我都删除了。提供不了啊。网上有很多例程的,你找几个靠谱的参考

使用特权

评论回复
加油吧威基基|  楼主 | 2020-1-16 11:57 | 显示全部楼层
dirtwillfly 发表于 2020-1-16 11:22
抱歉,代码发给客户后我都删除了。提供不了啊。网上有很多例程的,你找几个靠谱的参考 ...

大哥,能不能推荐一个。

使用特权

评论回复
dirtwillfly| | 2020-1-16 12:00 | 显示全部楼层
加油吧威基基 发表于 2020-1-16 11:57
大哥,能不能推荐一个。

下载频道搜索一下有很多的:https://dl.21ic.com/list.html

使用特权

评论回复
加油吧威基基|  楼主 | 2020-1-16 14:06 | 显示全部楼层
dirtwillfly 发表于 2020-1-16 12:00
下载频道搜索一下有很多的:https://dl.21ic.com/list.html

好的,谢谢大哥

使用特权

评论回复
ygd8718| | 2020-1-17 07:01 | 显示全部楼层
1、认真核对size大小。
2、等不来就不等了,根据size大小做适当延时,略过。但while()语句有读的功能,看看手册,是否有读GDO0的必要。

使用特权

评论回复
aerwa| | 2020-1-17 20:46 | 显示全部楼层
以前我调模拟SPI的时候碰到24L01这种情况是写数据就错了,不是没中断。

使用特权

评论回复
wushiye54| | 2020-1-18 09:39 | 显示全部楼层
我用STM32也遇到过这个问题,SPI写入速度太快,cc1101来不及响应有可能程序会卡在循环中,要在while (!GDO0); 前加一点延时

使用特权

评论回复
加油吧威基基|  楼主 | 2020-1-21 23:24 | 显示全部楼层
wushiye54 发表于 2020-1-18 09:39
我用STM32也遇到过这个问题,SPI写入速度太快,cc1101来不及响应有可能程序会卡在循环中,要在while (!GDO0 ...

您好,这几天没有看论坛,不好意思,我现在中断过了,但进入发送模式的时候,没有发射。用while一直循环就有发射。

使用特权

评论回复
加油吧威基基|  楼主 | 2020-1-21 23:26 | 显示全部楼层
wushiye54 发表于 2020-1-18 09:39
我用STM32也遇到过这个问题,SPI写入速度太快,cc1101来不及响应有可能程序会卡在循环中,要在while (!GDO0 ...

论坛回复太慢,能否留个联系方式?现在也放假了,我也不想打扰你愉快的假期,你有空旧回复一下,最好留个联系。谢谢您。

使用特权

评论回复
hahajing27| | 2020-1-23 22:59 | 显示全部楼层
你留个QQ或微信不就行了

使用特权

评论回复
gaoyang9992006| | 2020-1-24 13:35 | 显示全部楼层
现象描述】:在单机发送中,要求该机发送完成后转入接收状态,等待接收。不管有没有接收到语音数据,若发送时刻到来,则必须启动发送。现在的问题是有时发送一会语音数据就不能正常发送了,正常工作的持续时间长短不一。测试发现,PC指针原来是一直停留在了while(!GDO0);这条语句上了。该条语句的功能是判断是不是开始发送数据,当GDO0有上升沿出现的时候,表示开始发送数据。

【解决方法】在开始发送数据之前,先向CC1100写SIDLE命令使无线芯片CC1100转入空闲状态。然后再往TX FIFO里写入数据。数据写完后,写命令STX转发送状态开始发送。

【结果分析】用该方法后,发现带有状态转换的单机发送能够持续成功发送了。仔细研究CC1100数据手册后发现,写指令STX,在两种情况下可以成功转入到发送状态。一:在空闲状态。此种情况下可直接转入发送态。二:在接收态,并且要求是CCA使能。此种情况有个条件才能成功转入发送态,就是当信道清除时。
由此可以理解为什么之前的非正常现象了。虽然在MCSM1寄存器中的RXOFF-MODE位为00,表示接收完成后自动转入到空闲态。但是在程序中,在接收态一直等待接收,如果没有接收到数据,就不能转入空闲态了。因此再发送数据需要满足上面的第二个条件。

使用特权

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

本版积分规则

5

主题

27

帖子

0

粉丝