一、硬件准备

            (1)开发板和软件参看 Nordic NRF51822 从零开始系列(一)开发环境的搭建
            (2)mpu6050模块

二、前置知识

            (1)IIC通信协议    (最好记住,以后会有很大用处的)

三、移植所需要的文件

原始文件和移植完成的文件

            (1)MPU6050的DMP文件(本例程使用的是正点原子例程中分离出来的)
                
            (2)nrf_51822 官方例程库中的几个文件
                    1:mpu6050.h和mpu6050.c
                    2:twi_master.h 和 twi_sw_master.c (模拟IIC)或者使用(twi_hw_master.c)
                            两个选一既可以,官方已经封装好了接口了,所以没什么区别,本例程使用模拟
                   3:nrf_delay.h 和 nrf_delay.h
                    上面的文件都可以在例程包里的Source->ext-sensors 和Include->ext-sensors中找到
                   4: twi_master_config.h IIC配置文件 可以在例程文件夹nrf51822文件下搜索既可以找到

四、移植过程梳理

(1)明确要移植什么?

                        1、IIC通信接口
                        2、对inv_mpu6050添加部分函数方便使用

(2)移植到哪里?

                    mpu6050官方的DMP驱动c文件中给出了以下内容
                
                明显的,我们移植驱动理论上只要干一件事情就可以了:将i2c_write和i2c_read两个函数重新定向就行了
                
                这是这两个函数的额声明。

(3)移植过程

                   1:将上诉所所说的几个文件包含进工程并且添加对应的编译搜索路径
                   2:打开mpu6050.h 和mpu6050.c
                  在头文件中添加声明,在c文件中添加以下两个函数
/*函数功能:mpu6050 写寄存器
//参数列表
/// devic_address:设备地址 register_address:寄存器地址,len:数据长度 data:数据头部指针*/
bool mpu6050_write(uint8_t device_address, uint8_t register_address, uint8_t len, uint8_t *data); /*函数功能:mpu6050 读寄存器
//参数列表
/// devic_address:设备地址 register_address:寄存器地址,number_of_bytes:数据长度 data:数据buf指针*/
bool mpu6050_read(uint8_t device_address, uint8_t register_address, uint8_t number_of_bytes, uint8_t *destination);

bool mpu6050_write(uint8_t device_address, uint8_t register_address, uint8_t len, uint8_t *data) //mpu6050
{
uint8_t w2_data[len+1];
for(int i=0;i<len+1;i++)
{
if(i==0)
w2_data[0] =register_address;
else
w2_data[i] = *(data+i-1);
} return twi_master_transfer((device_address<<1)|TWI_WRITE_BIT, w2_data, len+1, TWI_ISSUE_STOP);
} bool mpu6050_read(uint8_t device_address, uint8_t register_address, uint8_t number_of_bytes, uint8_t *destination)
{
bool transfer_succeeded;
transfer_succeeded = twi_master_transfer((device_address<<1)|TWI_WRITE_BIT, &register_address, 1, TWI_DONT_ISSUE_STOP);
transfer_succeeded &= twi_master_transfer((device_address<<1)|TWI_READ_BIT, destination, number_of_bytes, TWI_ISSUE_STOP);
return transfer_succeeded;
}
              3、在inv_mpu.c和inv_mpu_dmp_driver.c中包含进去,用这两个函数重定向i2cwrite和i2cread既完成了大体工作
              4、添加自定义的函数,本例程直接使用了正点原子添加的几个函数,添加地方在inv_mpu.c文件最下方,根据编译器提示错误的地方稍作修改既可以使用
              5、在main文件中添加inv_mpu.h,twi_master.h,并在主函数依次完成
                    iic初始化: twi_master_init();
                    mpu6050初始化: while(mpu_dmp_init()); 使用while循环确保初始化成功
                    调用:mpu_dmp_get_data()获取欧拉角,角速度,加速度(该函数为自己添加的函数那一部分)
             6、通过串口查看获得的数据
                    
            

Nordic NRF51822 从零开始系列(外部设备片—MPU6050DMP驱动的移植)的更多相关文章

  1. Nordic NRF51822 从零开始系列(一)开发环境的搭建

    硬件准备     (1)nrf51822 开发板一块(此处使用的是青云系列的,自带jlijnk ob+usb串口芯片)或者使用nrf51822模块+jlink_ob                 ( ...

  2. Spring Cloud 系列之 Stream 消息驱动(二)

    本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Stream 消息驱动(一) 本篇文章讲解 Stream 如何实现消息分组和消息分区. 消息分组 如果有多个消息消费者 ...

  3. PCIE_DMA实例四:xapp1052在Xilinx 7系列(KC705/VC709)FPGA上的移植

    PCIE_DMA实例四:xapp1052在Xilinx 7系列(KC705/VC709)FPGA上的移植 一:前言 这段时间有个朋友加微信请求帮忙调试一块PCIe采集卡.该采集卡使用xilinx xc ...

  4. WIFI驱动的移植 realtek 8188

    一般我们拿到的android源代码中wifi应用层部分是好的, 主要是wifi芯片的驱动要移植并添加进去. wifi驱动的移植, 以realtek的8188etv为例到官网下载相应的驱动, 解压后可以 ...

  5. 【Linux高级驱动】触摸屏驱动的移植

    触摸屏驱动的移植 流程 注意:看框架图 1.添加input.c组件 Device Drivers  ---> Input device support  --->  Generic inp ...

  6. Android wifi驱动的移植 realtek 8188

    Android wifi驱动的移植 一般我们拿到的android源代码中wifi应用层部分是好的, 主要是wifi芯片的驱动要移植并添加进去. wifi驱动的移植, 以realtek的8188etv为 ...

  7. TQ2440平台上LCD驱动的移植

    参考: http://liu1227787871.blog.163.com/blog/static/205363197201242393031250/ http://blog.csdn.net/cum ...

  8. 后端开发实践系列之二——领域驱动设计(DDD)编码实践

    Martin Fowler在<企业应用架构模式>一书中写道: I found this(business logic) a curious term because there are f ...

  9. Beaglebone Black从零开始系列教程大汇总!

    谁都有做菜鸟的时候,菜鸟不可怕,怕的是没有人指引前进的方向!本系列文章将逐个阐述BBB各个功能模块的基本使用方法.现在中文的BBB资料太少,它们是本人从全世界互联网的各个角落收集.学习.亲自测试得到的 ...

随机推荐

  1. nginx做负载均衡时其中一台服务器挂掉宕机时响应速度慢的问题解决

    nginx会根据预先设置的权重转发请求, 若给某一台服务器转发请求时,达到默认超时时间未响应,则再向另一台服务器转发请求. 默认超时时间1分钟. 修改默认超时时间为1s: server { liste ...

  2. 【转载】ASP.NET MVC的过滤器【Filters】

    文章来自: http://www.cnblogs.com/HopeGi/p/3342083.html 这篇对Filters讲的很详细.正好我自己也不用写了,真的很棒的一篇文章 APS.NET MVC中 ...

  3. python下申明式的对象关系DB映射器--Pony

    之前看到了Sails.js的waterline提供了声明式的关系型对象与DB的映射器,惊为天人,可以说是极大地提升了效率. 利用waterline的对象关系模型,用户可以直接使用javascript语 ...

  4. Effective Java 第三版——58. for-each循环优于传统for循环

    Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...

  5. 云服务器 - 安装zookeeper单机环境

    由于电脑中病毒,被人当做肉鸡挖矿了...所以很多东西都要重装, 之前没有写过zk如何安装,所以安装的时候顺便来记录一下分享出来 第一步上传zk安装包到服务器,如图: 解压: tar -zxvf zoo ...

  6. 全面理解Javascript闭包和闭包的几种写法及用途【转】

    一.什么是闭包和闭包的几种写法和用法 1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点: 1. ...

  7. iOS之加载Gif图片

    Gif图片是非常常见的图片格式,尤其是在聊天的过程中,Gif表情使用地很频繁.但是iOS竟然没有现成的支持加载和播放Gif的类. 简单地汇总了一下,大概有以下几种方法: 一.加载本地Gif文件 1.使 ...

  8. mac 下 使用 java运行 class 文件 总是提示 “错误: 找不到或无法加载主类”的解决方法

    发现问题 切换到mac平台后,突然想写点程序运行在mac下,想到mac自带java,会方便好多.不过在这过程中遇到了麻烦: 总是提示 “错误: 找不到或无法加载主类” 工程结构 查了好久,终于找到原型 ...

  9. WebRTC信令控制简介与STUN, TURN服务器搭建

    本文将向大家介绍两个方面的知识: WebRTC信令控制 STUN/TURN服务器的搭建 在前面的文章中已经向大家介绍了如何构建信令服务器.但构建的信令服务器是如何工作的?哪些消息需要信令服务器控制和中 ...

  10. MVC的Membership

    摘自:http://stackoverflow.com/a/16734651/1616023 See the summaries below each quote for a quick answer ...