基站主要 接收同步节点发来的同步信号,代码里定义为S信息。 以及标签节点发来的定位信号,代码中定义为T信号。

代码中使用中断以及帧过滤功能,对模块只接收自己关心设定好的信息,通过中断告知上层,而不是长时间轮训方式。

帧过滤参考博文:https://www.cnblogs.com/tuzhuke/p/10503052.html

如下为基站核心代码:

1 使能接收中断

dwt_setinterrupt(DWT_INT_RFCG | (DWT_INT_ARFE | DWT_INT_RFSL | DWT_INT_SFDT | DWT_INT_RPHE | DWT_INT_RFCE | DWT_INT_RFTO /*| DWT_INT_RXPTO*/), );

2 接收信息并记录自己的接收时间戳和 信息发送的时间戳

switch(msg_f->messageData[])
{
case 'S':
//save seq
//save rx timestamp
last_rx_ts = get_rx_timestamp_u64();//获取接收时间戳 // last_rx_ts =0x123456789A;测试数字
//对64位数据移位成两个数字,用来液晶显示
l8_timestamp = last_rx_ts&0xFF;
h32_timestamp= last_rx_ts>>; sprintf(lcd_display_str, "%08X%02X",h32_timestamp,l8_timestamp);
OLED_ShowString(,,(uint8_t *)lcd_display_str); //toggle LED 指示接收成功
ledValue = ~ledValue;
GPIO_WriteBit(GPIOA, GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3, ledValue); //save delayed tx timestamp
//获取信息中Sync 节点的发送时间戳
//信息起始位置位2,分别在2 3 4 5 6
last_rx_ts=;
final_msg_get_ts(&msg_f->messageData[],&last_rx_ts);
//对64位数据移位成两个数字,用来液晶显示
l8_timestamp = last_rx_ts&0xFF;
h32_timestamp= last_rx_ts>>; sprintf(lcd_display_str, "%08X%02X",h32_timestamp,l8_timestamp);
OLED_ShowString(,,(uint8_t *)lcd_display_str);
break;

上述代码只是简单接收了同步节点发送来的时间信号,通过液晶显示出来,与同步节点显示对比,实际需要做的工作还有很多,总结如下

3 基站接收逻辑功能

除了上面部分,需要实现的逻辑

A. 由原理部分得知,需要接收到连续两个同步信号以及中间的标签定位信号 才能算一个完整的接收序列。

对于接收同步节点信号S来说,需要记录前后两次同步信号的sequence号,两者只能差1,如果出现丢包,需要做丢弃处理

B 对于定位信号,同样由原理部分,定位信号应该夹在同步信号之内,而且需要记录定位信号的sequence。

C 当收到一个同步信号S后,开始接受序列启动,下一个应该接收的信号是定位信号T,如果有,再下一个是其它节点的定位信号T。最后是同步信号S, 标记一个完整的接收序列,通过串口或者网口送给定位引擎。 同时需要将最后一个同步信号用作下一个序列的开始。

最新文章

  1. CSS3之新UI方案
  2. appstore不能登陆
  3. IOS学习笔记25—HTTP操作之ASIHTTPRequest
  4. (41) Aeroo 模板设计基础教程
  5. [python]逆水行舟不进则退(1)
  6. 每天一道LeetCode--371. Sum of Two Integers
  7. css3学习笔记之图片
  8. WPF界面设计技巧(10)-样式的继承
  9. PE文件格式详解(下)
  10. 影响国内WinCE7发展的最大障碍是没有D版下载
  11. Android与javascript中事件分发机制的简单比较
  12. CentOS 7 安装Maven
  13. 03-django模型(1)
  14. Java过滤器Filter
  15. 微信小程序学习 一
  16. HZAU2018年十大阅读之星演讲稿
  17. 快速修改数据库日志的增长修改为50M[转]
  18. mysql8基本配置,差点被各种坑蒙圈
  19. Atlantis(POJ1151+线段树+扫描线)
  20. margin外边距问题

热门文章

  1. Quartz.Net—初识
  2. MySQL常用的系统函数
  3. Centos 安装PHP-redis扩展
  4. flutter从入门到精通二
  5. Python之数据处理-2
  6. WebApi 身份认 Basic基础认证
  7. 利用python爬取王者荣耀英雄皮肤图片
  8. 采用localStorage做定时缓存
  9. linux 下调用wps 注意
  10. 如何给SAP云平台的账号分配Leonardo机器学习服务的实例