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.

[参考译文] Starterware/TM4C129XNCZAD:EPI 总线读写优先级

Guru**** 2424520 points
Other Parts Discussed in Thread: TIDM-TM4C129XSDRAM

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/620375/starterware-tm4c129xnczad-epi-bus-read-and-write-priority

器件型号:TM4C129XNCZAD
主题中讨论的其他器件:TIDM-TM4C129XSDRAM

工具/软件:Starterware

我的 LCD 显示屏达到了一些计时限制。 TM4C129X LCD 模块设置为通过 EPI 总线从外部 SRAM 读取。 图形库配置为通过 EPI 总线写入同一 SRAM。

写入1200像素似乎是我的问题。 尝试写入此像素数会导致 LCD 中断 LCD_INT_underflow。 写入1、100像素没有问题。 我使用的是4BPP、因此写入像素实际上是读取-修改-写入、因为我一次只更改一个字节的4位。

是否有办法优先读取 EPI 总线的数据? 渲染当前帧比绘制下一帧更重要。 我想用一种方法告诉写入"chill"的情况、因为读取 FIFO 正在低电平运行。

欢迎其他想法。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    EPI 模块具有读写 FIFO。 是否可以让 LCD 控制器从 EPI FIFO 中读取数据、并让像素绘制功能先轮询读取 FIFO、以确保在总线上发送数据之前 LCD 控制器有数据可用?

    这是一种欺骗、因为 LCD 控制器必须从 FIFO 读取、但图形库的读取-修改-写入函数需要读取不同的地址。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    LCD 控制器也有 FIFO。 也许一个更简单的方法是轮询 LCD FIFO 并放弃将数据提取到 SRAM、直到 LCD FIFO 处于正常的数字?

    我在数据表中看不到读取 LCD FIFO 计数的方法...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Peter、

    从我对 LCD 控制器部分和 LCD 控制器 DriverLib 指南的阅读中、我不相信可以更改 LCD 控制器任务的优先级或读取 FIFO 计数。

    当您说1200像素时、我假设您是宽度的计数吗? 如果是、您可能会达到 LCD 控制器的性能限制。 我知道我们已经连接了用于开发套件等的800x480显示屏、但我不知道我们是否连接了超过1000像素的显示屏。 不确定限制的确切位置(例如取决于屏幕和应用、因此不能针对各种可能性进行规格)、以及这种限制是否适用于您选择的分辨率和其他功能、 但是、如果您认为您达到了时间限制、那么您确实可以准确地进行假设。

    如果存在权变措施、我认为不仅我们的团队、甚至在整个论坛上都对我尝试的搜索进行了调查或发现(尽管 E2E 的搜索机制仍有很多需要改进的地方...)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ralph、

    1200像素表示我的800x480屏幕上某个位置的50x24矩形。

    我相信 LCD 控制器工作得非常好。 EPI 是瓶颈。 帧缓冲器位于片外 SRAM 中。 SRAM 读取和写入通过 EPI 进行。

    当编辑帧缓冲区时、情况会有所不同。 输入 FIFO 为空、因为读取像素数据的 LCD 控制器与设置像素数据的处理器共享 SRAM 总线(EPI)。

    您可以判断、因为处理小部件后、所有部件都将正确显示在 LCD 上。 您还可以判断、因为当帧缓冲区被写入时、LCD 控制器正在提供下溢中断。



    在纸上、我的设置应该可以正常工作。 LCD 时钟为24MHz、两个像素由1字节(4BPP)定义。 LCD 以12MHz 的速率消耗1个字节。

    EPI 设为 HB8、频率为60MHz。 EPI 总线以60MHz 的频率提供字节。 这是 LCD 的5倍需求。

    如何在 LCD 读取之间保存帧缓冲区编辑?

    我已在每个像素写入之间针对(i = 0;i < 145;i++)建立了等待循环;使用此等待循环、所有内容都顺畅运行、但屏幕呈现出极慢的效果。 想象一下、必须等待5秒钟才能在手机屏幕之间切换。 这是垃圾。 等待循环不好。

    等待循环也很糟糕、因为我们知道大多数写入不会导致问题。 渲染1、000像素效果良好、但您逐渐将 FIFO 擦干、最终我们在尝试写入~1、200像素时遇到问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Peter:

    哦、我明白了。 那么、对于控制器而言、尺寸标注不应是问题。 等待循环肯定不像变通办法、但认为这是一种垃圾解决方案。

    帧缓冲器位于 SRAM 中是光栅模式的常见做法、因此这也不是问题。 但考虑到这一点、我做了更多的 poking 并找到了一个勘误项 LCD#02、这可能会影响您: http://www.ti.com/lit/er/spmz850g/spmz850g.pdf

    说明:如果 EPI 控制器映射为允许间接访问 SDRAM、其中 EADR 位域为0x0、ERADR 位域不是 EPI 地址映射(EPIADDRMAP)寄存器的0x0、则会产生 DMA FIFO 下溢中断。 这是因为当它们都尝试访问 SDRAM 时、LCD 的优先级低于 CPU。

    虽然勘误表专门列出了 SDRAM、但由于基于访问地址映射、它可能也会影响 SRAM。 认为这可能会解释发生了什么情况?

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

    这是值得一试的。

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

    是否有办法使 LCD DMA 从 EPI 读 FIFO 中读出? 有一种方法可以轮询读取 FIFO 计数并暂停对帧缓冲区的写入、但不清楚如何使 LCD 从 EPI FIFO 中读取。

    决定 EPI 优先级的因素是什么? 不清楚设置 ECADR 应该如何使 LCD 读取具有更高的优先级。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    EPI WRFIFO 是否可以用 UDMA 以外的任何方式访问? 数据表显示:"当阻塞式读操作时、μ μDMA 软件通道(或其它未使用的通道)用于存储器到存储器的传输(或存储器到外设的传输、此时还使用其它外设)。 在这种情况下、μ μDMA 会一直挂起到读取完成、并且在读取完成之前无法为另一个通道提供服务。"

    LCD 控制器是否执行阻塞式读操作? 这是我看到的唯一能够优先处理 LCD 控制器的事情。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我暂时放弃了 EPI。 目前、LCD 缓冲器将位于片上 SRAM 中。 这会使256KB SRAM 的容量增加192KB。

    剩余64KB。 如果 TI-RTOS + NDK TCP/IP 堆栈可以在64KB 的空间内工作、则这是一个精细的分辨率。 在 DK-TM4C129X 上运行的演示应用使用~59KB、因此这是一个合理的压缩。

    在最初的计划中、2个带乒乓的帧缓冲器需要384KB、但使用片上 SRAM 时渲染速度非常快、因此我认为这是可以接受的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Peter、

    很抱歉、您迟迟未能回复、不得不与另一位专家进行交流。

    您尝试应用的问题是使用 SRAM 而不是 SDRAM 作为外部存储器。 外部 SRAM 通信速度非常慢、因此存在此类限制、尤其是对于光栅模式。 不过、我已被告知使用一个良好的 SDRAM 芯片将不会有问题。 您将能够使用外部存储器在光栅模式下执行800x480操作。 SDRAM 将让您在每个通信周期获得8x2个字节(总共16个字节)、然后(如果编码正确)、FIFO 不会遇到下溢情况等
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ralph、

    您能否找到更客观的答案? 与其他器件相比、一切都很慢或很快。 对于自行车、每小时30英里的速度很快、但对于州际公路上的汽车来说、速度很慢。 这些术语在没有上下文的情况下并不意味着任何内容。 如果您坚持使用更昂贵的芯片至关重要、那么我需要一个客观的带宽来证明成本和工作量的合理性。

    RAM 速度应按数字计算。 LCD 屏幕需要每秒12兆字节的数据、以避免下溢。 EPI 总线的速率配置为每秒60 MB。 当屏幕被馈送像素数据时、EPI 总线处于空闲状态的时间为~80%。 为什么不能有效地利用此空闲时间来写入新数据?

    该空闲时间可用于在 FIFO 空闲运行前写入~500字节。 当 FIFO 为低电平时、为什么不能在信标上挂起? 阻止此配置工作的原因是什么?

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

    使用 TM4C 通过 EPI 实现的 SRAM 访问速度取决于所使用的器件、因此会因您的系统而异。 对于类似您的设置、SRAM 的异步特性会导致延迟、从而使进程从峰值速度减慢。 此外、您还将受到60MHz EPI 时钟的限制。

    在帮助提供客观带宽以进行比较/对比(完全了解对调整的需求)方面、我需要在您的端部提供一些帮助、以帮助我们了解 SRAM 和 TM4C 之间的交互。

    您能否测量 EPI 总线上的数据访问时序? 最重要的信号是 CSn 和 RDN 信号。

    我仍在跟进 EPI 和 FIFO 的具体问题、他们没有耳聋。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    拉尔夫

    通过观察示波器上的 RAM 时序可以发现、信号的速度不如我想象的快。

    将 EPIDividerSet (EPI0_BASE、1)更改为 EPIDividerSet (EPI0_BASE、0);提高总线速度并使一切正常工作。

    我不确定这一行代码在做什么、因为 API 文档似乎与数据表相矛盾。 Tiva C API 说明函数将 EPI 时钟设置为系统时钟、但数据表说明您只能以高达60MHz 的频率运行。 当系统时钟高于60MHz 并且写入 EPIDividerSet (EPI0_BASE、0)时、实际会发生什么情况?

    对于主机总线8以外的模式、表32-40和32-43中提到了60MHz 限制。

    数据表在表32-41中指出、写入信号为1个 EPI 时钟。 RAM 数据表显示它需要7ns 的写入脉冲宽度。 因此、即使将 EPI 总线设置为120MHz (8.3ns 脉冲宽度)、电路板也能正常工作。 在示波器上、我看到22ns。 我假设这意味着我的运行频率接近最大60MHz。 无论分压器是如何设置的、我都感到安全、但如果能够理解、我将不胜感激。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Peter、

    很抱歉耽误您的时间、您想在评论之前完全验证以下信息。

    如果您在895页查看 EPIBAUD 寄存器、则 TivaWare API 是正确的、也符合数据表。

    [引用 user="Peter Borenstein">当系统时钟速度超过60MHz 并且写入 EPIDividerSet (EPI0_BASE、0)时、实际会发生什么情况?

    [/报价]

    遗憾的是、这样做实际上会导致器件在这种情况下超出规格运行。  必须正确使用分频器、才能根据数据表规格获得正确的频率。 库 API 的设置方式使其依赖于用户执行此操作(这是正确的方法是否是不同的情况、但这就是使用 API 设置它的方式)。 这条线路实际上强制 EPI 时钟以120MHz 的频率工作、因此超出了规格。

    虽然 一个器件仍可在超出规格的配置下工作、但绝对不能保证在生产中的器件之间保持此类运行。 因此、我很抱歉地说、这不是解决您面临的时序限制问题的可靠解决方案。。。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是令人沮丧的阅读、但我很高兴您这么说...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    拉尔夫

    您能否澄清停用时间? 数据表给出了不同模式下的 EPI 最大速度、但并未指定 HB8模式、这正是我所使用的模式。

    根据数据表、
    表32-39显示 SDRAM 模式的最大频率为60MHz。
    表32-42说明通用模式的最大频率为60MHz
    表32-43说明 PSRAM 的最大频率为50MHz。
    表32-41讨论了8位主机总线、但并未给出最大值

    主机总线8模式不能共用这个限值、这是因为时钟信号不在外部接口中使用。 将图32-20与图32-21进行比较。 没有使用时钟信号! 我认为这种推理是我保存的恩典。

    EPICFG 的低4位定义了这些模式。

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

    EPI 接口作为一个整体而言、并未指定在高于60MHz 的时钟速度下工作。 第858页的表11-2显示了所有 EPI 接口选项以及允许的最大频率。 即使对于单个 SRAM、最大频率的限制也是60MHz。 数据表在连接这些点时表现不佳、但表中提到的单个 SRAM 表示8位和16位的主机总线模式(详见第11.4.3节)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嗯、然后回到原来的问题。

    芯片写入 EPI 如何不会影响 LCD 控制器从 EPI 的读操作?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我能够通过 ALE 确认 EPI 时钟。 表32-41显示该信号应为1 EPI 时钟。

    使用 EPIDividerSet (EPI0_BASE、1)时、持续时间为~17ns 或60MHz;
    使用 EPIDividerSet (EPI0_BASE、0)时、持续时间为~8ns 或120MHz;//太快

    这种60MHz 限制会使人对 SDRAM 速度产生怀疑。 TI 的 TIDM-TM4C129XSDRAM 开发套件采用 SDRAM 芯片 ISSI S42S16320D。 我使用 SRAM 芯片 Cypress 的 CY7C1049GN30。

    SDRAM 芯片的存取时间为5.4ns、但由于 EPI 的最大时钟限制、这一点无关紧要。 以60MHz 运行时、选通速度不能超过16ns。 TM4C129X 芯片无法利用使 SDRAM 和 SRAM 不同的速度。 这些芯片之间存在速度差异、但 TM4C129X 不使用它。

    两个芯片一次读出8位。

    我仍然想了解 SDRAM 所必需的最小带宽、但通过这些数字、SDRAM 的速度不会更快...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Peter、

    我们的专家过去在 SDRAM 中成功使用了16位 SDRAM、因此8位 SDRAM 是否能够满足这种尺寸的显示器需求并不是100%清楚。 此外、他还说、虽然访问时间相同、但 SDRAM 确实支持突发模式、因此允许其读取和写入更长的数据序列、并且与 SRAM 相比、吞吐量更高(使用16位 SRAM 与16位 SDRAM 进行测试)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这些吞吐量选项中是否有任何一个实际上优先于 LCD 控制器而不是内核访问?

    带宽解决方案似乎可以避免这一问题。 如果你足够快、优先级无关紧要。

    您的 SDRAM 建议和我的超频总线都不会提供 LCD 首选项。

    请记住、我对 SDRAM 持开放态度、但由于它需要额外的$$、我想证明我所获得的价值。 只有在确定 Honda 无法完成任务后才能购买法拉利。

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

    我不确定 LCD 控制器优先于内核访问是什么意思。 我想你的问题是不是这样的? 您的 LCD 屏幕读取数据的速度是否快于 CPU 从 SRAM 加载到缓冲区中的速度?

    基本上、在缓冲器访问时、LCD 的优先级高于 CPU。 只有当 LCD 通过 V-Sync 时、CPU 才能访问它。 这时会触发一个中断来通知 CPU、然后它可以进入缓冲区并填充数据。

    关于 SDRAM 的情况、SRAM/SDRAM 的数据访问时间并不是这种情况下唯一需要注意的规格。 LCD 数据/时钟速率也很重要。 这是因为 EPI 工作原理。 如果 LCD 刷新速度快、则由于缓冲器访问受限、需要 SDRAM 突发模式来提供足够快的数据。 不可以、无法在优先级方面更改 EPI 的功能、因此您必须使用 EPI 的功能。 它不能针对不同的优先级进行重新配置、所以当你获得下溢中断时、你仍然只能在你接收到 V-Sync 中断并且 LCD 放弃缓冲器访问时填充缓冲器。

    您能否在 LCD 屏幕上提供详细信息(例如数据/时钟速率)?

    此外、由于 EPI 是16位总线、因此使用8位 SRAM 或 SDRAM 并不是最佳选择。 这将进一步降低数据的访问速率、除非您的芯片执行特殊处理以优化16位数据、而您的 SRAM 在数据表中看起来并不像这样。

    就我们的 LCD 面板使用 EPI 的经验而言、要使用60FPS 进行800x480显示、EPI 的工作方式与 LCD 优先级高于 CPU 的访问方式有关、因此需要 SDRAM 突发模式。 如果您可以找到一种方法让 SRAM 适合您的应用、那么您的所有能力都将为您提供、但这将进入特定于应用的领域、我们在中根本没有提供详细支持的专业知识。

    为了将其作为另一个优化选项来解决、另一种帮助减轻某些 CPU 负载的方法是使用2个帧缓冲器、LCD 访问这些缓冲器、然后使用 DMA 填充未使用的帧缓冲器、 然后、当一个缓冲区清空时、切换到另一个缓冲区。 但是、这本身并不足以使8位 SRAM 与如此大的显示屏配合工作。

    最后、您应该注意的另一个方面是确保使用一些优化、因为如果没有优化、访问时间可能会变慢。 所有 LCD 示例都是在优化级别= 2的情况下完成的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    第二个框架是总计划的一个重要部分。 否则、您将显示半个渲染的小工具。 这种帧交替方法起作用、但在不安全的 EPI 速度下、我们无法做到...

    我们当然希望 LCD 控制器具有优先级。 一旦当前帧存在于存储器中、我们就不需要写入任何内容。 LCD 控件持续读取此缓冲区并刷新屏幕。 内核可以吸入 while (1);循环中的所有我们关心的内容、LCD 控制器也可以正常工作。 阻止内核的写入和读取不会给我们带来任何麻烦。

    LCD 时钟为24MHz、像素由4BPP 定义(1字节定义2个像素)。 LCD 以12MHz 的速率消耗1个字节。

    如何在 LCD 从帧#1读取之间保存帧#2编辑?

    我们知道,在不发生猥亵行为的情况下,会发生一些写操作。 当写入大约~1、200像素或更多像素时、内核会对 EPI 进行阻塞、并且 LCD FIFO 会欠流。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "无法针对不同的优先级重新配置它、因此当你获得下溢中断时、你仍然只能在你接收到 V-Sync 中断并且 LCD 放弃缓冲器访问时填充缓冲器。"

    我认为这不是真的。 我的屏幕没有 V-SYNC 信号。

    其次、我将 SRAM 的写入使能(/WE)置于示波器上。 我的屏幕每~20ms 刷新一次。 屏幕写入在此时间间隔内似乎不会发生。

    写入似乎不遵循任何模式。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    带有 SDRAM 的新电路板似乎可以正常工作。 感谢你的帮助。