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.

[参考译文] TM4C1294NCPDT:用于从存储器到 GPIO 的数据传输的 uDMA

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1025530/tm4c1294ncpdt-udma-for-data-transfer-from-memory-to-gpio

器件型号:TM4C1294NCPDT

我正在尝试  使用 UDMA 将数据从存储器传输到 GPIO。

我的目标是使用 uDMA 将几个字节从存储器(源)传输到 PORTD (目标)。

我使用 的是 TIvAware c_series_2_1_4_178库。

我修改 了 UDMA_DEMON.c  以实现上述目标。

当我尝试内存到内存传输时,它工作正常。 但是、当我将目的地址更改为 GPIO PORTD 时、不会生成 UDMA 中断。

我 进行了以下更改。

// mem 到 GPIO  ControlSet
uDMAChannelControlSet (UDMA_CHANGE_SW | UDMA_PRI_SELECT、
UDMA_SIZE_8 | UDMA_SRC_INC_8 | UDMA_DST_INC_NONE |
UDMA_ARB_1);

//内存到 GPIO TransferSet

uDMAChannelTransferSet (UDMA_CHANGE_SW | UDMA_PRI_SELECT、
UDMA_MODE_BASIC、g_ui32SrcBuf、(void *)(GPIO_PORTN_BASE+0x0)、
MEM_buffer_size);

我怀疑  在 uDMAChannelTransferSet 函数中使用的目标地址可能错误。 如何正确指定此.correctly。

Tivaware 外设驱动程序库在592页有以下注释

注:
当 GPIO_O_DATA 寄存器是源或目标时、应用程序代码必须
使用位段地址空间、而不是指定源地址或目标地址
GPIO_DATA。

如何处理上述问题?

提前感谢您的帮助。

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

    抱歉。 小幅修正。 端口为 PORTN  

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

    好的。 我通过之前的帖子找到了实现这一目的的方法。

    正确的方法是:

    // mem 到 GPIO
    uDMAChannelControlSet (UDMA_CHANGE_SW | UDMA_PRI_SELECT、
    UDMA_SIZE_32 | UDMA_SRC_INC_32 | UDMA_DST_INC_NONE |
    UDMA_ARB_256);

    uDMAChannelTransferSet (UDMA_CHANGE_SW | UDMA_PRI_SELECT、
    UDMA_MODE_AUTO、g_ui32SrcBuf、(void *)(GPIO_Porte _AHB_BASE +0x3fc)、
    MEM_buffer_size);

    我只能对端口 A 至 J 执行上述操作  

    现在数据出现在 Porte 上、对于多 个请求(无抖动)、数据非常稳定。

    一个相关的问题是、如何 使用单个 UDMA 传输器将16位数据从存储器传输到两个相邻端口、例如 E 和 F。

    其目的是使用没有 LCD 外设的 TM4C1294NCPDT 制作光栅图形 LCD 驱动器。

    感谢你的任何帮助。  

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

    您好、Krishna、

    UDMA 支持存储器到存储器、存储器到外设和外设到存储 器的传输、但不支持外设到外设的传输、因此您将无法在单个 DMA 传输中执行此操作。 执行此操作需要两次传输。

    此致、

    Ralph Jacobi

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

    您好、Ralph、

    我 想执行 内存到外设传输、而不是外设到 外设。

    我想要的是同时将2个字节的数据从存储器传输到两个端口(例如 E 和 F)。

    如果我要将单个像素16位 RGB 数据传输到 LCD 显示屏、则需要执行此操作。

    是否有办法做到这一点?

    此致、

    Krishna

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

    您好、Krishna、

    不可能100%同时执行、它将背靠背。 总线架构不允许在同一 CPU 周期内写入不同的寄存器位置。

    此致、

    Ralph Jacobi

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

    感谢 Ralph 的澄清。 我假设我必须在微控制器外部使用 FIFO 来同步来自2个端口 j 的2个字节

    您能否提供有关使用 TM4C1294NCPDT 驱动光栅图形 LCD 的设计的任何参考?

    此致  

    Krishna  

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

    您好、Krishna、

    如果您是指实际的硬件接口、我们没有类似的东西、因为通常客户会使用我们的 LCD 控制器外设或 SSI。

    至于图形部分本身、它作为图形库在 TivaWare 中提供。 TivaWare 中提供了大量相关文档。 我们还在编写有关该主题的新应用手册、但不确定该手册的推出时间。

    此致、

    Ralph Jacobi

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

    您好、Ralph、

    我有另一个问题。    当我们触发存储器到 GPIO 单次请求传输时、从端口引脚到另一端口的数据可用性的 UDMA 请求的最快可实现响应时间是多少?

    我在 EK_TM4C124XL 上做了一个实验 、在 Porte Pin0发出使用 uDMA 的请求的情况下、将数据从存储器传输到 PORTB。

    我的观察结果是、从 Porte Pin0的下降沿到 PORTB 的数据更改需要100ns 才能进行单次传输(基本模式)。

    在自动模式下、第一次传输仍然需要100ns、随后 的传输每字节需要50ns。

    CPU 频率设置为120MHz。

    问题是、这是我们在 TM4C1294的 uDMA 中可以实现的最佳传输速率吗? 如果有改进方法,如何进行。

    理想情况下、对于单次请求、我希望获得每字节40ns 的传输速率。  

    提前感谢。

    此致。

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

    您好、Krishna、

    这在我对 DMA 预期的时序范围内。 实际上没有任何方法可以加快 UDMA 的速度。

    如果这是一项硬性要求、我认为没有外部电路就无法满足。 如前所述、所有客户都使用 SSI 或 LCD 控制器来实现此类应用。

    这是转换之间的时间、不一定是实际的数据输出? 如果是、您可能可以使用一些外部缓冲器 IC? 这就是我在外部电路方面的想法。

    此致、

    Ralph Jacobi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="189615" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1025530/tm4c1294ncpdt-udma-for-data-transfer-from-memory-to-gpio/3796365 #3796365"]如前所述,所有客户都使用 SSI 或 LCD 控制器来执行此类应用。

    您好、Ralph、

    我正在尝试使用 TM4C1294的 RAM 驱动每像素4位的光栅 LCD 显示屏。  分辨率为800x480 就可以了(192KB 的帧缓冲区。 这在微控制器的 RAM 内提供了一个双缓冲器选项)。 您建议使用 SSI。 这是您所说的四路 SSI 吗? 能否在 uDMA 中配置 QSSI 以生成像素时钟和驱动光栅 LCD 的4位数据?

    此致。

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

    您好 Kumar、

    借助 SSI 或四 SSI、客户可驱动外部 LCD 控制器 IC、该 IC 通过 SSI 接收像素数据、然后将其转换为 LCD 的并行输出以及时钟和控制信号。 如果未使用 LCD 控制器外设、则建议使用这种方法连接光栅显示屏。

    此致、
    Ralph Jacobi