DW1000的API函数库中,在32位单片机移植使用,并不需要特殊处理

而在8位单片机中使用,需要注意以下几点

1、单片机大小端(一般都是大端)

2、数据移位问题(库函数内有一些涉及32位的移位处理)

3、const 与 code 的问题

4、变量命名问题 不能出现 data,API中有data,需要修改为dat,以规避命名问题

主要更改点有以下几点

以DW1000 API版本号 V04.00.06 以例

2、数据移位问题

主要涉及文件为:decadriver\deca_device.c

涉及的函数为:void dwt_configure(dwt_config_t *config)

 pdw1000local->sysCFGreg |= (SYS_CFG_PHR_MODE_11 & (config->phrMode << SYS_CFG_PHR_MODE_SHFT));需要修改为
regval = config->phrMode;regval <<= SYS_CFG_PHR_MODE_SHFT;regval &= SYS_CFG_PHR_MODE_11;pdw1000local->sysCFGreg |= regval;将数据进行分段移位处理

其内部有一段配置通道号等参数的

uint32 TempRegVal;#if MCU_32BIT  //8位机这里处理不一样    regval =  (CHAN_CTRL_TX_CHAN_MASK & (chan << CHAN_CTRL_TX_CHAN_SHIFT)) | // Transmit Channel(CHAN_CTRL_RX_CHAN_MASK & (chan << CHAN_CTRL_RX_CHAN_SHIFT)) | // Receive Channel(CHAN_CTRL_RXFPRF_MASK & (config->prf << CHAN_CTRL_RXFPRF_SHIFT)) | // RX PRF((CHAN_CTRL_TNSSFD | CHAN_CTRL_RNSSFD) & (nsSfd_result << CHAN_CTRL_TNSSFD_SHIFT)) | // nsSFD enable RX&TX(CHAN_CTRL_DWSFD & (useDWnsSFD << CHAN_CTRL_DWSFD_SHIFT)) | // Use DW nsSFD(CHAN_CTRL_TX_PCOD_MASK & (config->txCode << CHAN_CTRL_TX_PCOD_SHIFT)) | // TX Preamble Code(CHAN_CTRL_RX_PCOD_MASK & (config->rxCode << CHAN_CTRL_RX_PCOD_SHIFT)) ; // RX Preamble Codedwt_write32bitreg(CHAN_CTRL_ID, regval) ;// Set up TX Preamble Size, PRF and Data Ratepdw1000local->txFCTRL = ((config->txPreambLength | config->prf) << TX_FCTRL_TXPRF_SHFT) | (config->dataRate << TX_FCTRL_TXBR_SHFT);dwt_write32bitreg(TX_FCTRL_ID, pdw1000local->txFCTRL);
#else//第一段数据处理regval =  (CHAN_CTRL_TX_CHAN_MASK & (chan << CHAN_CTRL_TX_CHAN_SHIFT)) | // Transmit Channel(CHAN_CTRL_RX_CHAN_MASK & (chan << CHAN_CTRL_RX_CHAN_SHIFT)); // Receive ChannelTempRegVal = config->prf;TempRegVal <<= CHAN_CTRL_RXFPRF_SHIFT;TempRegVal &= CHAN_CTRL_RXFPRF_MASK;regval |= TempRegVal;TempRegVal = nsSfd_result;TempRegVal <<= CHAN_CTRL_TNSSFD_SHIFT;TempRegVal &= (CHAN_CTRL_TNSSFD | CHAN_CTRL_RNSSFD);regval |= TempRegVal;TempRegVal = useDWnsSFD;TempRegVal <<= CHAN_CTRL_DWSFD_SHIFT;TempRegVal &= CHAN_CTRL_DWSFD;regval |= TempRegVal;TempRegVal = config->txCode;TempRegVal <<= CHAN_CTRL_TX_PCOD_SHIFT;TempRegVal &= CHAN_CTRL_TX_PCOD_MASK;regval |= TempRegVal;TempRegVal = config->rxCode;TempRegVal <<= CHAN_CTRL_RX_PCOD_SHIFT;TempRegVal &= CHAN_CTRL_RX_PCOD_MASK;regval |= TempRegVal;dwt_write32bitreg(CHAN_CTRL_ID, regval) ;//第二段数据处理regval = config->txPreambLength | config->prf;regval <<= TX_FCTRL_TXPRF_SHFT;pdw1000local->txFCTRL = regval;regval = config->dataRate;regval <<= TX_FCTRL_TXBR_SHFT;pdw1000local->txFCTRL |= regval;dwt_write32bitreg(TX_FCTRL_ID, pdw1000local->txFCTRL);
#endif

里面直接是使用数据移位的处理方法,这种方式在32位的单片机,是没有任何问题的,在8位单片机,只要移位数据超过16位,则会出现问题

需要修改为先使用一个32位的变量,逐一进行赋值处理

3、const 与 code 问题

8位单片机上,使用const貌似不能把变量变成ROM代码,只有使用code才能解决

主要涉及修改文件  decadriver\deca_params_init.c

把整个文件中的 const 修改为 code

同时修改 decadriver\deca_param_types.h 文件中的 const 为 code

4、修改 data 命名为 dat

文件:decadriver\deca_device.c

uint32 _dwt_otpprogword32(uint32 data, uint16 address);

修改为

uint32 _dwt_otpprogword32(uint32 dat, uint16 address);

UWB-DW1000 在8位单片机上移植使用相关推荐

  1. 8位单片机(51 STC8)C语言处理32位unsigned long型数据之计算出错

    [[本文发布于https://blog.csdn.net/Stack_/article/details/129259560,未经许可禁止转载,转载须注明出处]] 一.问题描述 入门51没多久后就主攻3 ...

  2. uCOS-II在51单片机上的移植

    uCOS-II在51单片机上的移植 约定:文中所写的硬件堆栈或系统堆栈是指51单片机SP指针所指向的堆栈空间,而用户堆栈或任务堆栈是指用来保存任务状态为每个任务分配的堆栈空间. 前一段时间一直在学习U ...

  3. avr 运行 linux,如何在8位AVR单片机上运行Linux?

    外国文章翻译,代码国内无法下载,但是文章可供一看 我们经常可以看到初学者在单片机论坛中询问他们是否可以在他们微不足道的小的8位微机中运行Linux.这些问题的结果通常是带来笑声.我们也经常看到,在Li ...

  4. 【转】将 Linux 应用程序移植到 64 位系统上

    原文网址:http://www.ibm.com/developerworks/cn/linux/l-port64.html 随着 64 位体系结构的普及,针对 64 位系统准备好您的 Linux® 软 ...

  5. POWERLINK协议源码(最新)在stm32单片机上的移植指南

    最近着了powerlink的道,连续几晚十二点前没睡过觉.不得不说兴趣这东西劲太大了,让人睡不着.喜欢上研究POWERLINK,最新版的源码结构挺清晰的,移植并测试了嵌入式linux作为从站和电脑主站 ...

  6. TCP/IP协议栈在MSP430单片机上的实现

    引言 随着信息技术的不断发展,以及人们对日常生活舒适度.方便度要求的提高,信息家电.智能仪表等产品越来越频繁的出现在我们的生活当中:人们也越来越热衷于把家电.仪表等设备连接到Internet 中,从而 ...

  7. uIP TCP/IP协议栈在51系列单片机上的应用

    uIP 协议栈是一种免费的可实现的极小的TCP/IP协议栈,可以使用于由8位或16位微处理器构建的嵌入式系统.本文分析了uIP协议栈的结构和应用接口,并讨论了如何将其应用到51系列单片机上. 关键字: ...

  8. 嵌入式入门-32位单片机简介

    一.单片机 参见单片机_百度百科 这是单片机的基本介绍,千篇一律搬运工的工作就不打算浪费时间了,就从目前学习到的知识面总结一下单片机吧,当然,入行不到两个月菜狗一枚,不正之处请指正. 单片机,也就是微 ...

  9. XMOVE3.0手持终端——软件介绍(五):在2KB内存的单片机上实现的T9中文输入法

    编者注: X-MOVE是作者在业余时间于2010年6月份启动的以运动传感开发,算法和应用的平台,目前已经发展了三个版本,第四版的开发接近尾声.发布在博客园仅为交流技术,不存在商业目的,作者保留一切权利 ...

最新文章

  1. python3 中 布尔 bool 类型转换
  2. 企业应用架构模式 读书笔记
  3. 使用反射处理protobuf数据结构
  4. 搜索引擎学习(六)Query的子类查询
  5. Android之TrafficStats实现流量实时监测
  6. java圆形泳池问题_Java实现 LeetCode 778 水位上升的泳池中游泳(二分+DFS)
  7. 四种依恋类型_“我值得被爱吗?”| 如何在亲密关系中培养安全型依恋
  8. python中如何计算集合的长度_Python如何计算序列长度 python dataframe中元素如何统计?...
  9. python从入门到精通百度云资源-Python从入门到精通(资源汇总)
  10. 热传导方程的差分解法c语言,九热传导方程的差分解法.PPT
  11. mongoDB快速入门
  12. Vision-and-Language Navigation: Interpreting visually-grounded navigation instructions in real env
  13. 中国有句俗语叫“三天打鱼两天晒网”,某人从1990年1月1日起开始“三天打鱼两天晒网”,即打鱼三天,然后再晒网两天。问这个人在以后的某一天中是在打鱼还是在晒网
  14. 教你怎么使用python批量下载图片
  15. 2006年星座运势 天蝎座
  16. 台式电脑Window系统使用耳机的喇叭和麦克风方法
  17. php的内部方法编码方式,字符集字符编码以及PHP中的一些转码方法
  18. uedit使用技巧2
  19. 安装virtualbox快完成时立即回滚,并提示安装出现严重错误
  20. 写一个各向异性/各向同性高斯滤波器

热门文章

  1. pandas取出特定行列数据
  2. 互联网的996与华为的惊世骇俗
  3. svg实现多个元素拖拽
  4. ASM磁盘空间假装耗尽,ORA-15041: diskgroup space exhausted
  5. 两点之间最短距离:贪心算法 (DIJKSTRA算法)
  6. 如何提升自己的打字速度?
  7. 简单几步骤导出网易考拉海购中多个商品的图片
  8. Java计算标会(会子)利率
  9. Python基础——魔法方法(二)
  10. 如何快速取消关注B站(哔哩哔哩)所有up主?(Javascript实现)