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:LCD 调色板 RAM 至原始颜色代码转换

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/612743/starterware-tm4c129xnczad-lcd-palette-ram-to-raw-color-code-translation

器件型号:TM4C129XNCZAD

工具/软件:Starterware

调色板 RAM 能否转换为16 BPP (每像素位数)输出?

我已将微控制器的16个 IO 连接到 LCD RGB 输入、但通过通读数据表可以看出 RAM 调色板只能与12 BPP 配合使用。 这是真的吗? 我有错误吗?

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

    Tiva Ware 似乎与数据表相矛盾。 数据表显示、RAM 调色板仅将1、2、4或8位转换为12位。 "LCD 调色板 RAM 使用一个12位输出代码、这样就有可能有4096个颜色选项可供选择"


    但是,Tivaware 有一个函数 LCDRasterConfigSet(),该函数接受 rraster_FMT_ACTIVE_PALETTIZED_16BIT 的归档。 这在某种程度上基于我在下面的帖子。

    此参数是否仅对其他微控制器有效、或者我读取的文档不正确?

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

    16位调色板 RAM 模式有点工作。 我尝试单独设置每个位、以查看什么是、结果没有保证:

    0x8000 =亮绿色
    0x4000 =无(黑色)
    0x2000 =无
    0x1000 =无
    0xF000 =亮绿色(与0x8000相同)
    0x0800 =中等红色
    0x0400 =无
    0x0200 =深红色
    0x0100 =非常微弱的红色
    0x0F00 =亮红色
    0x0080 =无
    0x0040 =无
    0x0020 =无
    0x0010 =无
    0x00F0 =无
    0x0008 =蓝色
    0x0004 =深蓝色
    0x0002 =深蓝色
    0x0001 =深蓝色
    0x000F =亮蓝色
    0xFFFF =白色、浅色调为粉红色


    我不明白为什么有些位不起作用。 我对这些位的顺序感到进一步困惑。  高位应为蓝色、中间为绿色、下方为读取值(请参阅原理图屏幕截图)。 但这次试错测试显示上位是绿色的、中间位是红色的、低位是蓝色的! 这不仅仅是反向的。 它全部交换。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    函数 LCDRasterPaletteSet()部分解释了"无内容"位。 例如,当使用 LCDRasterPaletteSet()将调色板复制到帧缓冲区的调色板区域时,值0x7000变为0。 如果我将0x7000直接加载到帧缓冲器中、我会得到绿色。 在没有 LCDRasterPaletteSet()的情况下手动初始化帧缓冲区的调色板区域时,我得到:

    0xF000 =绿色位
    0x0F00 =红色位
    0x00F0 =无(黑色)
    0x000F =蓝色位

    本实验表明、我仍然限于12 BPP、但不知怎么、芯片被骗使用了 CDATA [15:0]。 这种黑客攻击至关重要、因为如果芯片仅限于 LCD2[11:0]、我将不会得到任何使用蓝色的颜色(请参阅屏幕截图)。

    我很高兴这个黑客攻击使我的原型设计正常工作、但我在第一篇帖子中的两个问题的答案是修复设计的关键。 调色板 RAM 是否给我一个12 BPP 的硬性限制、或者芯片是否可以被欺骗使用具有16 BPP 的调色板 RAM?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Peter、

    从硬件角度来看、RAM 调色板的范围限制为8 BPP。

    数据表特别指出:"每像素12、16和24位不使用调色板 RAM、因为会发生原始数据传输。" 图26-3进一步支持这一点、其中显示对于有源 LCD、16和24 BPP 应直接连接到输出引脚。

    在 driverlib 中、您引用的光栅_FMT_ACTIVE_PALETTIZED_16BIT 设置为:"选择活动矩阵显示并使用带调色板查找的1、2、4或8bpp 帧缓冲区。 输出颜色数据以16位5:6:5格式进行描述。" 我相信这就是芯片为您提供16引脚输出的方式。 我目前还不清楚查找是如何完成的、但这些信息是否为您提供了足够的背景来修复您的设计?

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

    拉尔夫

    我想对我原来的问题有一个肯定或否定的答案,似乎答案是否定的

    数据表显示"LCD 调色板 RAM 使用一个12位输出代码、这样就有可能有4096种颜色选项可供选择"
    此外、图26-4是16bpp 调色板 RAM 的有力案例。 数据结构只有12位来定义颜色。 4位不能保持未定义!

    "无"位实际上是完全有意义的。 图26-4显示了数据变为4位类型、4位为红色、4位为绿色、最后4位为蓝色。 在我的原理图屏幕截图中、红色和蓝色的交换不正确。 由于端字节序较小、因此也会交换字节。

    一切都很好、因为我不需要16位颜色。 12位颜色仍然为我提供了更多紫色的阴影、这比我知道如何处理的颜色要多。


    Raster FMT_ACTIVE_PALETTIZED_16BIT 似乎是一个误导性宏。 我检查了具有内置 LCD 控制器的其他 TM4C 微控制器。 它们都不使用调色板来创建16位颜色。 数据表胜过 API。 它是最后一句话。