介绍一下开发环境及关键字:
MCU: S32K314
MCAL: EB配置,使用NXP提供的MCAL ,V2.0.3, AS4.4.0
IAM20381:加速计 X,Y,Z 轴 ±2g,4g,8g,16g 16-LGA(3x3)
I2C : 主机模式,与IAM20381连接,Port配置为开漏
I2C的数据传输方式先使用中断来传输,后续再更新为DMA,配置如下:
需要开启I2C的接收发送中断回调和错误回调,以便应用确认当前的传输状态
下面的I2C超时DEM的接口我们先不考虑,如果需要记录DTC可以打开;
选择好参考时钟,速率会自动帮你换算;
这里我们选择48M 64分频,得到125k的速率;
这个速率后期需要再根据MCU的时钟树来分频得到我们想要的大小,这里先不微调;
其他的参数可以根据对应调试芯片的参数来动态调整;
下面的高速模式,从机模式,10bit地址,先不配置后续更新;
如果使用autosar配置工具,请使能I2C中断:
中断标号:
S32K3XXRM.pdf S32K3xx_interrupt_map.XLSX
或者在Platform 使能I2C中断:
IAM-20381是一款三轴运动跟踪加速计
资料在官网,有提供官网例程,这里我们将官方提供的驱动移植到我们的设备上;
手册:ds-000216-iam-20381-typ-v1.0.pdf (tdk.com.cn)
例程:Software Downloads | InvenSense Developers (tdk.com) 找到如下卡片:
点击上述框内开始下载工程压缩包:eMD-SmartMotion-IAM20381-1.0.0-MP
下载完毕解压缩,工程目录如下:
Streamlined_eMD_IAM20381_Software_Guide.pdf : 软件手册,主要是对基于EVB的开发的说明和对3个例程的功能解释;
驱动路径如下: EMD-CoresourcesInvnDevicesDriversIAM20381
主要实现4个接口函数:
延时函数:
I2C写数据和读数据函数:
通过 SetupInvDevice注册
延时函数利用autosar的WaitEvent,GetEvent,ClearEvent实现
通过WaitEvent的等待时间来控制延迟的时间,
通过配置创建一个Extended类型 的task,创建两个事件,1.闹钟形式1ms触发一次处理数据,2触发事件等待初始化20381,
延时函数实现:
I2C接口实现:
I2C死锁问题:
I2C死锁一般发生在系统初始化、mcu软复位,硬件线路电平不稳定等情况下,从机设备将SDA拉低,而SCL保持为高,总线一直被占用,主机只能被动等待,无法对从及设备做控制,这时需要解锁;
1. 在初始化I2C之前,将SDA SCL初始化为IO,拉低拉高10次,解除锁定;
2.当产生I2C_MASTER_EVENT_PIN_LOW_TIMEOUT事件时,我们需要将i2c重新解锁;
我们需要配置如下参数:
设置为12个周期 :
10bit地址 + 1bit R/W + 1bit ACK
当产生I2C_MASTER_EVENT_PIN_LOW_TIMEOUT事件时,可以认为发生了死锁,我们需要在
I2C_CALLBACK 中去检查事件,当发生事件,则SetEvent在task AppTask_Sensor中处理;
初始化函数实现:
例程选择的23081的i2c pin配置为推挽输出,这里我们需要修改一下pin设置为开漏输出根据20381手册:
新增寄存器设置pin函数:
在inv_iam20381_init中最后一步添加:
到此这篇max30102使用(max30102使用AT指令)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/67311.html