OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8689|回复: 32

请教关于CADDetected中断问题

[复制链接]

29

主题

134

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1240
金钱
1240
注册时间
2013-1-11
在线时间
430 小时
发表于 2020-9-26 00:38:51 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 aozhouduwang 于 2020-9-26 00:52 编辑

@1209943162 @andychen
CAD手册流程如下:
1.PLL被锁定。
2.无线接收机从信道获取数据的LoRa前导码符号。在期间的电流消耗对应指定的Rx模式电流。
3.无线接收机及PLL被关闭,调制解调器数字处理开始执行。
4.调制解调器搜索芯片所获取样本与理想前导码波形之间的关联关系。建立这样的关联关系所需的时间仅略小于一个符号周期。在此期间,电流的消耗大幅减少。
5.完成计算后,调制解调器产生CadDone中断信号。如果关联成功,则会同时产生CadDetected信号。
6.芯片恢复到待机模式。
7.如果发现前导码,清除中断,然后将芯片设置为Rx单一或连续模式,从而开始接收数据。

问题:
1.配置CAD INIT后,就会有CAD Done中断,但那个CadDetected什么时候会来呢?
手册写的完成计算后,有CadDone中断,是完成什么计算呢?关联成功,是不是相当于和发射机那边匹配完成就关联成功?然后进入接收模式收数据。
我的理解,CADInit完成后,开始检测,检测完成后,至CadDone,如果有合适的发送机匹配就CadDetected,如果没有则退出。不知道这样理解是否正确???

2.CAD检测时间内,芯片在(2SF+32)/BW秒钟处于接收模式,其余时间则处于低功耗状态。
  1. WriteRfReq(SX127X_LR_MODEMCONFIG1, RFLR_MODEMCONFIG1_BW_250_KHZ + RFLR_MODEMCONFIG1_CODINGRATE_4_7 + RFLR_MODEMCONFIG1_IMPLICITHEADER_ON);
  2.     WriteRfReq(SX127X_LR_MODEMCONFIG2, RFLR_MODEMCONFIG2_SF_9 | RFLR_MODEMCONFIG2_RXPAYLOADCRC_ON);
复制代码
如果配置这样,是不是CAD检测时间=(2*SF_9+32)/BW_250_KHZ=(2*144+32/128=2秒呢
3.发送机那边以300ms发送数据(有TXDone中断),接收机这边收不到CadDetected,,有2秒的检测时间,应该可以收到但一直没有CadDetected?

4.发现一个问题,把发送机电源关掉,接收机不停的CADInit(3秒一次,大于第二条算的时间),尽然会进入RF_IO4脚中断。读状态寄存器是CadDone中断,
疑问,CadDone是在RF_IO0,CadDetected是在RF_IO4。感觉混乱了。中断肯定没问题。

部分程序
  1. if((P2IN & BIT6) == BIT6)                   //RF_IO0
  2.         {
  3.         mRunFlag.flag.cadTxRxDoneFlag=1;
  4.     }

  5.     if((P2IN & BIT7) == BIT7)
  6.     {
  7.         mRunFlag.flag.cadDetectedFlag=1;        //RF_IO4
  8.     }
复制代码
  1. Boolean RfEnterCADMode()
  2. {
  3.     WriteRfReq(SX127X_LR_DIOMAPPING1, 0x80);
  4.     WriteRfReq(SX127X_LR_DIOMAPPING2, 0x00);
  5.     WriteRfReq( SX127X_LR_IRQFLAGSMASK, ~(RFLR_IRQFLAGS_CADDETECTED_MASK + RFLR_IRQFLAGS_CADDONE_MASK));//允许CADDETECTED和CADDONE中断,而屏蔽其他中断
  6.     WriteRfReq( SX127X_LR_OPMODE, 0x80 | RFLR_OPMODE_CAD);
  7. }
复制代码
  1.     //LoRaInit
  2.         ret = ReadRfReq(SX127X_LR_RegPacketConfig2);
  3.         WriteRfReq(SX127X_LR_RegPacketConfig2, ret&0x7F);

  4.     WriteRfReq(SX127X_LR_RegSyncValue8, 0x40);
  5.     WriteRfReq(SX127X_LR_RegPacketConfig1, 0x00);

  6.     WriteRfReq(SX127X_LR_PACONFIG, 0xFF);//输出20dbm
  7.     WriteRfReq(SX127X_LR_PADAC, RFLR_PADAC_20DBM_ON);//允许运行开启20dbm在PA_BOOSTpin.
  8.     WriteRfReq(SX127X_LR_PARAMP, RFLR_PARAMP_1000_US); //功率斜率控制.1mS
  9.     WriteRfReq(SX127X_LR_OCP, 0x20 | RFLR_OCP_TRIM_240_MA);//触发过流保护电流

  10.     //Lora寄存器模式操作
  11.     WriteRfReq(SX127X_LR_PAYLOADLENGTH, 2);

  12.     WriteRfReq(SX127X_LR_MODEMCONFIG3, RFLR_MODEMCONFIG3_LOWDATARATEOPTIMIZE_ON | RFLR_MODEMCONFIG3_AGCAUTO_ON); //低速率和内部AGC自动控制
  13.     //暂时显示模式 250KHz 4_7
  14.     WriteRfReq(SX127X_LR_MODEMCONFIG1, RFLR_MODEMCONFIG1_BW_250_KHZ + RFLR_MODEMCONFIG1_CODINGRATE_4_7 + RFLR_MODEMCONFIG1_IMPLICITHEADER_ON);
  15.     WriteRfReq(SX127X_LR_MODEMCONFIG2, RFLR_MODEMCONFIG2_SF_9 | RFLR_MODEMCONFIG2_RXPAYLOADCRC_ON);

  16.     WriteRfReq(SX127X_LR_PREAMBLELSB,6);
  17.     WriteRfReq(SX127X_LR_PAYLOADLENGTH, 0x02);
  18.     WriteRfReq(SX127X_LR_OPMODE, 0x80 | RFLR_OPMODE_STANDBY );
  19.     WriteRfReq( SX127X_LR_FRFMSB, Freq_Cal_Tab[i]);   //set frequency
  20.     WriteRfReq( SX127X_LR_FRFMID, Freq_Cal_Tab[i + 1]);
  21.     WriteRfReq( SX127X_LR_FRFLSB, Freq_Cal_Tab[i + 2]);
复制代码
  1. void OnCadTxRxDoneEvent(void)
  2. {
  3.         unsigned char RfIsrState;//RF中断状态字

  4.         __disableInterrupts();
  5.         RfIsrState = ReadRfReq(SX127X_LR_IRQFLAGS);
  6.         __enabledInterrupts();
  7.    
  8.         if(RfIsrState & RFLR_IRQFLAGS_CADDONE)
  9.         {
  10.                 __disableInterrupts();
  11.                 WriteRfReq(SX127X_LR_IRQFLAGS, RFLR_IRQFLAGS_CADDONE);        //清除此中断标志
  12.                 __enabledInterrupts();
复制代码
  1. void OnCadDetectedEvent(void)
  2. {
  3.         unsigned char RfIsrState;
  4.         __disableInterrupts();
  5.         RfIsrState = ReadRfReq(SX127X_LR_IRQFLAGS);
  6.         __enabledInterrupts();
  7.         if((RfIsrState & RFLR_IRQFLAGS_CADDETECTED))
  8.         {

  9.                 __disableInterrupts();
  10.                 WriteRfReq(SX127X_LR_IRQFLAGS, RFLR_IRQFLAGS_CADDONE |\
  11.                                                                                   RFLR_IRQFLAGS_CADDETECTED); //清除CAD和CADDETECTED
  12.                 RfEnterLowPwrMode();
  13.                 RfEnterRxMode(2,IMPLICIT);
  14.                 __enabledInterrupts();
复制代码


最佳答案

查看完整内容[请看2#楼]

老铁,CAD模式调通了吗?我现在也遇到了和你一样的问题,示波器能检测到CADdone,检测不到CADdetected中断,可以加qq嘛,我想向您请教一下qq:404743046
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

29

主题

134

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1240
金钱
1240
注册时间
2013-1-11
在线时间
430 小时
 楼主| 发表于 2020-10-22 11:19:56 | 显示全部楼层
最佳答案选错了,问题解决参见22楼。
回复

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2019-8-19
在线时间
22 小时
发表于 2020-9-26 00:38:52 | 显示全部楼层
aozhouduwang 发表于 2020-9-30 11:18
大概明白了,我发送和接收现在设置的前导码时间是一样的,就有可能检测不到CADdetected。所以发射设置51m ...

老铁,CAD模式调通了吗?我现在也遇到了和你一样的问题,示波器能检测到CADdone,检测不到CADdetected中断,可以加qq嘛,我想向您请教一下qq:404743046
回复

使用道具 举报

19

主题

97

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2017-9-5
在线时间
78 小时
发表于 2020-9-26 10:36:49 | 显示全部楼层
谢谢 大佬。我认真学习一下。
回复

使用道具 举报

41

主题

276

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2354
金钱
2354
注册时间
2019-10-29
在线时间
380 小时
发表于 2020-9-26 13:53:38 | 显示全部楼层
我之前也调了下SX1280的CAD但是一直收不到CAD成功的中断,只有CAD Done中断,跟楼主相同的疑问? 顶一个!!
回复

使用道具 举报

29

主题

134

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1240
金钱
1240
注册时间
2013-1-11
在线时间
430 小时
 楼主| 发表于 2020-9-27 10:15:20 | 显示全部楼层
chenyuan 发表于 2020-9-26 13:53
我之前也调了下SX1280的CAD但是一直收不到CAD成功的中断,只有CAD Done中断,跟楼主相同的疑问? 顶一个! ...

你这边调通了没?
回复

使用道具 举报

29

主题

134

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1240
金钱
1240
注册时间
2013-1-11
在线时间
430 小时
 楼主| 发表于 2020-9-27 10:15:43 | 显示全部楼层
andychen 发表于 2020-9-26 10:36
谢谢 大佬。我认真学习一下。

我看你之前有遇到CAD问题,最后调通了吗
回复

使用道具 举报

41

主题

276

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2354
金钱
2354
注册时间
2019-10-29
在线时间
380 小时
发表于 2020-9-28 09:08:23 | 显示全部楼层

没有  后面一直通不了  还是用的TX -->RX
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2020-6-19
在线时间
9 小时
发表于 2020-9-28 16:40:28 | 显示全部楼层
1.CAD在初始化后就会进行,有中断就是说明已经检测完成,CADdone是在检测时间内检测到有效前导码。
2.你这个时间是不是要再除1000(Khz)。
3.CAD机制是检测前导码,应该先熟悉前导码检测机制原理,再进行操作试验,网上应该有几篇相关帖子。
简单原理是,假如我接收端1s进行一次CAD检测(CAD INIT),发送端应该发送带X前导码的数据,X由0x20,0x21寄存器控制。前导码发送时间大于等于1s才能保证接收端正确进入CADdone中断,就是肯定在检测时间内发送端在发送前导码。CADdone中应切换为接收模式就可以接收数据。仅个人见解,具体的看芯片手册,查找资料。
回复

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4471
金钱
4471
注册时间
2013-4-22
在线时间
335 小时
发表于 2020-9-28 16:44:04 | 显示全部楼层
我有能用的代码,有偿提供
回复

使用道具 举报

29

主题

134

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1240
金钱
1240
注册时间
2013-1-11
在线时间
430 小时
 楼主| 发表于 2020-9-29 10:40:29 | 显示全部楼层
17719491105 发表于 2020-9-28 16:40
1.CAD在初始化后就会进行,有中断就是说明已经检测完成,CADdone是在检测时间内检测到有效前导码。
2.你这 ...

CADdone是在检测时间内检测到有效前导码,那CadDetected呢?
发送端是在不停循环的发送前导码,

我有一份完整的程序,是在CadDetected切换为接收模式,不是在CADdone。
对比程序真没发现什么地方有问题,可能还是哪块理解有问题。
回复

使用道具 举报

29

主题

134

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1240
金钱
1240
注册时间
2013-1-11
在线时间
430 小时
 楼主| 发表于 2020-9-29 10:42:12 | 显示全部楼层
三叶草 发表于 2020-9-28 16:44
我有能用的代码,有偿提供

完整能用的代码我这边也有,发送接收 显性隐性,多长时间唤醒都有。
我也按照那个代码改的,就是有时不好使,可能还是哪块没理解头。
能请教下CadDetected是什么情况下来吗?
回复

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4471
金钱
4471
注册时间
2013-4-22
在线时间
335 小时
发表于 2020-9-29 13:41:39 | 显示全部楼层
aozhouduwang 发表于 2020-9-29 10:42
完整能用的代码我这边也有,发送接收 显性隐性,多长时间唤醒都有。
我也按照那个代码改的,就是有时不 ...

也就是获取前导符关联后得的的信号,得到后才可以转成正常的接收
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2020-6-19
在线时间
9 小时
发表于 2020-9-29 14:12:07 | 显示全部楼层
aozhouduwang 发表于 2020-9-29 10:40
CADdone是在检测时间内检测到有效前导码,那CadDetected呢?
发送端是在不停循环的发送前导码,

打反了,CADdone是检测完成,CADdetected是指在检测时间内检测到了有效前导码。发送端前导码可以设置长一点,接收端应该会进CADdetected,再根据发送接收时间进行调整,可以中断打印下状态寄存器内容看看是否是CADdetected。假如你1s进行一次CAD(CADinit),都会立马进CADdone的。要在他这段时间内发送含前导码的数据包才可以进CADdetetcted。
回复

使用道具 举报

29

主题

134

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1240
金钱
1240
注册时间
2013-1-11
在线时间
430 小时
 楼主| 发表于 2020-9-29 17:35:26 | 显示全部楼层
本帖最后由 aozhouduwang 于 2020-9-29 17:41 编辑
17719491105 发表于 2020-9-29 14:12
打反了,CADdone是检测完成,CADdetected是指在检测时间内检测到了有效前导码。发送端前导码可以设置长一 ...

是的,只要CAD(CADinit),会立马进CADdone。
发送端主要代码如下:
  1. WriteRfReq( SX127X_LR_OPMODE, 0x80 | RFLR_OPMODE_STANDBY );//在Lora通信模式状态下,收发器进入空闲模式.
  2.     WriteRfReq( SX127X_LR_PREAMBLEMSB, 0);//前导码MSB高字节 15:8
  3.     WriteRfReq( SX127X_LR_PREAMBLELSB, 6);//前导码LSB低字节 7:0
复制代码

  1. Boolean RfSendData(uchar *cData, uchar cLen)
  2. {
  3.     unsigned int cnt = 0;
  4.     if(!cLen)
  5.             return FALSE;

  6.     WriteRfReq( SX127X_LR_PAYLOADLENGTH, 2);//有效载荷字节长度,
  7.     WriteRfReq( SX127X_LR_FIFOADDRPTR, 0x00);
  8.     WriteRfReq( SX127X_LR_FIFOTXBASEADDR, 0x00);

  9.     WriteRfData( SX127X_LR_FIFO,cData, cLen);//向FIFO写入数据
  10.     WriteRfReq( SX127X_LR_IRQFLAGS, 0xff);//清SX1278中断标志
  11.     WriteRfReq( SX127X_LR_IRQFLAGSMASK, ~(RFLR_IRQFLAGS_TXDONE));//允许TXDONE中断,而屏蔽其他中断.
  12.     WriteRfReq( SX127X_LR_DIOMAPPING1, RFLR_DIOMAPPING1_DIO0_01 );
  13.     WriteRfReq( SX127X_LR_OPMODE, 0x80 | RFLR_OPMODE_TRANSMITTER );//进入发送模式.
复制代码
每隔300ms发送一次,总工发送8S,假如接收1s进一次CAD,那应该是可以有CADdetetcted。但实际是很多次有可能会进入一次CADdetetcted。

从机一直在CAD模式,主机一直不停的发,也是偶尔才能进去。想不明白为什么。


中断打印状态标志,我是在线仿真打断电看的效果


用户名是微信吗,可以加一下吗
回复

使用道具 举报

29

主题

134

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1240
金钱
1240
注册时间
2013-1-11
在线时间
430 小时
 楼主| 发表于 2020-9-29 17:40:25 | 显示全部楼层
三叶草 发表于 2020-9-29 13:41
也就是获取前导符关联后得的的信号,得到后才可以转成正常的接收

从机一直在CAD模式,主机不停的发送隐含报头,为什么会收不到CADdetected呢?只是偶尔能进去一次。
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2020-6-19
在线时间
9 小时
发表于 2020-9-29 18:00:54 | 显示全部楼层
aozhouduwang 发表于 2020-9-29 17:35
是的,只要CAD(CADinit),会立马进CADdone。
发送端主要代码如下:

你这个300ms发一次,就是还没弄清楚CAD工作原理,去网上找找资料看一看,我收藏的找不到了。大概明白,从机1s进行一次CAD,发送端应该发送一包数据时长大于1.3s(未设置前导码时数据发送时间+从机检测时间)再来调这个东西。发送端不是1.3s发一次,是发送一包数据开始到发送中断为1.3s,发送手动10s发一次都可以,这样测试进CADdtetected好一点。
回复

使用道具 举报

29

主题

134

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1240
金钱
1240
注册时间
2013-1-11
在线时间
430 小时
 楼主| 发表于 2020-9-29 18:59:35 | 显示全部楼层
本帖最后由 aozhouduwang 于 2020-9-29 19:22 编辑
17719491105 发表于 2020-9-29 18:00
你这个300ms发一次,就是还没弄清楚CAD工作原理,去网上找找资料看一看,我收藏的找不到了。大概明白,从 ...
也就是说,发送多长时间发送一次无所谓,主要是发送一包的时间要满足要求。


微信截图_20200929185610.png

按照这个算出来,
发送的时间  LoRa数据包时间 = 前导码时间 + 数据包传输时间 = 51.71ms。那如果我从机在51ms以内(会留冗余) CADinit一次  就可以CADdone和CADdetected???
回复

使用道具 举报

29

主题

134

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1240
金钱
1240
注册时间
2013-1-11
在线时间
430 小时
 楼主| 发表于 2020-9-29 19:26:59 | 显示全部楼层
17719491105 发表于 2020-9-29 18:00
你这个300ms发一次,就是还没弄清楚CAD工作原理,去网上找找资料看一看,我收藏的找不到了。大概明白,从 ...

还有个问题,我检测到CADdone,如果没有CADdetected,会隔4ms再次RfEnterCADMode();,这个4ms应该满足发送的51ms包时长,为什么还是进不去呢?
  1. void OnCadTxRxDoneEvent(void)
  2. {
  3.         unsigned char RfIsrState;//RF中断状态字

  4.         __disableInterrupts();
  5.         RfIsrState = ReadRfReq(SX127X_LR_IRQFLAGS);
  6.         __enabledInterrupts();
  7.    
  8.         if(RfIsrState & RFLR_IRQFLAGS_CADDONE)
  9.         {
  10.                 __disableInterrupts();
  11.                 WriteRfReq(SX127X_LR_IRQFLAGS, RFLR_IRQFLAGS_CADDONE);        //清除此中断标志
  12.                 __enabledInterrupts();
  13.                 if(!(RfIsrState & RFLR_IRQFLAGS_CADDETECTED))  //没有检测有效的CAD
  14.                 {
  15.             __disableInterrupts();
  16.             if(0==rfState.flag.firstCadTestFlag)
  17.             {
  18.                                 rfState.flag.firstCadTestFlag=1;
  19. <font size="5">                                Delay_ms(4);
  20.                                 RfEnterCADMode();</font>
  21.             }
  22.             else
  23.             {
  24.                                 RfEnterLowPwrMode();
  25.             }
  26.             __enabledInterrupts();
  27.                 }
复制代码


回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2020-6-19
在线时间
9 小时
发表于 2020-9-30 09:30:01 | 显示全部楼层
aozhouduwang 发表于 2020-9-29 19:26
还有个问题,我检测到CADdone,如果没有CADdetected,会隔4ms再次RfEnterCADMode();,这个4ms ...

CAD是检测前导码,你6个前导码假如10ms,你从机就要10ms检测一次。你可以设置255个前导码(0x20寄存器1,弄个1,2s一次便于观察)。计算下时间,保证发送前导码时间大于等于检测间隔,才能保证进入CADdetected。你51ms一次CAD,那就是51ms有一次CADdone,可以在CADdetected中切到接收模式加些标志,保证数据接收完成前不要从接收模式切到CAD模式。这些你查下CAD原理或者空中唤醒,能搞清楚工作过程。
回复

使用道具 举报

29

主题

134

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1240
金钱
1240
注册时间
2013-1-11
在线时间
430 小时
 楼主| 发表于 2020-9-30 11:18:17 | 显示全部楼层
17719491105 发表于 2020-9-30 09:30
CAD是检测前导码,你6个前导码假如10ms,你从机就要10ms检测一次。你可以设置255个前导码(0x20寄存器1, ...

大概明白了,我发送和接收现在设置的前导码时间是一样的,就有可能检测不到CADdetected。所以发射设置51ms的 Time of Air。所以接收要大于51ms。
在CADdetected中有保护,不在切换CAD模式。
回复

使用道具 举报

29

主题

134

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1240
金钱
1240
注册时间
2013-1-11
在线时间
430 小时
 楼主| 发表于 2020-10-22 11:18:01 | 显示全部楼层
调通了,问题出在主机端,主机要不停的发送前导码,之前中间有几百ms的延时,所以导致从机不进CADdetected
回复

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2019-8-19
在线时间
22 小时
发表于 2020-10-22 14:49:31 | 显示全部楼层
aozhouduwang 发表于 2020-10-22 11:18
调通了,问题出在主机端,主机要不停的发送前导码,之前中间有几百ms的延时,所以导致从机不进CADdetected

楼主能加个联系方式请教一下吗,最近也在调CAD。qq404743046
回复

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2019-8-19
在线时间
22 小时
发表于 2020-10-22 15:07:47 | 显示全部楼层
aozhouduwang 发表于 2020-10-22 11:18
调通了,问题出在主机端,主机要不停的发送前导码,之前中间有几百ms的延时,所以导致从机不进CADdetected

还有一个问题就是,主机不停地发,从机一旦进入caddetected,就不能再发这个时间你怎么掌握
回复

使用道具 举报

29

主题

134

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1240
金钱
1240
注册时间
2013-1-11
在线时间
430 小时
 楼主| 发表于 2020-10-22 19:04:21 | 显示全部楼层
从机进入caddetected,主机也还在一直发前导码,此时从机进入隐性模式,判断前导码是否正确,正确进入显性模式。
回复

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2019-8-19
在线时间
22 小时
发表于 2020-10-23 09:04:05 | 显示全部楼层
aozhouduwang 发表于 2020-10-22 19:04
从机进入caddetected,主机也还在一直发前导码,此时从机进入隐性模式,判断前导码是否正确,正确进入显性 ...

老铁,你的信道频率轮询怎么做的啊
回复

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2019-8-19
在线时间
22 小时
发表于 2020-10-23 11:47:48 | 显示全部楼层
aozhouduwang 发表于 2020-10-22 19:04
从机进入caddetected,主机也还在一直发前导码,此时从机进入隐性模式,判断前导码是否正确,正确进入显性 ...

老铁,还有一个问题就是,我的DIO0映射TXDONE,RXDONE,CADDONE,都只能进行一次完整的中断判断。等进行下个循环到来的时候,我的DIO0就不能拉高。无法进入中断,这是为什么。
回复

使用道具 举报

29

主题

134

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1240
金钱
1240
注册时间
2013-1-11
在线时间
430 小时
 楼主| 发表于 2020-10-23 15:05:47 | 显示全部楼层
本帖最后由 aozhouduwang 于 2020-10-23 15:08 编辑

信道频率轮询 什么意思
中断是不是没清? 我没碰到下次不进中断问题。
你看我上面贴的程序也能看个大概了。
  • if(RfIsrState & RFLR_IRQFLAGS_CADDONE)
  •         {
  •                 __disableInterrupts();
  •                 WriteRfReq(SX127X_LR_IRQFLAGS, RFLR_IRQFLAGS_CADDONE);
  • 判断到有中断发生,先清中断标志。

回复

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2019-8-19
在线时间
22 小时
发表于 2020-10-23 15:37:26 | 显示全部楼层
aozhouduwang 发表于 2020-10-23 15:05
信道频率轮询 什么意思
中断是不是没清? 我没碰到下次不进中断问题。
你看我上面贴的程序也能看个大概了 ...

就是433.434.435这样,频点递增切换
回复

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2019-8-19
在线时间
22 小时
发表于 2020-10-23 16:43:35 | 显示全部楼层
aozhouduwang 发表于 2020-10-23 15:05
信道频率轮询 什么意思
中断是不是没清? 我没碰到下次不进中断问题。
你看我上面贴的程序也能看个大概了 ...

完成了,CAD模式,扫描,频点切换,谢谢啦,老铁
回复

使用道具 举报

0

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2019-2-18
在线时间
35 小时
发表于 2021-1-26 11:07:42 | 显示全部楼层
aozhouduwang 发表于 2020-10-22 11:18
调通了,问题出在主机端,主机要不停的发送前导码,之前中间有几百ms的延时,所以导致从机不进CADdetected

你好,前导码不是设置完,发数据就会自带的吗,中间还能加延时?
回复

使用道具 举报

29

主题

134

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1240
金钱
1240
注册时间
2013-1-11
在线时间
430 小时
 楼主| 发表于 2021-1-26 14:41:37 | 显示全部楼层
木缺木 发表于 2021-1-26 11:07
你好,前导码不是设置完,发数据就会自带的吗,中间还能加延时?

就是不停的发送隐性数据包。
回复

使用道具 举报

0

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2019-2-18
在线时间
35 小时
发表于 2021-1-29 10:36:02 | 显示全部楼层
楼主你好,我老是收不到CAD detected中断,能不能借下这部分代码看下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 12:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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