This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] EK-TM4C123GXL:具有中断和FIFO的I2C主控示例

Guru**** 2378650 points
Other Parts Discussed in Thread: TM4C1231E6PM
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1087992/ek-tm4c123gxl-i2c-master-example-with-interrupts-and-fifos

部件号:EK-TM4C123GXL
主题中讨论的其它部件:TM4C1231E6PM

我被指示开发I2C代码,该代码遵循当前模型,但位于不同供应商的MCU上。  调度程序仍在运行到完成 ,因此I2C是通过使用中断和DMA的状态机来处理的。 我可以使用I2C FIFO方案而不是DMA。 我真的很喜欢一个I2C示例,它可以正确地使用中断,也可以使用FIFO。  

谢谢!

John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,John:

    通常我会自愿为您举一个这样的例子,但不幸的是,我在近期内没有足够的带宽来将这些例子放在一起。

    对于I2C主中断-您可以了解我们的一些SensorLib实现。 它们使用 sensorlib文件夹中i2cm_drv.c中的I2CMIntHandler。 我认为他们不使用FIFO,但FIFO很容易工作。

    配置是使用 I2CTxFIFO配置集完成的,您可以将它设置为主设备并调整触发电平。

    I2CMasterControl有许多用于FIFO发送/接收的命令:

    //! - \b I2C_MASTER_CMD_FIFO_SINGLE_SEND
    //! - \b I2C_MASTER_CMD_FIFO_SINGLE_RECEIVE
    //! - \b I2C_MASTER_CMD_FIFO_BURST_SEND_START
    //! - \b I2C_MASTER_CMD_FIFO_BURST_SEND_CONT
    //! - \b I2C_MASTER_CMD_FIFO_BURST_SEND_FINISH
    //! - \b I2C_MASTER_CMD_FIFO_BURST_SEND_ERROR_STOP
    //! - \b I2C_MASTER_CMD_FIFO_BURST_RECEIVE_START
    //! - \b I2C_MASTER_CMD_FIFO_BURST_RECEIVE_CONT
    //! - \b I2C_MASTER_CMD_FIFO_BURST_RECEIVE_FINISH
    //! - \b I2C_MASTER_CMD_FIFO_BURST_RECEIVE_ERROR_STOP
    
    

    然后,您将拥有专用的FIFO I2C发送和获取API (也有非阻塞版本)

    • I2CFIFODataPut
    • I2CFIFODataGet

    然后,如果需要刷新FIFO以确保清除所有数据,则会出现 I2CTxFIFO刷新

    最后是I2CFIFOStatus,它 在FIFO的位字段上提供标志。

    如果需要,也有Tx功能的Rx版本。

    希望这至少从FIFO的角度对您有所帮助。

    此致,

    Ralph Jacobi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢Ralph的努力。

    我刚刚意识到,该系列中的某些设备似乎具有一些DMA功能。 我没有在 I2C部分简介中看到DMA,也没有看到名称中有DMA的任何函数,但我推断,某些配置参数中有一些DMA功能。 接收端具有/不具有FIFO的DMA适合我,因为这是以前从TI LSM6DSR收集数据的方式。

    也许我可以在互联网上找到一个I2C FIFO / DMA的例子(我们知道一切都是真实的)。

    John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,John:

    我可以省去DMA研究的麻烦- TM4C123x没有I2C总线的DMA功能。

    只有TM4C129x器件提供具有DMA的I2C。

    此致,

    Ralph Jacobi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢!  

    这当然是我的计划。  

    JH

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    FIFO的使用是否会影响中断?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,John:

    不存在任何FIFO特定的中断。

    此致,

    Ralph Jacobi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Ralph,

    我终于有机会看看 SensorLib中的i2cm_drv.c。 这是一个令人印象深刻的代码,最初有点令人生畏。 所以我希望我可以使用它而不必完全消化它。 然后我看到BMP180代码使用了它。 我通过I2C连接了一台BMP280,所以当时我感觉更像在家一样。 我认为这将与我们的旧DMA版本(采用不同的处理器)一样起作用。

    再次感谢,

    John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    将FIFO与I2C一起使用是否有任何真正的优势?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,John:

    很抱歉在这里浪费了你的一些时间,但是当我去查看数据表以了解有关FIFO使用案例的描述时,我意识到对于TM4C123x,I2C也没有FIFO。 所以I2C FIFO和I2C DMA都是TM4C129x的功能。 很抱歉没有回忆起这一点。

    此致,

    Ralph Jacobi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很高兴我坐在懒臀上,问你比深入挖掘更有什么优势。  编译器不会抱怨FIFO命令的使用。 我的目标是TM4C1231E6PM,但我认为它非常相似,当然内存和闪存是不同的。  

    是否有任何可用于的I2C中断?

    有一天,我会对FIFO的优势感到好奇。

    一如既往的感谢,

    John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,John:

    大量中断- FIFO没有任何内容,因为它不是TM4C123x的一部分。 :)

    数据表在16.3 Tm3中断一节中列出了这些中断。

    此致,

    Ralph Jacobi