添加I2C功能比较困难

4个帖子/ 0新
最后一篇
jamesleo-konka
离线
最后一次露面:4年3个月前
加入:2017-01-22 02:42
添加I2C功能比较困难

嗨对话框,
一周已经消失了,但我不能在HRP_Sensor项目中添加I2C。
在开始时,我研究了PerInirewals_Demo并了解关于DG_Configusexxx和项目的文件系统。
然后我搬到了HRP_Sensor项目,因为它启用了BLE函数,即我的目标。
它不容易理解项目filipherals_demo,文件嵌套深,main.c - > periph_setup.c - > demo_i2c.c. ......
Project HRP_Sensor很简单,只有2个文件。
但是,困扰将I2C添加到HRP_Sensor中的简单工作。
这些是我跟随的步骤:
1.在custom_config_qspi.h中
#定义dg_configUSE_HW_I2C 1
#define dg_configi2c_adapter 1.

从platform_device.h迁移代码,像这样:
// -------------------------------------------------------
#if 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 * /
//---------------------------------------------------

包括“ad_i2c.h”// ---这定义了i2c_bus()

2.c
注释掉platform_device.h——这是每个项目的通用文件,位于:\sdk\适配器\include
/ / # include“platform_devices.h”

#include“hw_i2c.h”

在Periph_init Fuction中添加I2C Init代码
//----------------------------------------------------------
// ---- i2c的hw in ---
/ *
*以标准通信速度(100 kB / s)和初始化主模式I2C控制器初始化I2C控制器
*以7位寻址模式传输。
* /
Static const i2c_config CFG = {
.speed = hw_i2c_speed_standard,
.mode = hw_i2c_mode_master,
.ddr_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);

/ *
*在案例中设置地址意味着我们将使用新设备进行一些传输。为了这
*原因是重置中止源是良好的,以便在干净的状态下(以避免拥有
*中止源以先前传输到其他设备),否则我们需要记住
*在每次转移之前都在其次。
* /
hw_i2c_reset_abort_source(hw_i2c1);
// ------------------------------

构建此项目时,存在错误:找不到'ad_i2c.h'!- 但是在包括的包括,文件ad_i2c.h是:包括 - > hrp_sensor / sdk /适配器/包含
怎么了?

是否有用于通过步骤添加I2C围绕的指导/手册?
请您向我发送一个基于HRP_Sensor的项目,I2C扩展了吗?

谢谢

关键词:
设备:
mt_dialog.
离线
最后一次露面:5个月2周前
职员
加入:2015-06-08 11:34
嗨jamesleo-konka,

嗨jamesleo-konka,

1)您的custom_config_qspi.h文件中的启用是正确的,因此您可以使用qspi的hw和适配器。

2)关于platform_devices.h文件作为我的另一个帖子提到的,如果您有自定义,则将使用它而不是默认值。

3)支持站点上没有上传文件,但是你不需要调用你在peripher_setup()函数中提到的函数。的
Periph_Init函数本质上是一个回调,其中存储Periph_setup()函数,如果函数未为null的指针,则会调用并调用。所以在这方面
Periph_setup()函数您必须为I2C功能配置为I2C功能配置,通常HW_GPIO_CONFIGURE()用于传递的GPIO_CONFIG数组
作为每个引脚的电缆的参数,使用HW_GPIO_PINCONFIG宏。I2C HW的初始化将由I2C适配器完成您
不需要在外围设备初始化期间显式地做这些(如果你已经在platform_devices.h文件中正确地定义了外部设备)

当HW_I2C_SET_TARGET_ADDRESS()调用时,并不意味着I2C事务开始,您只需设置I2C模块的目标寄存器,
当您使用API的可用性启动事务时,模块将在总线上启动数据输出。例如,当你在pher_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)。

关于编译器找不到它的文件,我无法复制,我一旦将其添加到hrp_sensor_task.c文件时,Eclipse就查找了AD_I2C.H文件,是SDK /适配器/包含的目录在包括路径中?

关于项目请求,我很抱歉,但没有基于I2C传感器的心率项目。

谢谢mt_dialog.

jamesleo-konka
离线
最后一次露面:4年3个月前
加入:2017-01-22 02:42
嗨mt_dialog,

嗨mt_dialog,
感谢您的回复。
根据对话框的工程师的方法,我试图在custom_config_qspi.h中in init i2c适配器,但在'ad_i2c.h'失败。
它奇怪的是“ad_i2c.h”不能包含在custom_config_qspi.h中,但如果在main.c中使用,则可以!

所以我将代码移动到main.c中,它通过了建筑物。

在peripherals_demo项目中,GPIO端口/pin已经在peripher_setup()中初始化,也在I2C: demo_i2c_init()中初始化。
// ----------------------------------
void demo_i2c_init(void)
{
/ *
*以标准通信速度(100 kB / s)和初始化主模式I2C控制器初始化I2C控制器
*以7位寻址模式传输。
* /
Static const i2c_config CFG = {
.speed = hw_i2c_speed_standard,
.mode = hw_i2c_mode_master,
.ddr_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,...

谢谢

mt_dialog.
离线
最后一次露面:5个月2周前
职员
加入:2015-06-08 11:34
嗨jamesleo-konka,

嗨jamesleo-konka,

您不需要,这在外围设备演示中使用,因为它使用rand()函数来填充其写缓冲区中的随机数据(它将随机数据写入EEPROM)。

谢谢mt_dialog.