我需要通过I2C将一个外部传感器连接到DA14695 WiRa USB开发套件。驱动程序看起来相当简单,但我有一个关于初始化接口的问题。代码使用汇编指令创建要调用的初始化函数列表(bus_init_section),但是如何将I2C总线的初始化添加到这个列表中呢?作为一个更普遍的问题,使用这种机制添加外设支持的方法是什么?
嗨apdobaj
通常,我们强烈建议使用适配器来访问硬件外设,因为这不仅提供了对外设的访问,而且还确保当前正在访问它的其他任务暂停其操作,直到外设再次被释放。因此,如果另一个任务试图在同一时间访问同一外设,您不必担心。此外,在睡眠模式下,所有外围设备块都将关闭。
如果我理解正确的话,您的问题是如何初始化I2C外围设备块。请您看一下教程I2C适配器概念从支持门户。您将找到初始化和使用I2C适配器的所有适当步骤。
希望这可以帮助!如果我误解了你的问题,请解释清楚。
谢谢,PM_Dialog
我仍然有问题试图让这个i2c驱动工作。驱动程序正在重新注册接口,因为它认为tx fifo中有数据。我放置了一些测试代码来禁用重新注册和清除fifo,但现在代码挂起调用ad_i2c_write中的OS_EVENT_WAIT。所附的代码应该告诉您解决这个问题所需的一切。从main.c中的i2c_init方法开始。所有更改都使用关键字apdobaj进行注释。
嗨apdobaj,
我看一下main.c文件,所有I2C事务都是在system_init()中调用的i2c_init()中实现的。
system_init()任务是一个最高优先级的任务,它应该只包含初始化系统和应用程序的调用。它应该具有典型项目中的默认值,它应该创建/初始化资源(例如互斥,计时器,结构),创建应用程序的初始任务。
system_init()任务不能用于实现应用程序的状态机或任何一般功能,如I2C事务。对于I2C,应该在system_init()中创建一个具有正常优先级的新任务,以运行应用程序状态机并执行I2C事务。
在我之前的回复中,我曾建议查看教程I2C适配器概念以便了解如何使用I2C适配器。
正如您在本教程中看到的,system_init()创建了prvi2cctask_eeprom()任务,其中I2C适配器初始化应该在开始时完成一次(ad_i2c_init)。该任务还执行eeprom_data_writer()来打开适配器(ad_i2c_open())并执行一些I2C写事务(ad_i2c_write())。当I2C活动完成后,适配器应该关闭(ad_i2c_close())。我建议首先检查建议的教程,并在您自己的项目中实现相同的功能。
好的,我遵循了教程,现在得到一个总线故障时,它试图初始化液晶。请建议。
有人有吗?
谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.wsdof.com/support
我们将在未来几天修复bug /优化搜索和标记。
这张票已经被移植到://www.wsdof.com/forums/post/dialog-smartbond-bluetooth-low-energy-%E2%80%93-hardware-device-reference-designs/peripheral
抱歉延迟-我会在新论坛上尽快回复你。
嗨apdobaj
通常,我们强烈建议使用适配器来访问硬件外设,因为这不仅提供了对外设的访问,而且还确保当前正在访问它的其他任务暂停其操作,直到外设再次被释放。因此,如果另一个任务试图在同一时间访问同一外设,您不必担心。此外,在睡眠模式下,所有外围设备块都将关闭。
如果我理解正确的话,您的问题是如何初始化I2C外围设备块。请您看一下教程I2C适配器概念从支持门户。您将找到初始化和使用I2C适配器的所有适当步骤。
希望这可以帮助!如果我误解了你的问题,请解释清楚。
谢谢,PM_Dialog
我仍然有问题试图让这个i2c驱动工作。驱动程序正在重新注册接口,因为它认为tx fifo中有数据。我放置了一些测试代码来禁用重新注册和清除fifo,但现在代码挂起调用ad_i2c_write中的OS_EVENT_WAIT。所附的代码应该告诉您解决这个问题所需的一切。从main.c中的i2c_init方法开始。所有更改都使用关键字apdobaj进行注释。
嗨apdobaj,
我看一下main.c文件,所有I2C事务都是在system_init()中调用的i2c_init()中实现的。
system_init()任务是一个最高优先级的任务,它应该只包含初始化系统和应用程序的调用。它应该具有典型项目中的默认值,它应该创建/初始化资源(例如互斥,计时器,结构),创建应用程序的初始任务。
system_init()任务不能用于实现应用程序的状态机或任何一般功能,如I2C事务。对于I2C,应该在system_init()中创建一个具有正常优先级的新任务,以运行应用程序状态机并执行I2C事务。
在我之前的回复中,我曾建议查看教程I2C适配器概念以便了解如何使用I2C适配器。
正如您在本教程中看到的,system_init()创建了prvi2cctask_eeprom()任务,其中I2C适配器初始化应该在开始时完成一次(ad_i2c_init)。该任务还执行eeprom_data_writer()来打开适配器(ad_i2c_open())并执行一些I2C写事务(ad_i2c_write())。当I2C活动完成后,适配器应该关闭(ad_i2c_close())。我建议首先检查建议的教程,并在您自己的项目中实现相同的功能。
谢谢,PM_Dialog
好的,我遵循了教程,现在得到一个总线故障时,它试图初始化液晶。请建议。
有人有吗?
嗨apdobaj,
谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.wsdof.com/support
我们将在未来几天修复bug /优化搜索和标记。
这张票已经被移植到://www.wsdof.com/forums/post/dialog-smartbond-bluetooth-low-energy-%E2%80%93-hardware-device-reference-designs/peripheral
抱歉延迟-我会在新论坛上尽快回复你。
谢谢,PM_Dialog