嗨,对话框中,
一个星期过去了,但是我不能在hrp_sensor项目中添加I2C。
首先,我学习了peripherals_demo,了解了一个项目的dg_configUSExxx和文件系统。
然后我转移到hrp_sensor项目,因为它启用ble函数,这是我的目标。
这是不容易理解的项目peripherals_demo,文件嵌套很深,main.c ->外围_setup.c——> demo_i2c.c .....
项目hrp_sensor很简单,只有2个文件。
但是,将I2C添加到hrp_sensor的简单工作被卡住了。
以下是我所遵循的步骤:
1.在custom_config_qspi.h
#定义dg_configUSE_HW_I2C 1
#定义dg_configI2C_ADAPTER 1
从platform_device.h中迁移代码,如下所示:
//-------------------------------------------------
#如果dg_configI2C_ADAPTER
I2C_BUS (I2C1)
I2C_SLAVE_DEVICE(I2C1, MAX30100, 0xAE, HW_I2C_ADDRESSING_7B, HW_I2C_SPEED_STANDARD);
I2C_BUS_END
#endif /* dg_configI2C_ADAPTER */
//---------------------------------------------------
include "ad_i2c.h" //——这定义了I2C_BUS()
2.c
注释掉platform_device.h——它是每个项目的公共文件,位于:\sdk\adapters\include
/ / # include“platform_devices.h”
# include“hw_i2c.h”
在外围_init函数中添加I2C init代码
//----------------------------------------------------------
//----hw init for I2C——
/ *
初始化I2C控制器在主模式与标准通信速度(100kb /s)和
*以7位寻址模式传输。
* /
Static const i2c_config CFG = {
。speed = HW_I2C_SPEED_STANDARD,
.mode = HW_I2C_MODE_MASTER,
.addr_mode = HW_I2C_ADDRESSING_7B,
};
hw_i2c_init (HW_I2C1 cfg);
将srand (OS_GET_TICK_COUNT ());//?
hw_i2c_disable (HW_I2C1);
hw_i2c_set_target_address (HW_I2C1 0 x7e);/ / max30100
hw_i2c_enable (HW_I2C1);
/ *
*设置地址在我们的情况下意味着我们将开始一些转移与新设备。对于这个
* reason it's good to reset abort source to start in clean state(避免有
* abort source set by previous transfer to other device),否则我们需要记住
*关于这在每一次转移前分别。
* /
hw_i2c_reset_abort_source (HW_I2C1);
//---------------------------------
当构建这个项目时,有一个错误:无法找到'ad_i2c.h' !Includes->hrp_sensor/sdk/adapters/include .h
怎么了?
是否有逐步添加I2C外围设备的指南/手册?
你能给我一个基于扩展I2C的hrp_sensor的项目吗?
谢谢
嗨jamesleo-konka,
1)在您的custom_config_qspi.h文件中的启用是正确的,所以您可以使用hw和qspi的适配器。
2)关于platform_devices.h文件,正如我在你的其他帖子中提到的,如果你有一个自定义的,这将被使用,而不是默认的。
3)支持站点上没有上传文件,然而你不必调用你在外围设置()函数中提到的函数。的
peri_init函数本质上是一个回调函数,其中存储了peri_setup()函数,如果该函数的指针不是NULL则调用该函数。所以在
你必须为I2C功能配置你的引脚,通常hw_gpio_configure()与传递的gpio_config数组一起使用
使用HW_GPIO_PINCONFIG MACRO作为每个引脚配置的参数。I2C hw的初始化将由I2C适配器完成,所以你
不需要在外设初始化期间显式地这样做(也就是说,如果您已经在platform_devices.h文件中正确定义了外部设备)
当调用hw_i2c_set_target_address()时,并不意味着正在启动i2c事务,您只是在设置i2c模块的目标寄存器,
当您使用可用的API启动事务时,模块将在总线上启动数据输出。例如,当你在peri_setup()函数中设置了你的引脚,并在platform_devices.h文件中声明了你的设备后,当然你已经启用了i2c适配器和驱动程序,你开始了一个事务,例如,使用以下命令从传感器读取一个字节:your_device's_handle = ad_i2c_open(your_device),然后ad_i2c_transact(your_device's_handle, address_to_read, size, out_buffer, size)。
关于编译器没有找到它的ad_i2c.h文件,我无法复制,eclipse找到ad_i2c.h文件,只要我把它添加到hrp_sensor_task.c文件,是目录sdk/适配器/包括在包括路径?
关于项目请求,很抱歉,目前没有基于I2C传感器的心率项目。
由于MT_dialog
嗨MT_Dialog,
感谢您的回复。
根据Dialog工程师的方法,我尝试在custom_config_qspi.h中初始化I2C适配器,但是在'ad_i2c.h'中失败。
奇怪的是'ad_i2c.h'不能包含在custom_config_qspi.h中,但是如果在main.c中使用是可以的!
所以我把代码移到main。c,它传递building。
在项目peripherals_demo中,GPIO端口/引脚已经初始化在外围设置()中,也在I2C: demo_i2c_init()中。
//-------------------------------------
空白demo_i2c_init(空白)
{
/ *
初始化I2C控制器在主模式与标准通信速度(100kb /s)和
*以7位寻址模式传输。
* /
Static const i2c_config CFG = {
。speed = HW_I2C_SPEED_STANDARD,
.mode = HW_I2C_MODE_MASTER,
.addr_mode = HW_I2C_ADDRESSING_7B,
};
hw_i2c_init (HW_I2C1 cfg);
将srand (OS_GET_TICK_COUNT ());
}
//--------------------------------------
似乎没有GPIO端口/引脚需要初始化。
顺便说一下,最后一行的功能是什么:srand(OS_GET_TICK_COUNT());?
我将检查I2C的adater代码,如ad_i2c_open (i2c_device_id dev_id), ad_i2c_transact,…
谢谢
嗨jamesleo-konka,
你不需要它,这是在外设演示中使用的,因为它使用rand()函数来填充它的写缓冲区中的随机数据(它把随机数据写到EEPROM中)。
由于MT_dialog