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.

[参考译文] TM4C123GH6PM:grlib 中的 ssd2119驱动程序

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/567075/tm4c123gh6pm-ssd2119-driver-in-grlib

器件型号:TM4C123GH6PM

大家好、

我正在尝试了解图形库中提供的 SSD2119的驱动程序源代码。 同时、我正在浏览 Solomon Systech 提供的 SSD2119数据表。

www.kentecdisplay.com/.../SSD2119_1.4.pdf

是否有人可以告诉我设置/重置 WR 引脚 thrice 的原因、而不是只在 WriteCommandGPIO、 WriteDataGPIO 等函数中设置/重置一次? 评论说、这是为了调整计时、 但根据数据表、数据线 wrt 写入脉冲的设置和保持时间仅为5ns、而在示波器上探测 WR 引脚后、该引脚在360ns 内处于低电平、因此一条指令足以满足要求、 或者是否有其他原因/我的理解不正确?

此外、有人可以建议8080并行接口的良好来源吗? 我所指的数据表非常模糊/语法不正确。

谢谢!

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

    对于源文件、您指的是哪种 TivaWare?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Amit、您好!
    我指的是 Tivaware 2.1.2.111
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="VARAD Nitin GOKHALE]是否有人可以建议8080并行接口的良好来源?[/quot]

    Google 想到了这一点、但如果失败的话、公司/我已经有过英特尔数据手册、这些数据手册肯定会详细介绍。

    我记得- 8080接口的本质是:

    • 8位、双向、数据总线
    • /RD 和/WR 选通信号
    • /CS 控制线
    • (可能) 1或2个地址行

    您的和类似 IC 通常接受"8080或6800"样式(较旧)的接口。

    6800反映在上面、但用于将/RD 和/WR 的"更改"为单个 R/W 信号并添加"E"选通。   (这是文本 LCD 所需的"E"的来源...)

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

    由于第三方不再支持该电路板、我们已经使用串行实施逐步淘汰了 TivaWare 2.1.3中的并行8080实施。

    TM4C129x 是并行8080接口的选择(BGA 器件具有用于 LCD 的专用外设)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Amit、

    没关系。 但是、我已经在硬件中使用较早的并行8080版本取得了良好的进展、即使应用程序的软件也几乎是完整且有效的。 我只需要知道驾驶员的工作原理和原因、我会很好。 我需要知道、如果将来发生制造变化、我需要稍微调整驱动器。

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

    我认为、由于它是一个8位接口、要写入的数据的高8位和低8位通过切换被单步进入代码、这似乎是一个错误的注释。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Amit、您好!

    没错。 数据的高位和低位被放置在数据总线上、但 WR 线路被强制为低 thrice。 有什么关于为什么这么做的见解吗? 填充计时是一个很好的原因、但即使指令只写入一次、计时也是正确的。 我是否遗漏了什么? 这是代码段。  

    静态空

    WriteDataGPIO (uint16_t usData)

    //

      //将数据的最高有效字节写入总线。

      //

      SET_LCD_DATA (usData >> 8);

    HWREG (LCD_CS_BASE + GPIO_DATA +(LCD_CS_PIN << 2))= 0;

      //

      //将写使能信号置为有效。  执行此操作三次、以确保我们做到这一点

      //满足显示时序要求(50MHz 时每条指令20ns

      //表示我们需要确保 WR 上的边缘之间至少有3条指令)

      //

      HWREG (LCD_WR_BASE + GPIO_DATA +(LCD_WR_PIN << 2))= 0;

      HWREG (LCD_WR_BASE + GPIO_DATA +(LCD_WR_PIN <<2))= 0;  //为什么选择此项??

      HWREG (LCD_WR_BASE + GPIO_DATA +(LCD_WR_PIN << 2))= 0;

      //

      //将写使能信号置为无效。

      //

      HWREG (LCD_WR_BASE + GPIO_DATA +(LCD_WR_PIN <<2))= LCD_WR_PIN; 为什么不在此报告?

      //

      //将数据的最低有效字节写入总线。

      //

      SET_LCD_DATA (usData);

      //

      //将写使能信号置为有效。

      //

      HWREG (LCD_WR_BASE + GPIO_DATA +(LCD_WR_PIN <<2))= 0;    //为什么选择此项??

      HWREG (LCD_WR_BASE + GPIO_DATA +(LCD_WR_PIN << 2))= 0;

      HWREG (LCD_WR_BASE + GPIO_DATA +(LCD_WR_PIN << 2))= 0;

      //

      //将写使能信号置为无效。

      //

      HWREG (LCD_WR_BASE + GPIO_DATA +(LCD_WR_PIN <<2))= LCD_WR_PIN;  //为什么选择此项?

      HWREG (LCD_WR_BASE + GPIO_DATA +(LCD_WR_PIN << 2))= LCD_WR_PIN;

      HWREG (LCD_WR_BASE + GPIO_DATA +(LCD_WR_PIN << 2))= LCD_WR_PIN;

    HWREG (LCD_CS_BASE + GPIO_DATA +(LCD_CS_PIN << 2))= LCD_CS_PIN;

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

    我们的代码库似乎有所不同(在构建中)。 以下是与 TivaWare 2.1.2.111 Kentec 驱动程序相同的代码

    静态空
    WriteDataGPIO (uint16_t ui16Data)

    //
    //将数据的最高有效字节写入总线。
    //
    SET_LCD_DATA (ui16Data >> 8);
    SysCtlDelay(3);

    //
    //将 CS 拉为低电平。
    //
    HWREG (LCD_CS_PIN_REG)= 0;
    SysCtlDelay(3);

    //
    //将写使能信号置为有效。
    //延迟至少60ns (120MHz 时)以满足显示时序要求。
    //
    HWREG (LCD_WR_PIN_REG)= 0;
    SysCtlDelay(3);

    //
    //将写使能信号置为无效。
    //
    HWREG (LCD_WR_PIN_REG)= 0xFF;
    SysCtlDelay(3);

    //
    //将数据的最低有效字节写入总线。
    //
    SET_LCD_DATA (ui16Data);
    SysCtlDelay(3);

    //
    //将写使能信号置为有效。
    //延迟至少60ns (120MHz 时)以满足显示时序要求。
    //
    HWREG (LCD_WR_PIN_REG)= 0;
    SysCtlDelay(3);

    //
    //将写使能信号置为无效。
    //
    HWREG (LCD_WR_PIN_REG)= 0xFF;
    SysCtlDelay(3);

    //
    //取消芯片选择引脚的置位。
    //
    HWREG (LCD_CS_PIN_REG)= 0xFF;
    SysCtlDelay(3);


    我无法确定为什么要应用相同的端口操作、或者为什么要应用延迟(在我的代码库中)、除非要满足设置保持时间 viz-a-viz 锁存或使能信号的变化。 我同意它与 SSD2119的规格相比过高。 但是,如果不知道这种情况的存在,我们一方对遣返的任何澄清都是不恰当的。 最重要的是、由于这些位段方法已经被逐步淘汰、而 TM4C123x 的串行端口和 TM4C129x 的并行端口更是如此、我不确定我是否可以在这里为您提供帮助。

    但是、如果在控制器的设置保持参数上清除了 SSD2119规格、则可以放心地假定优化代码的执行是可以的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Amit、您好!
    感谢您回答问题。 看起来我使用的是 TivaWare Workshop 中"Lab10"的驱动程序、因此结构不同。 也许我会与供应商联系、尝试澄清问题。 像我这样的客户是否应该意识到逐步淘汰位带方法有利于他人的具体原因?
    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Varad

    位段方法起作用、但可能不适用于每种类型的显示、尤其是成本较低的逐稿轮显示、这种逐稿轮显示避免了帧缓冲、但需要高数据吞吐量。 因此、可扩展性是我可以考虑价格与性能成本点的一个方面。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我明白了。 看起来 SSD2119具有他们称为"GDDRAM"的功能。 它在本质上与帧缓冲器是一样的吗? 探测信号时、我没有看到 MCU 连续写入屏幕。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Varad

    我不确定控制器本身、但具有 SSD2119的 Kentec 的显示面板规格支持内部帧缓冲器。 可减轻 MCU 的持续刷新负载。 但是,此类显示比常规光栅面板更昂贵。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    似乎虽然请求了8080信息并得到了应答,但请求已降级。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 CB1、

    它不降级。 我在浏览 Web、查看是否获得8080接口的显式协议信息、例如 SPI 或 I2C 接口。 到目前为止,我还没有找到任何东西,但我得到了“本质”。

    谢谢