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.

[参考译文] AM3359:LCDC 寄存器访问问题

Guru**** 2558250 points
Other Parts Discussed in Thread: AM3352

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/598061/am3359-lcdc-register-access-issues

器件型号:AM3359
主题中讨论的其他器件:AM3352

我们将在第2轮使用 AM3352制作定制板。 我们还没有它们、但在平均时间内、我们将 Beagle Bone Black 开发板用作开发板、以解决我们无法用最后一个硬件解决的一些问题。 一些详细信息:

是的、我正在使用 Beagle Bone Black GEL 文件

这是一个 RTOS 项目、而不是 Linux、我们不是在运行 Linux。

但是、该代码都在 main 中运行、因此我们尚未命中 RTOS、因此实际上不应与 RTOS 进行任何交互

我们使用的初始化代码主要是自定义的。  

我将 JTAG 接头焊接到 BBB 板上、我可以在 CCS v6.2中进行连接和仿真、一切正常

是的、我知道为了查看寄存器、您必须使所有时钟启动并运行。

是的、我已经看到了时钟树工具、我正在使用它

问题。 我在其中一个 SDK 示例中找到了启用时钟的代码、因此我的代码就是基于该代码。 代码如下:

enableModule (CM_PER_LCDC_CLKCTRL、
CM_PER_LCDC_CLKSTCTRL、
CM_PER_LCDC_CLKSTCTRL_CLKACTIVITY_LCDC_L3_OCP_GCLK);

其中 enableModule 定义为:

void enableModule (volatile U32 * clkCtrlReg、volatile U32 * clkStCtrlReg、U32 clkActMask)

/*启用模块*/
*clkCtrlReg = PRCM_MODULEMODE_ENABLE;
/*检查模块启用状态*/
while (PRCM_MODULEMODE_ENABLE!=(* clkCtrlReg & PRCM_MODULEMODE_MASK));
/*检查时钟活动-已取消*/
while (clkActMask!=(* clkStCtrlReg & clkActMask));
/*检查空闲状态值-应该处于功能状态*/
while (((PRCM_MODULE_IDLEST_FUNC << PRCM_IDLE_ST_SHIFT)!=(* clkCtrlReg & PRCM_IDLE_ST_MASK));

在我运行此操作后、我无法控制 LCDC 寄存器。 它们都显示为???????? 和"Registers"窗口中的"Error: Unable to Read"

当我开始计时时、我看到 CLKACTIVITY_LCDC_L4_OCP_GCLK 处于非活动状态、但该模块被视为已启用、另一个时钟被视为活动。 当我尝试找到哪个时钟时,我会遇到一个障碍,因为技术手册(spruh731.pdf)中没有任何所谓的。 当我转到 spruh731.pdf 的 LCDC 部分时、我看到有3个时钟需要处理、OCP 时钟是 L3、因此这意味着功能时钟是 L4时钟、即使未激活的时钟在寄存器窗口中称为 OCP。 由于没有任何意义、我尝试使用时钟树工具。 当我转到时钟树工具并尝试确定在我启用模块后禁用哪个时钟时、我发现它是像素时钟。 当我尝试启用像素时钟时、我在状态在 CM_DIV_M5_DPLL_CORE 读取的栅极上捕获、保持"门控"的栅极为 ST_HSDIVIDER_CLKOUT2_GATE _CTRL。 栅极设置为自动。 我认为、自动意味着、如果启用了使用该时钟源的功能、它将自动启用、但我似乎无法为解锁该时钟执行任何操作。  当然、我认为像素时钟可能不会阻止我访问寄存器、但我可能会错。

因此、我有点迷路了。 我不知道启用 LCD 寄存器需要什么寄存器和什么时钟设置。 我不能真正责怪硬件、因为 BBB 板已经知道可以正常工作、所以很明显、我没有启用或多路复用或其他功能。  

我查看了 LCD_APP_Raster 项目、但我实际上看不到我需要根据该项目执行的不同操作

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    此问题是否与下面的上一个帖子不同?  请注意我必须使用的序列、以确保使用 CCS 正确访问 LCD 模块。

    此致、

    James

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

    不是、它没有不同、但您的建议似乎没有帮助。 尝试您的建议:我启用原始开机自检中显示的功能时钟(并验证时钟控制寄存器是否为2)、 我尝试添加代码来启用 LCD 模块寄存器中的 LCD 时钟、但我没有添加的部分问题是、当我尝试写入 LCD 控制器寄存器时、我会遇到系统中止情况、最后我会进入 退出(_exit)。 当我尝试将*0x4830e006c 添加到表达式窗口时,我得到“目标无法读取……” 误差

    在 LCD 控制器功能时钟之前、是否需要启用其他时钟? 我一定会错过一些东西

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想、没有帮助的是这些时钟的名称数量。 我在时钟树工具、技术手册和寄存器视图之间很难交叉参考它们。

    在技术手册中、我们有2个时钟
    PD_PER_LCD_L3_GCLK (OCP 时钟)
    PD_PER_LCD_GCLK (功能时钟)-未提及 L4

    这些内容与技术手册中的其他内容没有交叉、即使在下一页的注释中、它表示"来自 PRCM"

    然后转到技术手册中的 PRCM、您将得到2个时钟
    CLKACTIVITY_LCDC_L4_OCP_GCLK (功能时钟? 在 LCD 部分中、它说 L3是 OCP、因此它必须能够正常工作、对吧?)
    CLKACTIVITY_LCDC_L3_OCP_GCLK (OCPClock?)

    然后转到时钟树工具、您会得到3个时钟
    LCD_GCLK (像素时钟?)
    LCD_L4S_GCLK (功能时钟?)
    LCD_L3_GCLK (OCP 时钟?)

    当然、"Registers"视图与技术手册中的 PRCM 共享该名称。

    当事情有3个不同的名称时、很难从一个文档/工具跟踪到另一个文档/工具。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    因此、我想我实施起来是错误的。 在我尝试修复之前、我从未从电路板上断开电源(DUH、头部插座)、因此当我尝试修复时、问题始终存在。 现在、我进行了下电上电操作、我能够执行您所说的操作、对寄存器进行编程、加载调色板、然后继续操作。 我甚至可以看到寄存器。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、很高兴它能正常工作。 我将研究清理 TRM 中的时钟名称。

    为了帮助您了解时钟(以 LCD 为例、但对于任何模块都是如此)、请从每一章开头的集成部分开始(对于 LCD、它是第13-2节)。 这将告诉您模块使用的时钟。 对于 LCD、有2个接口时钟和1个功能时钟。 通常、名称中包含'L3'或'L4'的任何内容都是接口时钟。 此外,任何带有“OCP”的设备都是接口时钟。 任何其他东西通常都是功能时钟。 所以、

    LCD_L3_GCLK (或 LCDC_L3_OCP_GCLK)是 LCD 的主接口时钟、例如、在数据传输到显示屏期间、当 LCD 是主器件时使用
    LCD_L4_GCLK (或 LCDC_L4_OCP_GCLK)是 LCD 的从器件接口时钟。 L4只是 L3的1/2分频。 这通常用于模块的配置
    LCD_GCLK 是 LCD 模块的功能时钟、用于为模块本身的功能逻辑计时。

    此致、
    James