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.

[参考译文] TM4C129ENCPDT:用于 UDMA 的 Tivaware

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1059797/tm4c129encpdt-tivaware-for-udma

器件型号:TM4C129ENCPDT

您好!

我正在尝试为 SSI2 Rx 设置 DMA。 当我将 udma.h (随 Tivaware C 系列2.2.0.295一起提供)包含在我的项目中时、我发现了以下内容:

#define UDMA_CHANGE_USBEP1RX  0
#define UDMA_CHANGE_USBEP1TX  1.
#define UDMA_CHANGE_USBEP2RX  2.
#define UDMA_CHANGE_USBEP2TX  3.
#define UDMA_CHANGE_USBEP3RX  4.
#define UDMA_CHANGE_USBEP3TX  5.
#define UDMA_CHANGE_ETH0RX    6.
#define UDMA_CHANGE_ETH0TX    7.
#define UDMA_CHANGE_UART0RX   8.
#define UDMA_CHANGE_UART0TX   9.
#define UDMA_CHANGE_SSI0RX    10.
#define UDMA_CHANGE_SSI0TX    11.
#define UDMA_CHANGE_ADC0      14.
#define UDMA_CHANGE_ADC1      15.
#define UDMA_CHANGE_ADC2      16.
#define UDMA_CHANGE_ADC3      17.
#define UDMA_CHANGE_TMR0A     18.
#define UDMA_CHANGE_TMR0B     19.
#define UDMA_CHANGE_TMR1A     20.
#define UDMA_CHANGE_TMR1B     21.
#define UDMA_CHANGE_UART1RX   22.
#define UDMA_CHANGE_UART1TX   23.
#define UDMA_CHANGE_SSI1RX    24.
#define UDMA_CHANGE_SSI1TX    25.
#define UDMA_CHANGE_I2S0RX    28
#define UDMA_CHANGE_I2S0TX    29
#define UDMA_CHANGE_SW        30

这些定义与 Tiva 微控制器不匹配、但它们似乎适用于 Stellaris MCU。 请确认这一点、并建议我是否可以继续使用这些模块(udma.h 和 UDMA.c)。

谢谢、

天列

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

    您好、Tianlei、

    将元素耦合到此... 首先、我将解释该表、我可以解决您的特定问题、这是由于该表似乎缺少条目(我不知道它以前是如何作为错误报告归档的...???)

    这将与 TM4C MCU 相匹配、因此以这种方式提供了这些 MCU。 首先、数据表中的表格如下:

    您将看到使用的名称映射到编码0外设。 对于"保留"通道、似乎是内部名称作为封装的一部分发布、或者您可能猜到有一个 Stellaris 器件-无论哪种方式、 我不是团队的一员、因此我无法真正评论我们为什么选择这么做、但这就是他们看起来不匹配的原因。 但您将看到 UART、ADC、计时器等都与通道#匹配。

    现在、我们有单一定义、而不是单个 SSI2定义、即通道12和13上的编码2、原因是无法同时将 UDMA 通道分配给多个外设。 如果我们为通道#和外设关联的每次迭代设置了唯一名称、则用户只需使用它、而无需了解通道与其他外设的实际共享方式。 具有通道的单一名称要求他们查看数据表、找到合适的通道、并了解如果他们的外设共享同一通道、 每次外设需要使用 UDMA 时、它们只需选择一个外设或重新配置 UDMA。

    现在、通过给出的解释...

    SSI2需要 UDMA 通道12和13。 遗憾的是、由于我无法真正理解的原因、这些通道甚至没有定义。 因此、对于这种情况、我建议您自行制作、例如:

    #define UDMA_CHANNEL_CH12     12
    #define UDMA_CHANNEL_CH13     13
    

    老实说、我在上面使用的命名规则是第1天应该做的、但我在初始更新中没有任何作用。 我同时提交了一个错误通知单、因此当我们进行下一次更新时、我们将解决该问题、并且可能还会重新访问不清楚的表(这可能需要具有旧表+现代表、因此它向后兼容。)

    此致、

    Ralph Jacobi

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

    谢谢 Ralph! 澄清对我很有帮助。